Yahtzee spelet del 2 - Flask

By , . Latest revision .

I denna uppgiften ska ni binda ihop Yahtzee spelet så att ni får ett fungerade Yahtzee för en spelare.

Färdigt Yahtzee3

Färdigt Yahtzee3

I denna uppgiften vi bygga gränssnittet för koden ni skrev i kmom03.

#Förkunskaper

Ni har gått igenom hela guiden “Kom igång med objekt”.

Ni har jobbat igenom övningen “Flask, POST och GET”.

Ni har jobbat igenom övningen “Mer om enhetstester”.

#Introduktion

Spelet ska följa de internationella reglerna och inte svenska reglerna. Här kan ni hitta reglerna.

Nytt i denna uppgift är att lägga till checkboxar bredvid tärningarna för att på så sätt visa vilka som ska slås om. Vi vill också se en resultattavla med regler och poäng enligt bilden ovanför. Vi vill kunna välja regel, om du använder samma regel 2 gånger vill vi se ett felmeddelande. När du är klar, så vill vi se ett meddelande som säger att spelet är slut.

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.

Andreas visar hur en färdig lösning kan se ut i Flask.

#Krav

#Krav för alla

  1. Kopiera alla filer från me/kmom03/yahtzee2 till me/kmom04/yahtzee3. GLöm inte klassdiagrammet.

  2. Lägg till tester för följande saker:

    • Hand klassen:
      • roll() - Att anropa med en lista som argument och kolla att det slår om rätt tärningar.
      • roll() - Att anropa utan argument och kolla att den slår om alla tärningar.
    • Scoreboard klassen:
      • add_points - Lägg till poäng för en regel och kolla att det blir rätt poäng.
      • add_points - Lägg till poäng för en regel som redan har poäng, kolla att exception lyfts.

Kraven nedanför är för webbsidan.

  1. Använd session för att spara er data för webbsidan.

  2. Lägg till en route reset som nollställer sessionen och därmed startar om spelet. Lägg till den i navbaren.

  3. På webbsidan ska det gå att kasta om specifika tärningar. T.ex. kasta om tärning 1 och 3, då ska tärningarna 2, 4 och 5 inte kastas om. Använd ett formulär med checkboxes. Spara tärningars värde i session med to_list().

  4. På webbsidan ska ni visa vilka regler som finns. Lägg till radiobuttons för de olika reglerna i ett formulär med en submit-knapp.

    • Här kan ni se hur man gör radiobuttons i ett formulär.
    • Bredvid en radiobutton för en viss regel ska namnet på regeln skrivas ut, t.ex. “Three of a kind”.
    • Tips! Istället för att skicka med poängsumman som value i formuläret, skicka med regelns namn. Det innebär att ni måste räkna ut poängen igen på severn.
    • Vid varje regel ska det också visas hur många poäng respektive regel är värd men nuvarande hand och om spelaren redan har använt regeln för att få poäng ska den poängen visas. Kolla på bilden för att se exempel på hur det kan se ut.
  5. Varje gång användaren använder formuläret för att få poäng för en regel, spara den totala poängsumman i session och visa upp den på sidan.

  6. Om användaren väljer en regel som redan har använts för att få poäng ska ni skriva ut ett meddelande där det står att regeln redan är använd. Tärningarna ska inte slås om, utan användaren behöver välja en ny regel för samma Hand för att fortsätta spela.

  7. När spelaren har använt alla regler en gång ska ni skriva ut en text där det står att spelet är slut och hur många poäng spelaren fick.

  8. Begränsa hur många gånger man kan slå om tärningarna innan man väljer en regel.

    • Man får max kasta om tärningarna två gånger, sen måste man välja en regel att få poäng för med nuvarande hand. Man kan få 0 som poäng med en Hand.
  9. Testa, validera och publicera applikationen på studentservern.

# Ställ dig i kurskatalogen
dbwebb test yahtzee3
dbwebb publish yahtzee3

Rätta eventuella fel som dyker upp och validera igen. När det ser grönt ut så är du klar.

#Extrauppgift

  1. Regeln som ger högst möjliga poäng med nuvarande hand ska vara förvald i poänglistan.

  2. Istället för att skriva ut ett felmeddelande när du väljer samma regel igen, så kan du designa ditt spel så att du inte kan välja samma regel igen. När en regel är vald, så ska inte den kunna väljas igen och vilken poäng nuvarande Hand är värde med regeln ska inte skrivas ut.

  3. Lägg till test mockning:

    • Hand klassen:
      • roll - Använd er av mockning för att bli av med på beroendet random.randint() i Die klassen. Gör så att randint alltid returnerar 100. Kolla att handen innehåller fem tärningar med värdet 100.

#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

  • 2024-01-17: (A, aar) Första upplagan.

Document source.

Category: oopython.