HexaFlip
Kravspecifikation
Dokumentversion 1.0
Martin Larsson marla316@student.liu.se Carl Lindwall carli914@student.liu.se
Senast modifierad 2009‐02‐17
Sammanfattning
Detta dokument skall ligga som grund i form av kravspecifikationen för spelet HexaFlip som utvecklas av två studenter vid Linköpings Tekniska Högskola. Dokumentet skall hjälpa med att få en överblick över vilka delar som ingår i projektet och hur dessa skall utformas.
Syftet med detta projekt är primärt att skapa ett spel där man kan utmana andra spelare för att sedan med hjälp av åtta utvalda hexagonala brickor slåss om att dominera ett bräde. Sekundärt är syftet med projektet att lära tidigare nämnda studenter om JAVA‐programmering samt att ligga som underlag för examinering. Projektet är ett projekt i kursen TDDC32 Design och Implementation av programmodul i JAVA och skrivs på ingalunda vis för att tjäna ett kommersiellt syfte; projektet görs enbart för att utveckla studenternas förmåga inom projekt‐ och objektorienterad programmering.
Denna rapport består av en inledning, dokumentstandarder, systembeskrivning,
användargränssnittet, systemfunktioner, ickefunktionella krav, lagring av permanent data samt avgränsningar. Dessutom finns ett användarscenario givet på slutet.
Innehållsförteckning
Inledning...4
Dokumentstandarder...4
Systembeskrivning ...4
Användargränssnitt ...4
Systemfunktioner...5
Obligatoriskt...5
Nätverkskommunikation...5
Spelalgoritmer...5
ASCII‐grafik ...6
Brickor, spelare och spelbräde ...6
Valbart...6
Grafik med biblioteken jaxax.swing.* och java.awt.*...6
Databaskommunikation ...6
Ickefunktionella krav ...6
Lagring av permanent data ...6
Avgränsningar ...7
Användarscenario ...7
Inledning
Man har på senare år kunnat ana en trend där mer och mer datoranvändare efterfrågar roliga, dock simpla spel med hexagoner. Denna våg av hexagonrelaterade behov har inte ens kunnat tillgodoses av Amerikas försvarsdepartement som istället byggde en pentagon. Ett hörn mer eller mindre kan förefalla synnerligen irrelevant säger kanske kritikerna och så även tidigare amerikanska
försvarsministrar – men skall sanning sägas – och det skall den – kan ett hörn spela en avgörande skillnad. Tänk er en segelbåt, vars segel består av två hörn istället för tre. Detta segel skulle då inte ha någon area och vara oförmögen att med vindens hjälp framdriva fartyget.
Som tidigare nämnts består spelets grundidé i att två kombattanter sitter framför varsin dataskärm, anslutna till varandra via nätverk. Spelet tar sin början i att de framför sig ser ett spelbräde med 5x5 stycken tomma hexagoner, och har 13 respektive 12 brickor, också sexkantiga, var på sin hand. På varje bricka finns 6 värden, alla inom spektrat [1,10], tillhörande vart och ett av hexagonens sidor.
Spelarna turas om att lägga ut sina brickor på tomma områden på spelplan. I det fall en lagd bricka hamnar sida‐i‐sida med en av motståndarens brickor, jämförs den nyligen lagda brickans värde på relevant sida med motståndarens bricka. Har den nyligen lagda brickan här ett värde högre än motståndarens, tillfaller brickan spelaren vars tur det är. När alla 25 brickor lagts ut, vinner spelaren som har mest ägda brickor på spelfältet. Som pris får vinnaren välja en valfri av motspelarens brickor, som tillfäller hanns eller hennes samling.
Dokumentstandarder
Text skrivet med typsnittet Courier New (italic) i detta dokument avser kod.
Med brickor avser vi de hexagonala spelbrickor som spelaren samlar på sig och använder vid spel mot andra spelare.
Systembeskrivning
Systemet baseras på en javaapplikation vilken fungerar som såväl klient som server. Denna applikation innehåller all spellogik, grafik samt regler för nätverksöverföring. Vid exekvering av applikationen kontaktas en mysql‐server som innehåller all data om användare och dess brickor samt highscore.
Under spelets gång efterfrågas vederbörlig data av klienterna och databasen uppdateras med de förändringar som skett i brickinnehav samt poäng efter att en spelomgång tagit slut.
Användargränssnitt
Användargränssnittet ‐ det som användarna de facto ser på skärmen, kommer genereras medelst biblioteket javax.swing och alla dess underbibliotek. Vid start av klienten möts användaren av en login‐ruta, där han bes mata in sitt användarnamn och lösenord, vilket verifieras mot en central
• Nytt spel
‐> Host (klienten öppnar porten och lyssnar efter inkommande part) ‐> Join
‐> Mata in IP (klienten ansluter till öppen port hos hosten)
• Mina brickor (Kopplar upp sig mot central databas och låter användare se sina brickor)
• HexaStore™ (Låter spelaren inhandla nya spelarbrickor med poäng tillskansade från vunna tidigare spelomgångar som betalningsmedel)
• Highscore (Kopplar upp sig mot central databas och visar vilka spelare som vunnit flest omgångar av spelet)
• Om spelet (Visar versionsnummer, disclaimers och författare)
• Avsluta (Avslutar klienten)
När spelet börjar, möts spelaren av den tomma spelplanen till vänster, och ser dessutom en lista på tillgängliga brickor till vänster. Klickar man på en specifik bricka, ser man grafiskt denna brickas disposition.
På varje tomt fält på spelplanen visas ett nummer [1,25], och spelarna matar i tur medelst
knappsatsen på tangentbordet in på vilken plats de vill lägga sina brickor. När en bricka lagts visas detta på spelplanen medelst att området ändrar färg och varje värde associerat till respektive hörn skrivs ut. Lyckas en spelare vinna över en av motståndarens lagda brickor syns detta genom att denna bricka ändrar färg till den övervinnande spelarens färg. Inputtar spelaren ett värde för en position som antingen är ogiltig eller redan tagen meddelar klienten detta genom en textsträng.
När spelomgången är över får båda spelarna information om vem som vann, och båda spelarna har möjlighet att spela en nu omgång. Väljer minst en av spelarna att inte göra så, skickas man tillbaka till huvudmenyn.
Systemfunktioner
Avser de olika delarna av koden och vilket syfte de tjänar. De obligatoriska delarna skall finnas med vid projektets slut, de valbara delarna implementeras i mån av tid.
Obligatoriskt
Nätverkskommunikation
Klienten skall kunna kommunicera med andra klienter under en match mellan två spelare. En spelare skall vara den som hostar och den andra spelaren skall ansluta till den första med hjälp av dess IP‐
nummer och port. Information utbytes sedan växelvis till det att en spelare vunnit och då skall nätverket även kommunicera vilken bricka som den vinnande spelaren väljer att få av den förlorande spelaren.
Spelalgoritmer
Spelalgoritmerna innefattar allt som har med själva spelmekaniken att göra. Denna innefattar regler för hur man vinner över en annan spelares bricka, att man inte kan lägga en bricka där en annan
bricka redan är lagd, att man inte kan spela ett spel med mindre än 13 brickor, vad som händer om man får mindre än 13 brickor och hur man betalar med poäng för nya brickor.
ASCIIgrafik
Spelet kommer preliminärt att ritas med ASCII‐grafik för att snabbt kunna framställa ett körbart program. Tanken är dock att spelet skall ritas med biblioteken javax.swing.* och java.awt.*
för att säkerställa användarvänligheten.
De komponenter som skall ritas ut är: inloggningsrutan; huvudmenyn; spelbrädet med tillhörande interface; highscorelistan; visning av spelarens brickor; information om spelet; samt HexaStore™
(brickbutiken).
Brickor, spelare och spelbräde
Klasserna och funktionerna för att söka efter, lägga till och ta bort brickor, spelare och spelbräden i listor och variabler måste ingå för att spelet skall kunna köras. Listorna måste därför också definieras.
Valbart
Grafik med biblioteken jaxax.swing.* och java.awt.*
Om tid finns kommer ett grafiskt interface att skapas för att höja graden av användbarhet. Detta grafiska bibiliotek skall ersätta den ASCII‐grafik som först används för att rita de olika delarna av spelet.
Databaskommunikation
I mån av tid kommer även en databas med användare och vilka brickor de äger att skapas samt kommunikationen med denna att kodas. Databasen kommer att innehålla tre tabeller: användare;
brickor; och highscore. I tabellen användare kommer fälten SpelarID, Namn, Lösenord, Poäng och Spenderade Poäng att finnas. I tabellen brickor kommer fälten SpelarID, BrickID och Antal att finnas. I tabellen highscore kommer de tio spelarna med mest poäng att sparas för snabb access i fälten SpelarID, Namn och Poäng.
Ickefunktionella krav
Spelet skall i god JAVA‐anda fungera i både UNIX‐ och Windowsmiljöer och skall vid korrekt
användande inte resultera i krashar. Spelet skall kunna kommunicera med MySQL‐servern från vilken terminal som hellst under förutsättningen att MySQL‐servern är online och att tid fanns att
implementera denna funktion i spelet.
Lagring av permanent data
Permanent data kommer att lagras på två olika ställen. De olika typer av brickor som spelaren kan samla på sig kommer att finnas lagrade i själva programkoden i form av en array av objekt. Spelarna med all tillhörande information samt alla brickor som ägs av spelare kommer att lagras i en MySQL‐
databas. Häri kommer även topp tio på spelarna med flest poäng att sparas. Detta gäller bara om tid fanns att implementera databasen som en del av spelet.
slag. Projektet avser heller ej att låta användaren bygga vidare på eller modifiera spelet. Spelet kommer inte att ha någon central server utan all kommunikation sker direkt mellan klienterna. Spelet kommer att sakna vissa skydd för användarfel vilket kan resultera i att inkorrekt användning av spelet gör att det krashar.
Användarscenario
Kalle och Pelle (fiktiva personer) har bestämt sig för att spela ett spel HexaFlip. Kalle som har spelat förut loggar in och hostar ett spel. Pelle loggar sedan in och skriver in Kalles IP‐address i det fält som presenteras då han klickar på Join Game. Nu får båda spelarna välja vilka brickor de vill använda och därefter börjar spelet. Efter ett tag vinner såklart Kalle och han väljer en av Pelles brickor som trofé.
Pelle som nu har mindre än de 13 brickor han initialt fick får en ny bricka slumpad till sitt förfogande och sedan återgår båda spelares klienter till huvudmenyn.
Kalle har nu så många poäng att han kan köpa en ny bricka varvid han går in i HexaStore™ och handlar en av de brickor som presenteras för honom. Pelle kollar samtidigt in vilken bricka han fick slumpad till sig efter förlusten och sedan highscoren och ser att Kalle nu har placerat sig på femte plats. ”Gud, vilket fantastisk roligt spel!” tänker Kalle. ”Jag ska spela massor och komma in på highscoren jag med minsann!”.