Kravspecifikation Fyra i rad Javaprojekt inom TDDC32 Version 2.0 Datum 2008-05-19 Dokumentnummer 20080215 Sammanfattning Detta är en kravspecifikation över det klassiska spelet Fyra-i-rad programmerat i Java. Spelet kommer att ha ett grafiskt gränssnitt mot användaren. I spelet ingår tre moduler: grafiskt gränssnitt, regelverk och AI. Gruppen som utför projektet består av tre programmerare som ansvarar för varsin modul. Kravspecifikationen går detaljerat igenom de olika modulerna och tar även upp hur projektet skall genomföras och dokumenteras.
Innehållsförteckning 1 Introduktion... 3 2 Dokumentkonventioner... 3 3 Systembeskrivning... 3 4 Systemfunktioner... 4 4.1 Grafiskt gränssnitt... 4 4.2 Regelverket... 4 4.3 AI... 4 4.4 Användargränssnitt... 5 5 Ej funktionsrelaterade kravspecifikationer... 6 6 Permanent datalagring... 6 7 Begränsningar... 6 2
1 Introduktion Fyra i rad är ett klassiskt spel som de flesta någon gång stött på. Spelet är strategiskt och går relativt fort att spela eftersom spelytan är begränsad. Detta medför att en spelomgång är över när ytan blir full eller när någon spelare får fyra i rad. Fyra i rad är enkelt att spela men kan samtidigt vara knivigt att vinna beroende på hur avancerad motståndare man har. Det är till och med så att det för den spelare som börjar finns en optimal strategi så att denne alltid kan vinna. Tanken är dock inte att den datorstyrda motspelaren ska vara så duktig. Vidare ska möjligheten finnas att kunna spela mot en annan spelare vid samma dator. Tanken är att det ska vara enkelt att spela och förstå samtidigt som det ska vara snyggt och trivsamt. Spelet ska byggas upp på så vis att det inte blir alltför krångligt för oss som programmerar vilket även innebär att koden ska vara lättförståelig för andra som kan JAVAspråk. 2 Dokumentkonventioner Dokumenthanteringen i projektet kommer att skötas på följande sätt: Varje textdokument i projektet ges ett namn och ett dokumentnummer som är datumet för den dag dokumentet först skapas (ÅÅÅÅMMDD) samt ett versionsnummer som ursprungligen är 0.0 och sedan ökar på höger sida om punkten med ett steg i taget enligt 0.1, 0.2... 0.11, 0.12 etc. Varje gång ett dokument skickas in till ledningen för kursen TDDC32 nollställs höger sida om punkten och den vänstra sidan ökar med ett t.ex. 1.0, 2.0 etc. Efter granskning kommer versionsnumret sedan fortsätta att öka på höger sida enligt tidigare. Detta görs direkt när filen öppnas för att på så sätt behålla gamla versioner av dokumenten vid eventuella filproblem. När arbetet med textdokumentet är klart kommer det att laddas upp på gruppens grupportal på http://groups.google.com/group/javaroligt för att komma hela gruppen till del. De klassdiagram som kommer att göras i detta projekt kommer att följa UML-standarden. All kommunikation i projektet kommer att vara på svenska. Ytterligare dokumentkonventioner kommer att tilläggas till detta dokument om och när behov uppstår 3 Systembeskrivning Systemet kan utföra spelet fyra-i-rad och man skall dels kunna spela två spelare mot varandra på samma dator och det ska även finnas en datormotståndare där man kan ställa in olika svårighetsgrader. Dessutom skall två datormotståndare med olika eller samma svårighetsgrad kunna spela mot varandra. Fyra-i-rad spelas på en spelplan med 7 lodräta rader där marker kan släppas ner och staplas upp till sex nivåer högt. Spelplanen har alltså 42 platser för marker och varje spelare har 21 marker vardera i varsin färg. Spelarna turas om att börja och lägger sedan en marker åt gången i valfri lodrätt rad till att antingen hela spelplanen fylls upp eller att en av spelarna har lyckats få minst 4 marker i rad, 3
antingen vågrätt, lodrätt eller diagonalt. Det ska även vara möjligt att starta om spelet utan att någon av spelarna vunnit eller att spelplanen blivit full. 4 Systemfunktioner Systemet kommer att delas upp i tre moduler: 1. Grafiskt gränssnitt som sköter själva presentationen av spelet för användare. Se användargränssnitt nedan. 2. Regelverk som styr spelplanen och kontrollerar att endast tillåtna drag utförs samt när spelet är slut och då vem som vunnit eller om det blivit oavgjort. 3. AI som gör det möjligt att spela mot en datormotståndare. Mellan det grafiska gränssnittet och regelverket kommer det att ske kommunikation genom att användaren använder det grafiska gränssnittet för att styra spelet. Regelverket talar sedan om för användaren vad som händer genom det grafiska gränssnittet. Spelet skall gå att använda med endast dessa två moduler om man bara vill spela mot en annan person. Vid spel mot en datormotståndare ingår den tredje modulen, AI, som kommunicerar med regelverket för att tala om hur datorn vill göra sina drag. 4.1 Grafiskt gränssnitt Till att börja med behövs det funktioner för att rita upp den statiska grafiken, startläget för spelet. Sedan behövs funktioner för att ta emot användarens musklick på knapparna samt funktioner för att följa musmarkörens rörelser över spelbrädet för att styra brickorna. Dessutom behövs funktioner som uppdaterar brädet genom att rensa och placeras ut nya brickor samt ändra utseende vid vinst. Vid de fåtal tillfällen man får fem i rad kommer dock endast fyra marker att markeras. 4.2 Regelverket Till att börja med behövs funktioner som hanterar spelbrädet, någon form av matris som håller reda på brickornas läge, samt hanterar brickorna, vilken bricka som tillhör vilken spelare. Sedan behövs funktioner som lyssnar på spelarens input och kontrollerar om det är ett tillåtet val spelaren har gjort. Därefter skall det finnas funktioner som skapar ett nytt spel utifrån de val spelaren har gjort. Till slut måste det finnas funktioner för att kontrollera om någon spelare har vunnit, om brädet är fullt och det blivit oavgjort eller om spelet kan fortsätta. 4.3 AI AI:n delas in i tre delar som tar hand om varsin svårighetsgrad. Den lättaste svårighetsgraden kommer endast att slumpmässigt lägga ut brickorna. För detta behövs en funktion som talar om för regelverket vilken kolumn som väljs. Dessutom behöver AI:n kunna ta emot information från regelverket om kolumnen är full och göra ett nytt val. De två andra svårighetsgraderna behöver dessutom ha funktioner som på något sätt värderar olika möjliga drag och samtidigt tar hänsyn till hur motståndaren spelar. Det behövs alltså även en funktion som tar emot information från regelverket om hur motståndaren spelar. 4
4.4 Användargränssnitt Bilden nedan visar hur gränssnittet kommer att se ut. Spelaren börjar med att ange motståndare Dator Lätt, Dator Medel, Dator Svår eller Människa, därefter trycker man på knappen Starta nytt spel. Initialt börjar Spelare 1 som är förinställt på människa och Spelare 2 är förinställt som Dator Lätt (se demonstration av inställningar i figur 2). Vill användaren spela med annorlunda inställningar måste detta väljas genom att trycka på Spel, välja Spelare 1 och Spelare 2 och sedan trycka på knappen Starta nytt spel innan spel med nya inställningar kan genomföras. En dialogruta kommer då upp som frågar om man vill avsluta pågående spel för att börja ett nytt; denna dyker även upp användaren trycker på Starta nytt spel (figur 2) under ett pågående spel. Figur 1. Starta nytt spel Figur 2. Inställning av spelare I menyn Hjälp kan man trycka på Spelregler som tar fram en kort text om de allmänna reglerna eller Om som ger kort information om spelet. Dessa kan man trycka på när som helst, de påverkar inte ett pågående spel. I figur 3 nedan illustreras hur Hjälp ska se ut och som exempel visas informationsrutan för Spelregler. Figur 3. Hjälpmenyn och information om spelregler Detta spel styrs helt och hållet med musen förutom två kortkommandon som finns för Starta nytt spel och Avsluta, dessa visas i figur 1. Alla knappar styrs med musklick och när spelet är igång styrs brickorna med musen. Innan en bricka har släppts ner kommer den att dyka upp ovanför spelbrädet över en kolumn. Brickan följer musmarkören i x-led ovanför brädet oavsett var i kolumnen användaren har musmarkören. När användaren klickar med musen ramlar bricka ner i aktuell kolumn förutsatt att den inte är full med brickor redan, skulle det vara fallet kommer ett felmeddelande upp. 5
Efter att brickan släppts ner byter brickan som är över brädet färg för att illustrera motståndarens tur vilket upprepas fram till vinst eller oavgjort spel. Vid vinst eller oavgjort spel ser det ut enligt figur 4 nedan. Figur 4. Utseende vid vinst respektive oavgjort spel 5 Ej funktionsrelaterade kravspecifikationer Den datorstyrda spelaren bör ej ta för god tid på sig. 6 Permanent datalagring Detta är inte aktuellt för detta projekt eftersom spelresultat inte ska lagras. 7 Begränsningar Spelets AI kommer att ha tre svårighetsgrader där den svåraste inte kommer vara den optimala lösningsgången i fyra i rad. Vi kommer alltså inte lägga fokus på att hitta den matematiskt optimala spelstilen för AI. GUI:t kommer ej innehålla animationer för när markerna ramlar ned. Det kommer inte att finnas någon funktion som lagrar highscore från olika spelomgångar med olika spelare eftersom att det inte delas ut någon poäng i spelet. 6