10.09.2013 Views

Projektdokumentation för Othello 1. Inledning 2 ... - tomasf

Projektdokumentation för Othello 1. Inledning 2 ... - tomasf

Projektdokumentation för Othello 1. Inledning 2 ... - tomasf

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!