Kortspelet War
Vi ska skapa ett kortspel som används från terminalen. Kortspelet kallas War, eller Svälta räv på svenska. Efter implementationen skapar vi några enhetstester och klassdiagram.
#Förkunskaper
Du har gått introduktionskursen i Python.
Du har gått igenom artikeln “Att skriva enhetstester”.
Du har läst artikeln “Klass relationer”.
#Introduktion
Vi utgår från två stycken spelare som turas om att lägga ut ett kort framför sig. Är färgen samma, (hjärter, spader, ruter eller klöver), vinner den som har kortet med högst värde. Vinnaren tar då båda spelarnas högar och lägger i botten av sin egna. Om färgen inte är samma, fortsätter spelet och spelarna placerar ut varsitt nytt kort i sin hög framför sig. Spelet tar slut när en av spelarna har slut på kort. Nedan kan du se ett exempel på hur det är tänkt att fungera:
#Krav
Arbeta i mappen war/.
# Ställ dig i kurskatalogen
$ cd me/kmom03/war
Spelet ska använda klasserna
Deck
,Hand
,War
ochCard
. Spara koden för varje klass i en egen fil, deck.py, hand.py, card.py och war.py.Deck
ska innehålla 52 stycken unikaCard
objekt, som en riktigt kortlek. Det ska finnas en metod för att blanda korten.Card
ska innehålla valör och färg.__repr__
ska överskuggas och returnera en sträng med objekts tillstånd (värden, beskrivning av kortet).Hand
ska representera en spelare. Vid start av spelet ska två Hand objekt skapas och hälften av Card objekten från Deck ska delas ut till vardera Hand objekt.Spelfunktionaliteten, spel loopen, ska hanteras i klassen
War
. Undvik att lägga all kod i en metod, försök dela upp den i flera. Spelet ska starta medpython3 war.py
.Övriga metoder som behövs får ni bedöma själva. t.ex. ta och ge kort mellan Hand/Deck.
Skapa en fil,
test.py
, som ska bestå av enhetstester. Välj ut minst 5 metoder, som inte bara görreturn self.x
, att testa. Gör gärna flera testfall för metoderna och inte bara testfall där allt fungerar, försök få saker att gå sönder och testa förväntat resultat.Skapa klassdiagram över alla klasser. Gör det till en bild och döp filen till
uml.png
.
# Ställ dig i kurskatalogen
$ dbwebb validate war
$ dbwebb publish war
Rätta eventuella fel som dyker upp och validera igen. När det ser grönt ut så är du klar.
#Extrauppgift
- Lägg till stöd för flera spelare, låt spelaren välja antalet vid start.
#Tips från coachen
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
- 2020-01-31: (D, aar) Updated asciinema and requirements.
- 2019-01-19: (C, aar) clarified rules and requirements.
- 2018-02-05: (B, aar) clarified two requirements.
- 2017-12-15: (A, lew) First version for v2.