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