Projektdokumentation för Gustav Fransson Nyvell gusfr229@student.liu.se Tomas Franzén tomfr819@student.liu.se 1. Inledning Vi har gjort ett -spel som går ut på att man turas om att lägga brickor på en spelplan och ta över motståndarens brickor. Den som har flest brickor när spelplanen är full (eller när ingen kan lägga mer) vinner. 2. Kravspecifikation En person ska kunna spela mot datorn. I början får personen välja vilken sorts bricka denne vill ha. Spelplanen ritas som text i terminalen. Programmet numrerar de möjliga dragen, placerar ut siffrorna på spelplanen och presenterar en lista för användaren som sedan får skriva in en siffra och draget görs. 3. Systemdesign 3.1 Översiktlig beskrivning Systemet består av dessa delar: Spelplanen håller ordning på pjäserna. Man kan sätta ut pjäser, kolla vad som finns i en ruta, och så vidare. AI kan räkna fram bästa dragen. En funktion som man låter gå genom spelplanen och ta reda på vilket drag som är bäst. Gränssnittet tar hand om användaren och kommunikation med denna. 3.2 Algoritmer Om någon har vunnit kontrolleras genom att se om spelplanen är full eller om någon inte har några pjäser kvar på plan. AI-spelaren ska spela enligt min-max-metoden. En möjliga-drag-funktion som ger en flyttar där alla möjliga drag på en viss spelplan finns. En värdera-plan-funktion som ger ett planvärde för en viss spelplan. En funktion som byter brickor mellan två punkter på planen till en viss bricktyp. 3.3 Datastrukturer Strukturer där inga funktioner nämns ovan förväntas ha dessa gemensamt: Skapa struktur (constructor) Ta ut viss del (selector) Kolla om ett godtyckligt objekt är av typen (identificator) 2006-12-07 1
Spelplanen ska vara en matris med 8x8 platser, där varje plats kan ha tre olika värden; spelare 1, spelare 2 eller tom. Spelplanen behöver dessa funktioner: Skapa spelplan Lägg ut en bricka på en plats Kolla vad som ligger på en plats Kolla om någon har vunnit Planvärde innehåller ett heltal. Planvärde berättar hur pass attraktiv en viss spelplan är (till exempel för AI:t). Spelare är en tupel som innehåller en flyttfunktion (lisp-funktion), ett spelarnamn (lispsträng) och en bricktyp. Flyttfunktionen är den som kör-loopen kallar när den vill ha ett drag, på så vis kan en spelare abstraheras till att vara till exempel en person vid tangentbordet, en AI-spelare eller en person vid en annan dator på ett nätverk. Funktioner: En gör-flytt-funktion som tar en spelare och inducerar ett drag från denne på en spelplan. Spelarlista innehåller en cirkulär lista med spelare. Listan är cirkulär därför att man kommer gå igenom den om och om igen. Bricka innehåller en symbol som kan vara SVART eller VIT. Flytt innehåller en punkt på spelplanen. Punkt innehåller två heltal, x och y. Flyttar innehåller en lista av flytt-objekt. othello spel-loop skriv-spelplan gör-flytt mänskligt-drag slump-gör-flytt ai-gör-flytt 2006-12-07 2
4. Användarhandledning Spelet är uppdelat i flera filer. Evaluera filen ladda.cl så laddas alla andra nödvändiga filer. Kör sedan funktionen othello för att starta spelet. Om man använder en terminal som inte klarar färg kan man starta det med t som första parameter (othello t) så används ingen färg. När spelet startar frågar det efter båda spelares typer och namn. Det finns tre olika typer av spelare: Människa är en vanlig spelare som styrs av att användaren får välja drag Dator är en AI-spelare som försöker räkna ut de bästa dragen Slump väljer slumpade drag Välj typ av spelare genom att skriva ett av valen ovan eller bara första bokstaven (M, D eller S). Efter användarvalen får man välja hur stor spelplanen ska vara. Det normala är 8x8, men man kan också köra med en mindre eller större plan om man så önskar. Spelplanen som visas under spelets gång har två olika sorts pjäser motsvarande användarna som skapades under spelets start. Före varje drag visas ett antal siffror (eller bokstäver) på planen motsvarande alla möjliga drag. Användaren väljer sedan en av dessa för att lägga en bricka där och fortsätta. Om man trycker Enter utan att specifiera ett drag slumpas ett fram. 2006-12-07 3
Körexempel (utan färg): CL-USER(2): (othello)! Spelare Vit: Spelartyp: m Spelarnamn: Tomas Spelare Svart: Spelartyp: d Spelarnamn: Datorn Brädets bredd: 8 Brädets höjd: 8 3 X O 2 4 O X 1 Svart: 2 - Vit: 2 Det är Tomas tur. Välj ett drag: 1 2 X O X X 3 X 1 Svart: 4 - Vit: 1 Det är Dators tur. 2006-12-07 4
5. Erfarenheter Vi har lärt oss följande saker av projektet: Det är svårt att skriva en bra specifikation innan man har börjat jobba med projektet. Hur man skriver en enkel AI. Hur man använder Subversion i praktiken i en grupp. Mer om hur arrayer och strukturändrande funktioner fungerar och hur man använder dem. 2006-12-07 5