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.
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.
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.
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.