Systembeskrivning DRABBNING



Relevanta dokument
PROJEKT- PRESENTATION

Projekt: Projekthemsida: Kurskod: Kursnamn: Uppdragsgivare: DRABBNING Projektmedlemmar:

Fyra i rad Javaprojekt inom TDDC32

Lab5 för prgmedcl04 Grafik

Objektorientering: Lagring, räckvidd och livstid

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Malmö högskola 2007/2008 Teknik och samhälle

Tentamen i Objektorienterad programmering

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Detaljbeskrivning av Player

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen i Objektorienterad programmering

Objektorientering: Lagring och livstid

Malmö högskola 2007/2008 Teknik och samhälle

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

PROGRAMMERINGSTEKNIK TIN212

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

EDA095 Nätverksprogrammering

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Monday, November 16, Senaste Labben

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Grafiska användargränssnitt i Java

TDDD78 Objektorientering: Lagring och livstid

Tentamen OOP

TENTAMEN I. OBJEKTORIENTERAD PROGRAMMERING för Z1. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Projektdokumentation för Othello

Nätverksprogrammering, EDA095

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Grafiska användargränssnitt i Java

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Grundläggande programmering med C# 7,5 högskolepoäng

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

Objektorienterad programmering med Java Swing. Programexempel. Swing och AWT AWT. = Abstract windowing toolkit

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Handbok Fyra i rad. Martin Heni Eugene Trounev Benjamin Meyer Johann Ollivier Lapeyre Anton Brondz Översättare: Stefan Asserhäll

MVC-mönstret. model-view-control i Swing

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Del A (obligatorisk för alla)

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Objektsamlingar i Java

Objektorienterad programmering D2

Properties. Användbara metoder som kan anropas i propertychanged:

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Lösningsförslag övning 2.

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

Malmö högskola 2008/2009 CTS

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Objektorienterad programmering i Java

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

kl Tentaupplägg

Grafiska användargränssnitt i Java

Laboration 4: Digitala bilder

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Laboration 1: Figurer i hierarki

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Lösningsförslag tentamen FYTA11 Java

Föreläsning 10. ADT:er och datastrukturer

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Användarmanual Wapspel

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Programmering för språkteknologer II, HT2014. Rum

JAVAUTVECKLING LEKTION 11

Transkript:

Projekt: Drabbning Projekthemsida: www.nada.kth.se/projects/prom03/drabbning Kurskod: 2D1362 Kursnamn: Programutvecklingsprojekt med mjukvarukonstruktion Uppdragsgivare: Pelle Mårtenson (pelle@kreativatankar.nu) Systembeskrivning DRABBNING Projektmedlemmar: Johan Boström (projektledare), johanbos@kth.se Linnea Drewitz, linnead@kth.se Frida Hjalmarsson, fridahj@kth.se Pontus Ilbring, pontusi@kth.se Borna Safai, borna@kth.se Fredrik Gustavsson, fredgson@kth.se Mattias Mårtensson, u14fj5u7@kth.se Jonas Wiklund, jowi@kth.se

Innehållsförteckning 1 Översikt...5 1.1 Inledning...5 1.2 GUI...5 1.3 Logic...6 1.4 Game...6 1.5 Proxy...7 1.6 Cache...8 2 Klassbeskrivning...9 2.1 Drabbning...9 2.1.1 Funktioner...9 2.2 Chat, package GUI...9 2.2.1 Instansvariabler...9 2.2.2 Funktioner...10 2.3 ConnectGUI, package GUI...10 2.3.1 Instansvariabler...10 2.3.2 Funktioner...11 2.4 Control, package GUI...12 2.4.1 Instansvariabler...12 2.4.2 Funktioner...13 2.5 Controller, package GUI...13 2.5.1 Instansvariabler...13 2.5.2 Funktioner...14 2.6 GUIBoard, package GUI...16 2.6.1 Instansvariabler...16 2.6.2 Funktioner...17 2.7 Left, package GUI...18 2.7.1 Instansvariabler...18 2.7.2 Funktioner...18 2.8 MainGUI, package GUI...18 2.8.1 Instansvariabler...18 2.8.2 Funktioner...19 2.9 Right, package GUI...19 2.9.1 Instansvariabler...19 2.9.2 Funktioner...19 2.10 Square, package GUI...19 2.10.1 Instansvariabler...19 2.10.2 Funktioner...20 2.11 Status, package GUI...20 2.11.1 Instansvariabler...20 2.11.2 Funktioner...21 2.12 Board, package Model...22 2.12.1 Konstanter...22 2.12.2 Instansvariabler...23 2.12.3 Funktioner...24 2.13 Cache, package Model...25 2.13.1 Konstanter...25 2.13.2 Instansvariabler...25 2

2.13.3 Funktioner...25 2.14 CacheSquare, package Model...26 2.14.1 Instansvariabler...26 2.15 Coord, package Model...26 2.15.1 Instansvariabler...26 2.15.2 Funktioner...26 2.16 Game, package Model...27 2.16.1 Konstanter...27 2.16.2 Instansvariabler...27 2.16.3 Funktioner...28 2.17 GameState, package Model...30 2.17.1 Konstanter...30 2.17.2 Instansvariabler...31 2.17.3 Funktioner...31 2.18 Logic, package Model...33 2.18.1 Konstanter...33 2.18.2 Instansvariabler...33 2.18.3 Funktioner...33 2.19 MapDefinition, package Model...34 2.19.1 Instansvariabler...34 2.19.2 Funktioner...34 2.20 Move, package Model...35 2.20.1 Instansvariabler...35 2.20.2 Funktioner...35 2.21 Piece, package Model...36 2.21.1 Instansvariabler...36 2.21.2 Funktioner...36 2.22 PieceType, package Model...37 2.22.1 Instansvariabler...37 2.22.2 Funktioner...38 2.23 Player, package Model...38 2.23.1 Instansvariabler...38 2.23.2 Funktioner...38 2.24 Proxy, package Model...39 2.24.1 Instansvariabler...39 2.24.2 Funktioner...39 2.25 Square, package Model...39 2.25.1 Instansvariabler...39 2.25.2 Funktioner...40 2.26 StateData, package Model...40 2.26.1 Instansvariabler...40 2.26.2 Funktioner...41 2.27 BenCode, package Net...44 2.27.1 Funktioner...44 2.28 Codec, package Net...45 2.28.1 Konstanter...45 2.28.2 Instansvariabler...46 2.28.3 Funktioner...46 2.29 Network, package Net...47 2.29.1 Instansvariabler...47 3

2.29.2 Funktioner...48 2.29.3 Interna Klasser...49 3 Filspecifikation...49 3.1 Spelplan...49 3.2 Pjästyp...49 4

1 Översikt 1.1 Inledning Drabbning är skrivet i Java, enligt objektorienterade principer och efter designmönstret Model-View-Controller. GUI klasserna fungerar alltså som View, spelets logik implementeras av Modelklasserna, och Controllern fungerar som en brygga mellan gränssnitt och spel. 1.2 GUI Programmets huvudklass Drabbning gör inte mycket mer än att sätta igång Controllern, vilken implementeras av den fantasifullt döpta klassen Controller. Denna äger och hanterar sedan både gränssnitt och logik. Anslutningsfönstret skapas av klassen ConnectGUI, och spelets huvudfönster av MainGUI och dennes underklasser. Control för rutan med knapparna Klar och Kapitulera, status för Statusrutan, Chat för chatrutan, och GUIBoard för spelplanen och Square för rutorna på spelplanen. 5

1.3 Logic Controller använder sig även av Logic, en specialklass för att starta spel och nätverksanslutningar, och för att läsa in kartor och spelpjäser från fil. Både kartor och spelpjäser sparas som textfiler, så att det skall vara så simpelt som möjligt att redigera dem och skapa nya. Drabbning är ju fortfarande i prototypstadiet och inte färdigbalanserat. Kartor representeras som objekt av klassen MapDefinition och pjästyper av klassen PieceType. 1.4 Game Spel representeras av klassen Game. De utspelar sig på en karta representerad av den nyss nämnda MapDefinition. Spelet använder klassen Board och denna i sin tur objekt av den interna klassen Square (inte att förväxlas med gränssnittets publika klass Square) för att hålla reda på var spelpjäserna står. Spelpjäser representeras av klassen Piece, är av en typ PieceType, tillhör en spelare som representeras av klassen Player, och vet att rutan de står på har koordinater representerade av ett objekt av Coord klassen. Vidare har spelet en GameState vilken håller reda på vilket tillstånd spelet befinner sig i t ex. inköpsfas, uppställningsfas, klar med uppställning och väntar på att motståndaren skall bli klar med sin, en pjäs är markerad för att utföra ett drag, o.s.v. Klassen StateData håller information relevant för de olika tillstånden som hur många pjäser man köpt, vilka pjäser man har markerat för att utföra en gemensam attack och målet för den gemensamma attacken, vilka spelare som deltar i spelet o.s.v. Slutligen skapar spelet Move objekt representerande de drag spelaren utför. Dessa lagras undan i statedata, varifrån de hämtas av nätverkets Sender tråd och sänds i väg till motspelaren. På motsvarande sätt tar nätverkets Receiver tråd mot drag från motspelaren. 6

1.5 Proxy Proxy är en annan specialklass. Oavsett om en spelare är nord eller syd kommer det grafiska gränssnittet att visa honom spelplanen roterad så att det ser ut som han är syd. Klassen Proxy används för att för en viss spelare och ett vist spel översätta mellan spelkoordinater och gränssnittskoordinater. 7

1.6 Cache För att kunna veta vilka rutor en pjäs kan gå till och vilka rutor den kan anfalla måste vi göra en sökning över spelplanen. StateData använder klassen Cache för att utföra och lagra resultatet av en breddenförstsökning efter vad den markerade pjäsen kan göra. 1.7 Network Nätverket för ett spel använder sig av trådar för att utföra sina sysslor. Tråden Receiver tar mot drag från motspelaren och utför dem på spelmodellen. Tråden Sender skickar spelarens egna drag till motspelaren. Tråden Connecter används enbart då man agerar server, och ligger då och väntar på att en utmanare skall ansluta till spelet. Klassen codec används för att konvertera drag och annan information som ska skickas över nätet till objekt av datatyperna heltal, strängar, listor och dictionaries. Dessa kodas sedan med protokollet Bencoding, ett protokoll för att koda just dessa sorters datatyper som text, med hjälp av klassen BenCode. 8

2 Klassbeskrivning 2.1 Drabbning Drabbning klassen används för att starta spelet. 2.1.1 Funktioner public static void main(string [] args) Startar spelet genom att skapa en instans av Controller klassen och en instans av ConnectGUI klassen. 2.2 Chat, package GUI Chat klassen bygger upp och sköter chatrutan i spelets huvudfönster. Chatrutan används inte enbart för kommunikation spelarna emellan, utan även för meddelanden från spelet. 2.2.1 Instansvariabler private Controller controller Instans av Controller klassen som tar hand all inmatning. private TextArea chatmessage Innehåller chattens text. 9

private JTextField chatbox private JButton send Ett textfält för att skriva in meddelanden till motspelaren och en knapp för att sända dem. 2.2.2 Funktioner public Chat(Controller controller) Konstruktor. Skapar en chatruta och ritar ut dess innehåll i form av textrutor och knappar. public void enablesend() Aktiverar meddelanderutan och "Skicka" knappen. public void addmessage(string message) Lägger till ett meddelande i textrutan som visar chathistoriken. public void chatmessage(string message) Som addmessage, men lägger till > framför meddelandet för att visa att det kommer från motspelaren. public void actionperformed(actionevent e) Lägger till meddelandet till chathistoriken i chatrutan, och anropar controller för att skicka meddelandet till motståndaren. 2.3 ConnectGUI, package GUI ConnectGUI klassen bygger upp och visar fönstret som innehåller all information och inmatning som behövs för att skapa anslutningen mellan de två spelarna. 2.3.1 Instansvariabler private Controller controller Instans av Controller klassen som tar hand all inmatning. private Vector boards Vektorn innehåller listan med fördefinierade spelbräden. private JFrame connectwindow Själva anslutningsfönstret. private ButtonGroup serverclientgroup private JRadioButton serverbutton private JRadioButton clientbutton För att välja om man vill starta ett spel som server, eller ansluta till ett spel som klient. private JPanel clientpanel Panel med de alternativ som är relevanta för att ansluta till ett spel som klient. private JTextField remoteadress 10

private JTextField remoteport private JLabel adressportlabel Textfält för att fylla i adress och port hos servern man ansluter till, samt etikett för dessa fält. private JButton makeconnection Knapp för att ansluta till server. private JPanel serverpanel Panel med alternativ för att starta ett spel som server. private JTextField localport private JLabel portlabel Textfält för att fylla i den port servern lyssnar på, samt etikett för fältet. private JButton waitforconnection Knapp för att vänta på att en utmanare ansluter till servern så spelet kan börja. private JPanel settingpanel Panel med fler alternativ som är relevanta då man startar spel som server. private JSpinner serverresources private SpinnerNumberModel serverresourcesmodel private JTextArea serverresourcestext private JLabel serverresourcelabel private JSpinner serverresources private SpinnerNumberModel clientresourcesmodel private JTextArea clientresourcestext private JLabel clientresourcelabel private JLabel resourcelabel Spinners för att ställa in resurser för server och klient, samt etiketter för dessa. private JList boardlist private JScrollPane boardchose private JLabel boardlabel En lista för att välja vilken karta man skall spela på, samt dess etikett. 2.3.2 Funktioner public ConnectGUI(Controller controller, Vector boards) Konstruktor. Skapar och visar anslutningsfönstret. private void populateframe(container container) private JPanel buttonspanel() private JPanel clientpanel() private JPanel serverpanel() private JPanel settingspanel() private JPanel resourcespanel() private JPanel boardspanel() Hjälpfunktioner för konstruktorn. Skapar fönstrets innehåll. 11

private void setenabledforclient(boolean enabled) Aktiverar och stänger av alla objekt i klientpanelen. private void setenabledforserver(boolean enabled) Aktiverar och stänger av alla objekt i serverpanelen och inställningspanelen. public int getserverresource() Returnerar det resursvärde som ställts in för spelaren som agerar server. public int getclientresource() Returnerar det resursvärde som ställts in för spelaren som agerar klient. public String getboardmap() Returnerar namnet på det spelbräde som valts. public String getadress() Returnerar ip-adressen spelaren som agerar klient har angett. public int getserverport() Returnerar det portnummer som spelaren som agerar server har angett. public int getclientport() Returnerar det portnummer som spelaren som agerar klient har angett. public void serverblock() Ändrar utseendet på användargränssnittet så att det går och avbryta ett anslutningsförsök. public void serverunblock() Ändrar utseendet på användargränssnittet så att det går att välja att börja vänta på en anslutning ska skapas. public void actionperformed(actionevent e) Tar hand om inmatningen i fönstret och vidarebefordrar denna till klassen Controller genom att anropa olika metoder i Controller klassen. Vilken metod som anropas beror på inmatningen. De metoder som kan anropas i Controller är: - connectpressed, denna metod anropas om spelaren valt att agera klient. - awaitconnectionpressed, denna metod anropas om spelaren har valt att agera server. 2.4 Control, package GUI Control klassen bygger upp och sköter kontrollrutan i spelets huvudfönster. Denna består av två knappar. 2.4.1 Instansvariabler private Controller controller Instans av Controller klassen som tar hand all inmatning. private JButton ready Knapp för att avsluta din tur. 12

private JButton surrender Knapp för att ge upp. 2.4.2 Funktioner public Control(Controller icontroller) Konstruktor. Skapar en kontrollruta och ritar ut dess innehåll. public void enablecapitulate() Ändrar egenskapen enabled till true för knappen Kapitulera, dvs det går att trycka på knappen. public void enableready() Ändrar egenskapen enabled till true för knappen Klar, dvs det går att trycka på knappen. public void disableready() Ändra egenskapen enabled till false för knappen Kapitulera, dvs det går inta att trycka på knappen. public void actionperformed(actionevent e) Vidarebefordrar knapptryckningar till klassen Controller genom att anropa capitulatepressed eller readypressed. 2.5 Controller, package GUI Control klassen tar hand om all inmatning från användargränssnittet. 2.5.1 Instansvariabler private ConnectGUI connectgui Instans av ConnectGUI klassen som har hand om användargränssnittet för anslutningen mellan de två spelarna. private MainGUI game Instans av MainGUI klassen som bygger upp huvudfönstret. private GUIBoard board Instans av GUIBoard klassen som ansvarar för den grafiska representationen av spelbrädet. private Chat chat Instans av Chat klassen som bygger upp chatrutan i huvudfönstret. private Status status Instans av Status klassen som bygger upp statusrutan i huvudfönstret. private Control control Instans av Control klassen som bygger upp kontrollrutan i huvudfönstret. 13

private Logic logic Instans av Logic klassen från Model paketet. private Game game Det spel som spelas. private Proxy proxy En proxy för lokal spelare, aktivt spel. private PieceType piecetoplace Aktuell pjästyp som spelaren valt för utplacering på brädet i pjäsplaceringsfasen. private PieceType piecetypeinsquare När en ruta markerats på spelbrädet sätts denna instansvariabel till den pjästyp som finns i rutan. private Piece pieceinsquare När en ruta markerats på spelbrädet sätts denna instansvariabel till den pjäs som finns i rutan. private int mode Håller reda på vilken fas spelaren är i: 0 = pjäsrekrytering 1 = pjäsplacering 2 = spelfasen. 2.5.2 Funktioner public Controller() Konstruktor. Instantierar logic. public void showconnectgui() Skapar och visar fönstret för att starta ett spel. public void hideconnectgui() Stänger anslutningsfönstret. public void showmaingui() Skapar och visar spelfönstret. public void updatenumbersleft() Hämtar hur information från spelmodellen om många pjäser varje spelare har kvar och vidarebefordrar denna information till Status klassen. public void startthread() Startar en tråd som lyssnar på spelmodellen efter ändringar i spelet, tex om spelplanen behöver ritas om. Dessutom lyssnar tråden efter chatmeddelanden public void setboard(guiboard iboard) Initierar instansvariabeln board till iboard. 14

public void setchat(chat ichat) Initierar instansvariabeln chat till ichat. public void setstatus(status istatus) Initierar instansvariabeln status till istatus. public void setcontrol(control icontrol) Initierar instansvariabeln control till icontrol. public void connectpressed() Skapar ett spel i spelmodellen som klient och försöker ansluta till servern. public void awaitconnectionpressed() Skapar ett spel i spelmodellen som server och väntar på att en klient ska ansluta. public void abortserver() Servern slutar lyssna efter utmanare. public void connectionestablished(game game) Stänger anslutnignsfönster, visar spelplan, startar spel. public void servererror(exception e) Anropas av nätverket om försök att lyssna efter anslutningar misslyckas. private void placeorremovepiece(coord coord) Placerar ut en pjäs på rutan om den är tom, och plockar bort pjäsen som står där om den inte är det. private void updatelefttoplace(piecetype oftype) Används när pjäser ställts ut eller tagits bort. Uppdaterar textfälten i status för att visa hur många pjäser av en viss typ man har kvar att ställa ut. public void sqaurepressed(coord square) Anropas då spelaren klickat på en ruta på spelbrädet. I placeringsfasen anropas placeorremovepiece. I spelfasen skickas information om pjäsen till Status klassen. Dessutom skickas information om klicket till spelmodellen. public void pressedsend(string message) Anropas då en spelare tryckt på Skicka knappen i chatrutan. Metoden skickar chatmeddelandet message till motspelaren via nätverket. public void chooseknight() Anropas då en spelare tryckt på tung ryttare i statusrutan under pjäsplaceringsfasen. Metoden sätter piecetoplace till tung ryttare och talar om för Status klassen att tung ryttare är vald. public void choosehorseman() Anropas då en spelare tryckt på lätt ryttare i statusrutan under pjäsplaceringsfasen. Metoden sätter piecetoplace till lätt ryttare och talar om för Status klassen att lätt 15

ryttare är vald. public void chosefootman() Anropas då en spelare tryckt på fotsoldat i statusrutan under pjäsplaceringsfasen. Metoden sätter piecetoplace till fotsoldat och talar om för Status klassen att fotsoldat är vald. public void choseflag() Anropas då en spelare tryckt på fana i statusrutan under pjäsplaceringsfasen. Metoden sätter piecetoplace till fana och talar om för Status klassen att fana är vald. public void capitulatepressed() Anropas då en spelare klickat på knappen Kapitulera. Metoden öppnar en dialog och frågar om spelaren verkligen vill kapitulera. Om så är fallet talar metoden om för spelmodellen att spelaren har kapitulerat. public void exitpressed() Anropas då en spelare stänger sitt spelfönster och metoden avslutar självklart programmet. public void readypressed() Anropas då en spelare klickat på knappen Klar. Beroende på vilket värde mode har görs olika saker. Om mode = 0 har spelaren just rekryterat sina pjäser och ska placera ut dem. Spelbrädet ritas ut och informationen i statusrutan ändras till information om pjäsplaceringen. Dessutom informeras spelmodellen om att spelaren är färdig med rekryteringsfasen. Till sist sätts mode till 1. Om mode = 1 har spelaren placerat ut alla sina pjäser. Spelbrädet ritas om och spelmodellen informeras om att spelaren är färdig med pjäsplaceringsfasen. Till sist sätts mode till 2. Om mode = 2 är spelet i spelfasen. Ett klick på knappen Klar innebär då att spelaren är färdig med sina drag denna omgång. Spelmodellen informeras om detta. 2.6 GUIBoard, package GUI GUIBoard klassen har två uppgifter. Dels ritar klassen ut spelbrädet och dels ritar klassen ut gränssnittet för pjäsrekrytering. Gränssnittet för pjäsrekryteringen och spelbrädet ritas ut vid olika tillfällen men på samma ställe i spelets huvudfönster så därför implementeras detta i samma klass. 2.6.1 Instansvariabler private Controller controller Instans av Controller klassen som tar hand all inmatning. private Square[][] square Matris som innehåller spelbrädets alla rutor. private int resource Storleken på de resurser som spelaren kan rekrytera för. 16

private int freeresource Storleken på de resurser som spelaren har kvar att rekryterarför. private int footmen private int knights private int horsemen Antalet fotsoldater, tunga ryttare och lätta ryttare spelaren köpt. protected int sizex Spelbrädets storlek i x-led. protected int sizey Spelbrädets storlek i y-led. private JLabel ResourcesLabel Visar hur många resurser spelaren har att köpa pjäser för. private JLabel knightslabel private JLabel horsemenlabel private JLabel footmenlabel Visar hur många tunga ryttare, lätta ryttare och fotsoldater spelaren köpt för sina resurser. private JSpinner knightsspinner private JSpinner horsemenspinner private SpinnerNumberModel knightsmodel private SpinnerNumberModel horsemenmodel private JTextArea knightsspinnertext private JTextArea horsemenspinnertext Spinners för att köpa tunga och lätta ryttare. private JPanel squares private JScrollPane scrollsquares private JViewport viewport Den panel där spelrutorna visas under uppställningsfasen och spelfasen, med tillhörande ScrollPane och Viewport. Icon bluefootman Icon greenfootman Icon bluehorseman Icon greenhorseman Icon blueknight Icon greenknight Icon blueflag Icon greenflag Grafik som används av spelrutorna. 2.6.2 Funktioner public GUIBoard(Controller icontroller) Konstruktor. Anropar loadgraphics 17

public void choosepieces() Ritar ut gränssnittet för pjäsrekryteringen. public void setupboard() Skapar matrisen med rutorna på spelbrädet och ritar ut detta. public void setresource(int iresource) Ställer in spelarens resurser. public int getfootmen() public int getknights() public int gethorsemen() Returnerar antalet fotsoldater, tunga ryttare och lätta ryttare spelaren köpt. public void redrawboard() Går igenom matrisen square och talar om för varje ruta att den ska uppdatera sig, dvs rita om sig. public void loadgraphics() Laddar in grafiken för de olika spelpjäserna. 2.7 Left, package GUI Left klassen är en hjälpklass för uppbyggandet av användargränssnittet. Den skapar den vänstra halvan av spelets huvudfönster. 2.7.1 Instansvariabler private GUIBoard board Instans av GUIBoard klassen som ritar ut spelbrädet. private Chat chat Instans av Chat klassen som ritar ut chatrutan. 2.7.2 Funktioner public Left(Controller controller) Konstruktor. Skapar den vänstra halvan av spelets huvudfönster som består av ett spelbräde och en chatruta. 2.8 MainGUI, package GUI MainGUI klassen skapar spelets huvudfönster och skapar dess innehåll. 2.8.1 Instansvariabler private JFrame mainwindow Själva fönstret som spelet visas i. 18

private Left left Instans av Left klassen som ritar den vänstra halvan av spelets huvudfönster. private Right right Instans av Right klassen som ritar den högra halvan av spelets huvudfönster. private Controller controller Instans av Controller klassen som tar hand all inmatning. 2.8.2 Funktioner public maingui(controller controller) Konstruktor. private void populateframe(container container) Skapar den vänstra och högra halvan av spelets huvudfönster. Används av konstruktorn. public void windowclosing(windowevent e) Anropar exitpressed i Controller klassen. 2.9 Right, package GUI Right klassen är en hjälpklass för uppbyggandet av användargränssnittet. Den skapar den högra halvan av spelets huvudfönster. 2.9.1 Instansvariabler private Control control Instans av Control klassen som ritar ut kontrollrutan. private Status status Instans av Status klassen som ritar ut statusrutan. 2.9.2 Funktioner public Right(Controller controller) Konstruktor. Skapar den högra halvan av spelets huvudfönster som består av en statusruta och en kontrollruta. 2.10 Square, package GUI Square klassen är den grafiska representationen av en ruta på spelbrädet. 2.10.1 Instansvariabler private Controller controller Instans av Controller klassen som tar hand all inmatning. 19

private GUIBoard board Instans av GUIBoard klassen som ansvarar för den grafiska representationen av spelbrädet. private Coord coord Pekar ut rutan på spelmodellens bräde. 2.10.2 Funktioner public Square(Coord coord, GUIBoard board, Controller controller) Konstruktor. Skapar en ruta på brädet och ritar ut den. private void updateicon() Ändrar spelpjäsen (som representeras av en ikon) i rutan. Vilken ikon som visas i rutan beror på rutans status i spelmodellen. private void updatebackground() Ändrar rutans bakgrundsfärg. Vilken färg som visas beror på rutans status i spelmodellen. public void updatesquare() Anropar updateicon och updatebackground. public void mouseclicked(mouseevent e) Anropar squarepressed i Controller klassen. 2.11 Status, package GUI Status klassen bygger upp och ritar ut statusrutan i spelets huvudfönster. Statusrutan har tre olika utseenden. Vilket utseende som visas beror på i vilken fas spelet befinner sig i. Om spelet är i pjäsrekryteringsfasen visar statusrutan information om de olika pjäsernas egenskaper. Om spelet är i pjäsrplaceringsfasen visar statusrutan information om hur pjäser som är kvar att placera ut. Om spelet är i spelfasen visar statusrutan information om spelarnas antal kvarvarande spelpjäser och information om markerad pjäs. 2.11.1 Instansvariabler private Controller controller Instans av Controller klassen som tar hand all inmatning. private JLabel knightclickable private JLabel horsemanclickable private JLabel footmanclickable private JLabel flagclickable Används vid utplaceringsfasen. Dessa labels används för att visa vilken typ av pjäser spelaren ställer ut, hur många pjäser han har kvar att ställa ut, och för att låta honom ändra vilken typ av pjäser han ställer ut. private JLabel turntext Används vid spelfasen. Visar vems tur det är. 20

private JLabel footmannumbertext private JLabel horsemannumbertext private JLabel knightnumbertext Används vid spelfasen. Visar hur många pjäser båda spelarna har kvar av en viss typ. private JLabel piecetypetext private JLabel movementtext private JLabel strengthtext Används vid spelfasen. Visar den valda pjäsens typ, steg, och kraft. private JLabel manypower private JLabel manypowernumbertext private JLabel selectedpieces private JLabel selectedpiecestext Skulle användas under spelfasen, vid gruppattack. Används inte. 2.11.2 Funktioner public Status(Controller controller) Konstruktor. Anropar piecerecruit. Länkar samman Controller objektet och Status objektet. public void piecerecruit() Skapar och ritar ut statusrutans innehåll under pjäsrekryteringsfasen. private Container pieceinfocontainer(piecetype type) Hjälpfunktion för piecerecruit. Skapar en inforuta över en pjästyp. public void pieceplace() Skapar och ritar ut statusrutans innehåll under pjäsplaceringsfasen. public void gamestatus() Skapar och ritar ut statusrutans innehåll under spelfasen. private JPanel turnpanel() private JPanel playerinfopanel() private JPanel pieceinfopanel() Hjälpfunktioner för gamestatus. public void updatefootmenlefttoplace(int footmen) public void updatehorsemenlefttoplace(int horsemen) public void updateknightslefttoplace(int knights) public void updateflagslefttoplace(int flags) Uppdaterar informationen om hur många pjäser av en viss typ som är kvar att placera ut. public void updatepiecetype(string type) public void updatemovement(int movement) public void updatestrength(int strength) public void updatewithpiece(piece piece) 21

Uppdaterar informationen om vilken pjästyp den valda pjäsen är, hur många steg den har kvar, och hur mycket styrka den har kvar. public void resetinfo() Anropas om ingen spelruta är markerad. Metoden tömmer informationen om markerad pjäs. public void updatefootmenleft(int blue, inte green) public void updatehorsemenleft(int blue, inte green) public void updateknightsleft(int blue, inte green) Uppdaterar informationen om hur många fotsoldater, lätta ryttare, eller tunga ryttare den blåa respektive gröna spelaren har kvar under spelfasen. public void setturn(boolean blueturn) Uppdaterar informationen om vilken spelares tur det är: true ger blås tur false ger gröns tur public void markknight() Metoden markerar tung ryttare genom att göra denna text blå och större. Metoden används för att indikera att spelaren valt tung ryttare under pjäsplaceringsfasen. public void markhorseman() Metoden markerar lätt ryttare genom att göra denna text blå och större. Metoden används för att indikera att spelaren valt lätt ryttare under pjäsplaceringsfasen. public void markfootman() Metoden markerar fotsoldat genom att göra denna text blå och större. Metoden används för att indikera att spelaren valt fotsoldat under pjäsplaceringsfasen. public void markflag() Metoden markerar fana genom att göra denna text blå och större. Metoden används för att indikera att spelaren valt fana under pjäsplaceringsfasen. public void mouseclicked(mouseevent e) Anropar choseheavyknight, choselightknight, chosefootsoldier, choseflag i Controller klassen beroende på vilken pjästyp spelaren klickat på. 2.12 Board, package Model Board klassen representerar en spelplan i spelmodellen. Den används för att hålla reda på var alla pjäser finns och viss status om rutorna, t.ex. om en ruta innehåller en pjäs som går att anfalla. 2.12.1 Konstanter static final int CLEAN Statusvärde för tom ruta, och för alla rutor utom block då spelet avslutats. static final int PLACE Statusvärde för ruta där det är möjligt att placera en pjäs. 22

static final int BLOCK Statusvärde för blockerade rutor. static final int REACH Statusvärde för rutor som är möjlig att nå för vald pjäs. static final int FRIEND Statusvärde för rutor med pjäser vars spelare är på samma sida som den som nu spelar. static final int S_ABLE Statusvärde för rutor med pjäser vars spelare är på samma sida som den som nu spelar, och som är möjliga att välja som nästa pjäs att flytta. static final int G_ABLE Statusvärde för rutor med pjäser vars spelare är på samma sida som den som nu spelar, och som är möjliga att inkludera i en gruppattack. static final int SELECT Statusvärde för rutan där den nu valda pjäsen står. static final int G_SELECT Statusvärde för rutor på vilka det står pjäser som är valda för att delta i en gruppattack. static final int ENEMY Statusvärde för rutor på vilka det står en fiende. static final int A_SELECT Statusvärde för rutor på vilka det står en fiende som är målet i en gruppattack. static final int ATTACK Statusvärde för rutor på vilka det står en fiende, som är inom räckhåll för den nu valda pjäsen och som är tillräckligt svaga för att bli tagna av pjäsen själv. static final int GROUP Statusvärde för rutor på vilka det står en fiende, som är inom räckhåll för den nu valda pjäsen, vilka är för starka för att pjäsen själv ska kunna ta dem men det finns tillräckligt med möjliga medhjälpare så att en gruppattack är möjlig. static final int STRONG Statusvärde för rutor på vilka det står en fiende, som är inom räckhåll för den nu valda pjäsen, vilka är för starka för att pjäsen själv ska kunna anfalla, och det ej finns tillräckligt med medhjälpare. 2.12.2 Instansvariabler private GameState gamestate Spelets statusinformation. 23

private StateData statedata Spelets statusdata. private Square[][] board Själva brädet, indexerat med x som första variabel och y som andra. (board[x][y]) 2.12.3 Funktioner public Piece getpieceat(coord c) Hämtar pjäsen på angiven ruta. Piece getpieceat(int x, int y) Hämtar pjäsen på angiven ruta. public int getstatusat(coord c) Hämtar statusvärdet på angiven ruta. public int getwidth() Returnerar bredden på detta bräde. public int getlength() Returnerar längden på detta bräde. public List getfriendsaround(player player, Coord c) Returnerar en lista med vänner till angiven spelare runt angiven ruta. public void resetboard() Rensar upp brädet efter att spelet har avslutats, sätter status till CLEAN på alla rutor som ej är blockade. Board(GameState gs, StateData sd, Coord dimension, List blocked) Initierar ett bräde med givna dimensioner och blockerade rutor. void setpieceat(coord c, Piece p) Sätter pjäs på koordinat. void setstatusat(coord c, int status) Sätter status på koordinat. boolean check(coord c) Returnerar true om angiven kordinat är inom spelbrädets dimensioner. void ensure(boolean b) Kontrollerar att parametern är sann. void ensure(coord c) Kontrollerar att given kordinat är inom spelbrädets dimensioner. 24

2.13 Cache, package Model Cache klassen innehåller data om vad en vald pjäs kan nå på spelplanen, alltså vilka rutor den kan nå och hur (attack, gruppattack eller vanlig förflyttning). Den kan dessutom ange vilken väg som använts för att nå en viss ruta. 2.13.1 Konstanter public final static int CIRCLE[][] En vektor som innehåller x-y par av en medsols runtgång av en ruta (med 8 möjliga håll att gå till). För i = 1 8 direct = (CIRCLE[i][0] (==X), CIRCLE[i][1] (==Y)) 2.13.2 Instansvariabler private Piece piece Detta är en kopia av pjäsen som denna cache gäller för. Cachens information gäller bara så länge pjäsen inte ändras (till exempel flyttas). private Board board Brädet som pjäsen hör till. private CacheSquare[][] Den cachade informationen. 2.13.3 Funktioner public boolean validfor(piece p) Anger om denna cache är giltig för angiven pjäs. public void setstatus() Sätter status på brädet för att ange vart pjäsen som denna cache är beräknad för kan gå och anfalla. Sparar dessutom undan värdena som ändras för att kunna ta bort ändringarna som görs. public void unsetstatus() Tar bort ändringarna på brädet som görs i och med setstatus. boolean haspath(coord coord) Anger om det finns en väg till given koordinat för pjäsen denna cache gäller för. private int getextraat(coord coord) Privat funktion som returnerar extra data som cachats för den angivna funktionen. public boolean iswalk(coord coord) Anger om vägen som tar pjäsen till angeiven koordinat räknas som en förflyttning (till skillnad mot anfall/gruppattack). public boolean isattack(coord coord) Anger om vägen som tar pjäsen till angeiven koordinat räknas som ett anfall. List getpathto(coord coord) 25

Om det ej är möjligt att nå koordinaten returneras null, annars returneras en lista med alla de koordinater som visiteras mellan rutan pjäsen står i och angiven koordinat (för gränsande rutor är list.size() == 0) Cache(Board board, Piece piece) Skapa ett nytt cache som gäller för angiven piece på angivet bräde private void setup() Privat hjälpfunktion som initierar variablerna som en cache kräver, alltså undersöker pjäsen och skapar en matris och markerar vilka rutor som är tillgängliga och vilka som används av fiender och så vidare. private void find() Privat hjälpfunktion som genomför bredden-först-sökning för att finna alla koordinater som kan nås, och markerar dem i cache matrisen. private int getgroupstrengthround(coord coord) Privat hjälpfunktion som returnerar gruppstyrkan runt en koordinat, används för att undersöka om en gruppattack är möjlig. 2.14 CacheSquare, package Model Intern klass till Cache som används för att lagra information. 2.14.1 Instansvariabler int extra Information om vad som på rutan som motsvarar denna på brädet. Coord how Koordinat som anger från var denna ruta nås, är null om det ej går att ta sig till denna ruta. 2.15 Coord, package Model Coord klassen används för att peka ut en ruta på spelplanen från modellens håll sett. Gränssnittet kan visa spelplanen från olika sidor, och är därför tvunget att använda Proxy klassen för att översätta från sina egna koordinater till Coord objekt. 2.15.1 Instansvariabler private int xcoord X koordinaten, räknat som den används i board. (board[x][y]) private int ycoord Y koordinaten. 2.15.2 Funktioner Coord(int x, int y) 26

Konstruktor. Kastar fel om någon av parametrarna är negativa Coord(int x, int y, boolean ignore) Konstruktor. Ignorerar fel. int getx() int gety() boolean equals(coord) boolean equals(int, int) Coord translate(int x, int y) Snabb kopiering, eller flytt relativt denna koordinat. boolean isnear(coord coord) Returnerar true om denna koordinat är högst ett steg från den angivna. boolean isinrect(coord coord) Returnerar true om denna koordinat är inom en rektangel vars övre vänstra hör är (0,0) och vars nedre högra hörn anges av coord. boolean isinrect(int x1, int y1, int x2, int y2) Returnerar true om denna koordinat är inom rektangeln (x1,y1)-(x2,y4). 2.16 Game, package Model Klassen Game utför själva kärnan hos spelmodellen. 2.16.1 Konstanter public static final int FAILURE Returneras då en funktion misslyckas. public static final int SUCCESS Anropet lyckades. public static final int IN_NEED Anropet lyckades troligvis men mer måste göras innan draget kan anses slutfört (alltså, med hjälpare till gruppattack krävs). 2.16.2 Instansvariabler private MapDefinition mapdefinition Kartan som användes för att skapa det här spelet. private GameState gamestate Objektet som håller ordning på i vilken fas spelet befinner sig i. 27

private StateData statedata Objektet som håller ordning på saker som har att göra med den nuvarande fasen att göra (så som vald pjäs osv). private Board board Själva brädet. 2.16.3 Funktioner public List getsquaresinneedofupdate(player) Returnerar en lista över de pjäser som behöver uppdateras, skall endast användas av den lokala spelaren. public GameState getstate() public List gettypes() public Board getboard() public MapDefinition getmap() public StateData getdata() public Player getlocalplayer() public Player getremoteplayer() public PieceType getfootmantype public PieceType gethorsemantype public PieceType getknighttype public PieceType getflagtype Bekvämlighetsfunktioner. Returnerar PieceType objekt för pjästyp. public int getcreditsleft(player player) Returnerar antalet resurser kvar för spelaren i planeringsfasen. public int setnumberoftype(player player, PieceType type, int number) Anger hur många pjäser spelaren vill ha av given pjäs typ. public void setstandardpiecetypes(int footmen, int horsemen, int knights) Anger hur många av de olika typerna fotsoldater, lätta ryttare, och tunga ryttare spelaren vill ha. Om konfigurationsfilerna någonsin ändras måste denna funktion skrivas om. public int[][] getnumberofpiecesleft() Returnerar en dubbel vektor med antalet pjäser av de olika typerna både nord och syd spelaren har kvar (nord spelare först). public int donesettingup(player player) Anger att spelare är klar med planeringsfasen och är redo att börja placera ut sina pjäser. public int getleftof(player player, PieceType type) Returnerar antalet pjäser en spelare har kvar att placera ut av angiven typ. public int getleftofall(player player) Returnerar antalet pjäser en spelare har kvar att placera ut. 28

public int setpieceat(player player, PieceType piece, Coord coord) Försöker sätta en pjäs av angiven typ på given koordinat. public int unsetpieceat(player player, Coord coord) Tar tillbaka en utplacerad pjäs. public int donesettingpieces(player player) Anger att en spelare är nöjd med sin placering av pjäser och att den samme är villig att börja spela. public List getlocalsetup() Returnerar de pjäser som den lokale spelaren placerade ut på brädet under sin utplaceringsfas. public List getpiecesleft(player) Returnerar en lista med de pjäser som en spelare har kvar att flytta. public int selectpiece(player player, Piece piece) Försöker välja given pjäs. public Piece getselectedpiece() Returnerar den valda pjäsen. public int moveto(player player, Coord coord) Försöker flytta den valda pjäsen till en given ruta, utför anfall om möjligt. Om gruppattack är möjlig går spelet in i en gruppattacksfas som låter spelaren välja de medhjälpare han vill ha med. public int addtogroup(player player, Piece piece) Försöker addera given pjäs till den grupp av pjäser som hjälper till med en gruppattack. Om antalet pjäser är tillräckligt utförs attacken och SUCCESS returneras, om pjäsen läggs till men fler behövs returneras IN_NEED, annars returneras FAILURE. public int removefromgroup(player player, Piece piece) Tar bort en pjäs från anfallsgrupp. public int cancelattack(player player) Avbryter en påbörjad gruppattack. public int donemovingpiece(player player) Avslutar förflyttningen av vald pjäs, och eventuella attacker. public int donemovingpieces(player player) Avslutar turen för angiven spelare. public int doneplaying(player player) Ger upp. 29

Game(MapDefinition map, List piecetypes, int server_resources, int client_resources) Skapar ett server spel, som lottar ut både vem som är nord och syd och vem som får börja spela. Game() Skapar ett klientspel som inte initieras förrän kontakt med servern har utförts void initialsetup(list spelare, List typer, List resurser, MapDefinition) Utför initieringen av det här spelet, skapar brädet, initierar resurserna. private List locallydeterminegameorder() Skapar spelordningen lokalt (för servern) genom att slumpa ut vem som är nord och syd och vem som börjar spela. private int move(coord destination) Utför själva flytten till given koordinat. private int attack(coord target) Utför attack. private int group(coord coord) Utför lägg till i grupp. private int groupattack() Utför gruppattacken 2.17 GameState, package Model Klass som håller ordning på i vilken fas spelet befinner sig i. 2.17.1 Konstanter public final static int INVALID Spelet har ej blivit initierat, spelare, resurser med mera är okänt. public final static int INITIAL Spelet är redo att påbörjas genom att påbörja planeringen av typerna för den lokale spelaren public final static int END Spelet har avslutats, den spelare som förlorare sparas som aktiv spelare. public final static int LOCAL_PICK Det är den lokale spelarens tur att köpa pjäser. public final static int LOCAL_PLACE Det är den lokale spelarens tur att placera ut sina pjäser. public final static int REMOTE_PICK Fjärrspelares PICK (se ovan). 30

public final static int REMOTE_PLACE Fjärrspelares PLACE (se ovan). public final static int LOCAL_CHOOSE Det är den lokale spelarens tur att välja en pjäs att flytta. public final static int LOCAL_SELECT Det är den lokale spelarens tur att flytta pjäsen. public final static int LOCAL_ATTACK Det är den lokale spelarens tur att välja vilka medhjälpare han vill ha med i sin gruppattack. public final static int REMOTE_CHOOSE Fjärrspelares CHOOSE (se ovan). public final static int REMOTE_SELECT Fjärrspelares SELECT (se ovan). public final static int REMOTE_ATTACK Fjärrspelares ATTACK (se ovan). public final static String [] STATES Beskrivning av de olika faserna som spelet kan befinna sig i. 2.17.2 Instansvariabler private int state Vilken fas spelet befinner sig i. private Player player Den spelare vars tur det är. 2.17.3 Funktioner public boolean islocalturn() public boolean isremoteturn() public boolean isnoturn() Returnerar sant om spelet befinner sig i en sådan fas som inte kan sägas ha en aktiv spelare (INVALID, INITIAL och END) public int getstate() public String describestate() public boolean isplayersturn(player player) GameState() Initierar ett ett spels fas till INVALID Player getcurrentplayer() 31

void enterinitial() Anger att tillräckligt med data har givits för att spelet skall kunna anses initierat void enterpicking(player player) Anger att spelet skall påbörja en planeringsfas för given spelare void enterplacing() Anger att spelet skall påbörja en utplaceringsfas för spelaren vars tur det just nu är void enterplay(player player) Anger att spelet skall påbörja spelfasen, med given spleare som första spelare void enterselect() Anger att en pjäs blivit selekterad void leaveselect() Anger att en pjäs blivit avselekterad void enterattack() Anger att en pjäs har valts ut som mål void leaveattack() Anger att en attack är avbruten eller avklarad void leaveplay(player player) Anger att den nuvarande spelarens tur är slut, och påbörjar given spelares tur void enterend(player player) Anger att spelet är slut och att given spelare har förlorat boolean check(int s) boolean check(int s1, int s2) boolean check(int s1, int s2, int s3) boolean check(int s1, int s2, int s3, int s4) Kontrollerar att fasen är lika med någon av de givna värdena boolean check(player player) Kontrollerar att det given spelare är den vars tur det är boolean checknot(int s) Kontrollerar att fasen ej är den givna void ensure(boolean b) Försäkrar sig om att b gäller genom att kasta ett fel annars void ensure(int s) void ensure(int s1, int s2) void ensure(int s1, int s2, int s3) void ensure(int s1, int s2, int s3, int s4) void ensure(player player) 32

void ensurenot(int s) Som motsvarande check funktioner, fast försäkrar sig genom att kasta fel om något ej stämmer 2.18 Logic, package Model Initierar spel och tillhandahåller information om tillgängliga kartor. 2.18.1 Konstanter public static final String MAP_DEFS Den förvalda sökvägen till kartkonfigurationsfilen. public static final String TYPE_DEFS Den förvalda sökvägen till pjäskonfigurationsfilen. 2.18.2 Instansvariabler private Map maps De inlästa kartorna. private List types De inlästa pjästyperna. private String mapdef, typdef Sökvägarna till kart och typ konfigurationsfilerna. private Network network Kopia av det senast skapade nätverks objektet. 2.18.3 Funktioner public Logic(String map_defs, String type_defs) Skapar en ny Logic med givna sökvägar till kartor och typers konfigurationsfiler public Logic() Skapar en Logic med förvald konfiguration public void redomapcheck() Laddar om kartor. public void redorulecheck() Laddar om pjästyper. public MapDefinition getmap(string name) public List getmaps() public List gettypes() public Network getnetwork() public Game servergame(int port, String map, int server_resources, int client_resources) 33

Skapar ett spel som server. Blockar tills en klient har anslutit public Game clientgame(string host, int port) Skapar ett spel genom att ansluta till given host på given port och vänta på svar void mapfind() Laddar kartorna. void typefind() Laddar pjästyperna. private static PieceType typeload(url where) Gör laddningen från given url. private static MapDefinition mapload(url where) Gör laddningen från given url. private static boolean load(url where, Map def) Hjälpfunktion som laddar in data på form key = value till en Map. private static List list(url where) Returnerar en lista av det som finns på given plats. private static List decode(string value) Avkodar konfigurationsinformation till rätt typer. 2.19 MapDefinition, package Model Denna klass innehåller all data som har att göra med en karta. 2.19.1 Instansvariabler private String name, desc, show Namnet, beskrivningen och en extra show sträng för denna karta (show används inte). private Coord dim, startn1, startn2, starts1, starts2 Dimensionen för kartan och rektanglar som beskriver var nord respektive syd spelaren kan börja. Rektanglarna används inte. private Set north, south Mängder med koordinater som är giltiga för nord respektive syd spelaren att placera ut sina pjäser på. private List unpass Lista med koordinater som är blockerade på denna karta. 2.19.2 Funktioner public String getname() 34

public String getdescription() public Coord getmaxsize() public int getxmax() public int getymax() public Set getnorthstarting() public Set getsouthstarting() public List getunpassable() public String getshow() Returnerar relevant variabel. public MapDefinition(String name, String description, String show, Coord size, List south_start, List north_start, List blocked) Konstruktor. 2.20 Move, package Model Klass som används för att spara drag till dess att nätverket kan skicka iväg dem. 2.20.1 Instansvariabler private Coord from, to Anger från vad och till vart denna förflynning handlar om. private List help Om denna förflynning tar hjälp av en gruppattack sparas medhjälparna här. private Move last Om ett drag består av flera delförflyttningar sparas dessa som en länkad lista. last är den föregående förflyttningen i lisatn. Efter att nätverket har översatt draget pekar last i stället på nästa förflyttning i listan. 2.20.2 Funktioner public Move(Coord from, Coord to) Skapar en enkel förflyttning eller en attackförflyttning. public Move(Coord from, Coord to, List helpers) Skapar en gruppattacksförflyttning public Move(Coord from, Coord to, List helpers, Move prev) Skapar en förflyttning som föregicks av en annan förflyttning. public Coord getfrom() public Coord getto() public Coord getlast() public List gethelp() public void setlast(move last) 35

2.21 Piece, package Model Piece klassen representerar spelpjäser som används i spelet. 2.21.1 Instansvariabler private PieceType type Anger vilken sorts pjästyp som spelpjäsen är. private int strength Spelpjäsens nuvarande styrka. En pjäs som anfaller en annan får sin styrka sänkt med lika mycket som styrkan hos den han övervinner. Om en pjäs avslutar sitt drag med en styrka under maxstyrka nollställs dess styrka för att hindra den från att delta i gruppattacker. Alla spelpjäser får sin styrka återställd till den max som anges av deras PieceType efter att deras spelare avslutat sin runda. private int movement Spelpjäsens nuvarande förflyttning. En pjäs får sin förflyttning sänkt med ett för varje steg den tar. Om en pjäs avslutar sitt drag med förflyttning under sin maxförflyttning nollställs dess förflyttning. (Om pjäsen har full förflyttning när den "avslutar" sitt drag kan den inte ha gjort något drag, och dess förflyttning bibehålls så att den kan flyttas senare under rundan.) Alla spelpjäser får sin förflyttning återställd till den max som anges av deras PieceType efter att deras spelare avslutat sin runda. private Player player Spelpjäsens ägare. private Coord square Spelpjäsens position på spelplanen. Måste hållas syncad med den information om spelpjäsens position som finns i dess Board. private int selected En spelpjäs kan ha markeringsstatus vald att utföra ett drag vald att delta i gruppattack ej markerad 2.21.2 Funktioner Piece(PieceType type, Player player) Konstruktor. public PieceType gettype() public int getstrength() public int getmovement() public Player getplayer() public Coord getsquare() Ger den relevanta variablens värde. public boolean isselected() Avgör om pjäsen är vald för att utföra ett drag. 36

public boolean isgroupselected() Avgör om pjäsen är vald för att hjälpa till i en gruppattack. public boolean isselected() Avgör om pjäsen är vald som mål i en gruppattack. public boolean isselectedforgroupattack() Avgör om pjäsen är vald för att utgöra medhjälpare i en gruppattack. void setstrength(int strength) Ändrar pjäsens styrka. void decreasestrength(int decreaseby) Minskar pjäsens styrka. Gör detta genom att anropa setstrength. void setmovement(int movement) Ändrar pjäsens förflyttning. void decreasemovement(int decreaseby) Minskar pjäsens förflyttning. Gör detta genom att anropa setmovement. void resetpiece() Återställer pjäsens förflyttning och styrka till max, angett av PieceType. void setsquare(coord square) Ändrar pjäsens läge. void movepiece(coord destination, int distance) Exakt samma sak som att anropa decreasemovement(distance) och sedan setsquare(destination). void select() void selectforgroupattack() void selectastarget() void deselect() Piece copy() Returnerar en kopia av denna pjäs. 2.22 PieceType, package Model Objekt av PieceType klassen utgör de klasser av spelpjäser som kan finnas i spelet, och vilka egenskaper dessa har. 2.22.1 Instansvariabler private String name Vad spelpjäsen kallas för spelarens del, t.ex "Fotsoldat" 37