Skapa grunden för ett Yahtzee spel
I denna uppgiften ska ni börja lite smått med att skapa ett Yahtzee spel.
Ni kommer att fortsätta utveckla spelet igenom flera kursmoment. I denna uppgiften skapar vi grunden med en tärningsklass och en hand (hållare för flera tärningar).
#Förkunskaper
Ni har gått igenom delarna “Intro till guiden” och “Objekt och klasser” i guiden “Kom igång med objekt”.
Ni har jobbat igenom övningen “Introduktion till enhetstester”.
Ni har jobbat igenom övningen “Flask och Jinja2”.
Ni har också gjort din “Flask applikation körbar via CGI”.
Om ni har gjort övningarna så har ni nästan kommit i mål med uppgiften.
#Introduktion
Ni ska som sagt utveckla ett Yahtzee spel över flera kursmoment. Ni som jobbar ensamma ska utveckla spelet för terminalen medan ni som jobbar i grupp ska utveckla spelet för webbläsaren med hjälp av Flask.
Spelet ska följa de internationella reglerna och inte svenska reglerna. Här kan ni hitta reglerna. I denna uppgiften kommer ni inte skapa någon logik för reglerna det kommer i senare uppgifter.
I denna uppgiften ska ni bara skrapa grunden, vilket är tärningar, något att hålla tärningarna i (en hand) och visa upp vilka tärningar som har slagits.
Era klasser ska uppfylla beskrivningarna nedanför. Beskrivningarna är vad som måste finnas, ni får och är rekommenderade att skapa ytterligare metoder och attribut där ni tycker att det behövs.
#Die
Denna klassen ska representera tärning.
#Attributen
MIN_ROLL_VALUE
- Ska innehålla minsta värdet en träning kan slå. Ska användas när en tärning kastas.MAX_ROLL_VALUE
- Ska innehålla största värdet en träning kan slå. Ska användas när en tärning kastas.value
- Ska innehålla värdet en tärning har slagit.
#Metoderna
__init__(value)
-value
parametern ska ha ett default värde. Om man skickar med ett argument tillvalue
parametern i konstruktorn ska tärningen få det värdet. Om argumentet innehåller ett heltal som är större änMAX_ROLL_VALUE
, tilldelaMAX_ROLL_VALUE
som värde på tärningen. Om argumentet innehåller ett heltal som är mindre änMIN_ROLL_VALUE
, tilldelaMIN_ROLL_VALUE
som värde på tärningen. Om man inte skickar med ett argument ska det slumpas fram ett värde till tärningen.get_name()
- ska returnera namnet på värdet tärningen har. En tärning med värdet 1 har namnet “one”, värdet 2 har namnet “two” osv.get_value()
- ska returnera värdet på tärningen.roll()
- slumpa fram ett nytt värde på tärningen. Använd funktionenrandint
i modulenrandom
.__str__()
ska returnera värdet som tärningen har som en sträng.
#Hand
Denna klassen ska representera en spelhand som ska ha fem tärningar den kan spela med.
#Attributen
dice
- en lista som ska innehålla fem Die objekten.
#Metoderna
__init__(values)
-values
parametern ska ha ett default värde. Om man skickar in ett argument till parmetern i konstruktorn, så ska argumentet vara en lista som innehåller fem heltal. De heltalen ska användas för att skapa en tärning med varje heltal. Om man inte skickar med ett argument så skadice
listan få fem Die objekt med slumpade värden.roll(indexes
) -indexes
ska ha ett default värde. Om man inte skickar med ett argument till parametern ska metoden kasta om alla tärningar som finns idice
attributet. Om man skicka in ett argument till parametern ska det vara en lista med heltalen, heltalen ska vara index position för tärningar idice
listan. Då ska bara tärningarna med de index positionerna kastas om, de andra ska ha kvar sina värden.__str__
- ska returnera en komma separerad sträng med värdet på alla tärningar i handen, t.ex."2, 4, 1, 5, 1"
.
#Krav
Kraven är uppdelade i tre sektioner nedanför. Ni som jobbar i grupp måste uppfylla kraven i Krav för alla och Krav grupp. Ni som jobbar ensamma måste uppfylla kraven i Krav för alla och kan välja mellan att göra Krav ensam eller Krav grupp.
#Krav för alla
Spara er kod i
me/kmom01/yahtzee1
.Implementera koden för klassdiagrammen ovanför. Spara filerna i
me/kmom01/yahtzee1/src
.Skriv tester för Die klassen i
me/kmom01/yahtzee1/tests/test_die.py
. Testa följande saker i Die klassen:- Att skapa ett objekt utan skicka argument till konstruktorn.
- Att skapa ett objekt och skicka värde på tärningen till konstruktorn.
- Att skapa ett objekt och skicka ett otillåtet värde på tärningen, som till exempel 100, till konstruktorn.
- Att
roll()
slumpar nytt värde. - Att
get_name()
returnerar korrekt namn. - Att
__str__()
returnerar rätt värde som en sträng.
Använd er av
random.seed()
när ni testar funktionalitet som slumpar värden.
#Krav ensam
Du ska lägga grunden för ett Yahtzee spel i terminal. När du är klar ska du ha följande filstruktur.
Skapa ett terminalprogram med en evighetsloop. När programmet startas ska det automatiskt skapas ett nytt Handobjekt med slumpade tärningar. Skriv ut värdet på alla tärningarna.
Startfilen ska heta
main.py
.Terminalprogrammet ska ha två menyval:
- “r” - kasta om alla tärningar och skriv ut deras värden.
- “q” - avsluta programmer.
Testa, validera och publicera applikationen på studentservern.
#Krav grupp
Ni ska lägga grunden för ett Yahtzee spel i webbläsaren med hjälp av Flask. När ni är klara ska ni ha följande filstruktur. OBS! Bilderna på tärningarna ska ligga under static/img
.
Startfilen ska heta
app.py
och vara körbar viaapp.cgi
.app.cgi
behöver bara fungera på studentservern.Du har installerat modulerna Flask i en virtuell miljö.
Applikationen ska använda Bootstrap.
Applikationen ska ha routen
main
. I den routen ska ni skapa ett Hand objekt med fem slumpade tärningar. På routens sida ska ni visa värdet på handens fem tärningar med hjälp av bilderna som finns i exampel/yahtzee/img. Det finns en bild för varje tärningsslag mellan 1 och 6, med namnen one.png, two.png, three.png, four.png, five.png och six.png. T.ex. om handen slog tärningarna 1, 4, 2, 4, 4 så ska ni visa bilderna one.png, four.png, two.png, four.png och four.png.Ni ska också ha routen
about
där ni på sidan skriva era namn och akronymer.header.html och footer.html ska inkluderas med Jinja2.
Er navbar ska innehålla ett namn på ert Yahtzee spel och länkar till båda routes.
Testa, validera och publicera applikationen på studentservern.
# Ställ dig i kurskatalogen
dbwebb test yahtzee1
dbwebb publish yahtzee1
Rätta eventuella fel som dyker upp och validera igen. När det ser grönt ut så är du klar.
#Extrauppgift
Det finns inga extrauppgifter.
#Tips från coachen
Lär dig felsöka med debuggern, använd den när du får problem. Komplettera med utskrifter av print()
.
Validera ofta. Så slipper du en massa valideringsfel i slutet av övningen.
Lycka till och hojta till i forumet om du behöver hjälp!
#Revision history
- 2022-01-14: (A, aar) Första upplagan.