Laboration 2b: Spelet Master Mind

Inledning

I denna laboration får ni implementera spelet Master Mind. Spelet går (liksom spelet Hi-Lo) ut på att den ena spelaren tänker ut en hemlig kod, som motspelaren sedan ska gissa fram sig till. Som svar på varje gissning får motspelaren en ledtråd med vars hjälp han/hon kan ringa in det rätta svaret.

I er implementering ska en människa spela mot datorn. Datorn ska kunna spela båda rollerna (dvs både kunna tänka ut en kod som den mänskliga spelaren ska lista ut och kunna lista ut den kod som en mänsklig spelare har valt ut.

Spelet Master Mind

Den hemliga koden
Den hemliga koden (och gissningarna) brukar vara en rad med 4 färgmarkeringar. Det brukar finnas 6 färger att välja på (man kan använda siffrorna 1-6 istället). Dubbletter brukar inte få förekomma.

Ledtrådarna
Efter varje gissning får den gissande spelaren en ledtråd. Denna brukar säga hur många markeringar som är helt rätt, dvs rätt färg på rätt plats i raden, och hur många markeringar som ingår i den hemliga koden, men som sitter på fel plats. Ledtrådarna brukar presenteras med en svart markering för varje helt korrekt markering i gissningen, och en vit markering för varje färg som sitter på fel plats men som ingår i den hemliga koden.

Ett exempel: om den hemliga koden är 1 6 3 4 och spelaren gissar på 5 4 3 6 ska ledtråden bli en svart markering (eftersom 3:an sitter på rätt plats) och två vita markeringar (eftersom 4:an och 6:an ingår i koden, men inte på de platser de förekommer på i gissningen).

När man har gissat rätt blir det alltså fyra svarta markeringar.

Som framgår av beskrivningen ovan finns det utrymme för variation. Ni får själva bestämma de exakta detaljerna. Försök göra programmet så att det går lätt att ändra sådana saker som antal färger att välja mellan och hur lång koden är. Programmet ska klara av minst de storlekar som anges ovan, dvs det ska finnas minst 6 färger att välja mellan och koden ska bestå av minst 4 färgmarkeringar.

Programmets funktion

När programmet startar ska användaren kunna välja vem som ska spela vilken roll. Sedan börjar spelet. Om datorn ska tänka ut dem hemliga koden får användaren börja mata in gissningar och datorn svarar efter varje gissning med en ledtråd. Om det är den mänskliga spelaren som tänker ut den hemliga koden börjar datorn gissa och användaren får mata in ledtrådar.

När ett parti är klart ska man kunna välja på att avsluta programmet eller spela ett nytt parti.

Det kan vara trevligt om datorn håller reda på vem som är bäst genom att räkna ut det genomsnittliga antalet gissningar per parti för de båda spelarna.

Redovisning

Inlämningskatalogen ska innehålla programkoden, ett körbart program och en (eller flera) filer med dokumentation.

Programmet ska vara väl strukturerat. Gör en bra modulindelning. Tre moduler kan kanske vara lagom: en modul som tillhandahåller datatyper med tillhörande operationer (utskrift, inläsning, mm) för koder och ledtrådar; en modul som innehåller algoritmen som används när datorn listar ut den hemliga koden; en modul som innehåller huvudprogrammet, som sköter dialogen med användaren. Gör inte för stora procedurer, utan dela in i väl valda hjälpprocedurer med förklarande namn. (En bra tumregel är att inte göra procedurer större än att hela procedurkroppen får plats på bildskärmen.)

Dokumentationen ska beskriva vilka spelregler ni har valt, och hur programmet används. Den ska även innehålla en beskrivning av programstrukturen: vilka moduler som ingår, de viktigaste datatyperna och operationer på dem. Beskriv noggrant algoritmen datorn använder för att lista ut användarens kod.