Spel

Nu ska vi bygga vårt första spel - nämligen klassikern Sten, Sax, Påse.
Om du inte läst avsnitten innan bör du göra det, vi kommer använda många av de delarna här.

Hur funkar det?

Vi börjar inte med kod utan med en plan! Den kan vi göra med penna och papper eller i kommentarer i din fil.

Datorn ska i hemlighet välja sten, sax, eller påse - helt slumpmässigt. Om vi säger att \(\texttt{sten} = 1\), \(\texttt{sax} = 2\), \(\texttt{påse} = 3\), så kan vi slumpa fram ett tal \(1\;\texttt{till}\;3\) för detta. Vi kan använda random.randint för detta.

Sedan ska vi fråga användaren vad hen vill göra: \(1,2\;\texttt{eller}\;3\). Vi kan använda input för detta. Och beroende på vad vi valt, och vad datorn valt, så berättar vi om användaren vann, förlorade, eller det blev oavgjort. Här behöver vi några if-satser.

Strukturen borde bli något liknande: 

Prova att själv ersätta kommentarerna här ovan med kod innan du läser vidare. Oroa dig inte för att det inte blir perfekt.

Vad vi har här kallar man ofta för en “specifikation” eller kortfattat bara en “spec” - en beskrivning av vad som ska göras.

Datorns val

Vi har tidigare använt modulen random (i avsnittet om moduler​), och det kan vi göra även här. Vi slumpar fram ett tal mellan \(1\) och \(3\), och använder en variabel som vi döper till dator för att bestämma datorns val för sten, sax, eller påse.

# Slumpa fram 1-3 och använd det för att bestämma datorns val
import random
slumptal = random.randint(1, 3)
if slumptal == 1:
    dator = "sten"
elif slumptal == 2:
    dator = "sax"
else:
    dator = "påse"

OBS! Detta program ger inte något resultat än, utan variabeln dator kommer vi att använda senare I programmet.

Användarens val

Här är det inte mycket mer att göra än att fråga:

# Fråga användaren om sten, sax eller påse
anv = input("Sten, sax eller påse?")

Användarens val sparas i variabeln anv.

Vem vann?

Om datorn och användaren valt helt identiskt så blir det oavgjort. Det kan vi uttrycka såhär:

if dator == anv:
    print("Oavgjort")

Annars finns det några alternativ, till exempel att datorn valt "sten" och användaren valt "påse", vilket gör att användaren vinner. Det kunde vi skriva såhär:

if dator == "sten" and anv == "påse":
    print("Du vann!")

Nu återstår bara att fylla i de andra möjligheterna.

Komplett program

Sätt ihop alla delar och gå igenom koden noga själv:

# Slumpa fram 1-3 och använd det för att bestämma datorns val
import random
slumptal = random.randint(1, 3)
if slumptal == 1:
    dator = "sten"
elif slumptal == 2:
    dator = "sax"
else:
    dator = "påse"

# Fråga användaren om sten, sax eller påse
anv = input("Sten, sax eller påse?")

# Jämför datorns och användarens val och skriv ut vem som vann
if dator == anv:
    print("Oavgjort")
elif dator == "sten" and anv == "påse":
    print("Du vann!")
elif dator == "sten" and anv == "sax":
    print("Datorn vann!")
elif dator == "sax" and anv == "påse":
    print("Datorn vann!")
elif anv == "sten" and dator == "påse":
    print("Datorn vann!")
elif anv == "sten" and dator == "sax":
    print("Du vann!")
elif anv == "sax" and dator == "påse":
    print("Du vann!")
else:
    print(“Skrev du in något konstigt?”)

Som du märker är spelet slut efter att vi spelat en omgång. Vore det inte härligt om spelet började om igen när vi spelat, speciellt om det blev oavgjort? Det ska vi prata om i nästa avsnitt.

I videolektionen bygger vi upp ett annat spel med hjälp av en sköldpadda.

Har du en fråga du vill ställa om Spel? Ställ den på Pluggakuten.se
Har du hittat ett fel, eller har du kommentarer till materialet på den här sidan? Mejla matteboken@mattecentrum.se
Läs sidan på andra språk

I den här videon går vi igenom ett annat spel som involverar en sköldpadda som rör sig enligt användaren svar.

  • Specifikation: En beskrivning av vad ett program eller spel ska innehålla, och vad användare ska kunna göra med det. Vi kan skriva den med hjälp av kommentarer innan vi börjar programmera.
  • If-sats: Nyckelordet “if” följt av ett logiskt påstående används för att låta våra program fatta beslut.
  • Modul: Vi kan återanvända kod som andra har skrivit i våra program. För att det inte ska bli överväldigande mycket delas den upp i moduler, som vi kan importera vid behov. En modul innehåller en eller flera funktioner.
  • Variabel: En plats i datorns minne där vi kan spara något, kanske en bit text, ett namn, eller ett tal som 42.
Svårighetsgrad