Projekt: Drabbning Projekthemsida: www.nada.kth.se/projects/prom03/drabbning Kurskod: 2D1362 Kursnamn: Programutvecklingsprojekt med mjukvarukonstruktion Uppdragsgivare: Pelle Mårtenson (pelle@kreativatankar.nu) FÖRSTUDIE 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 Problembeskrivning...2 1.1 Bakgrund...2 1.2 Syfte...2 1.3 Spelidé...2 1.4 Krav och avgränsningar...3 1.4.1 Funktioner...3 1.4.1.1 Inköp av armé...3 1.4.1.2 Uppställning av armé...3 1.4.1.3 Förflyttning av pjäser...3 1.4.1.4 Enskild attack...3 1.4.1.5 Gemensam attack...3 1.4.1.6 Jag är klar...3 1.4.1.7 Vinstkontroll...3 1.4.2 Datormiljö...4 1.4.3 Användare...4 2 Förslag till lösning...4 2.1 Systemskiss...4 2.1.1 Komponenter...4 2.1.2 Spelet (Model)...4 2.1.2.1 Game...4 2.1.2.2 Board...5 2.1.2.3 Piece...5 2.1.2.4 PieceType...5 2.1.3 Nätverket (Controller)...5 2.1.3.1 Network...5 2.1.4 GUI (Controller och View)...5 2.2 Preliminär användarhandledning...6 2.2.1 Spelstart...6 2.2.2 Rekrytering...7 2.2.3 Utplacering...8 2.2.4 Spel...8 3 Genomförande...9 3.1 Arbetsbeskrivning...9 3.2 Ansvarfördelning...10 3.3 Tidsplanering...10 4 Riskanalys...11 1
1 Problembeskrivning 1.1 Bakgrund I kursen 2D1362, Programutvecklingsprojekt med mjukvarukonstruktion, har vi blivit tilldelade detta projekt efter önskemål. Projektet, som har namnet Drabbning, går ut på att konstruera ett datorbaserat strategiskt brädspel. Spelet kan enligt uppdragsgivaren och uppfinnaren Pelle Mårtensson beskrivas som en blandning av Schack och Stratego. Spelet kan spelas av två till fyra personer, men är inte än lanserat. Vår uppgift är att göra en prototyp av spelet som kan användas för testning av regelsystemet. Prototypen ska kunna spelas över Internet och av två personer. 1.2 Syfte Syftet med projektet är att utveckla en prototyp för att göra det enklare för uppdragsgivaren att göra volymtester samt finna luckor i spelets konstruktion och regler. I och med detta hoppas uppdragsgivaren på att komma vidare med spelets utveckling och i framtiden kanske kunna lansera det på spelmarknaden. Därför är det viktigt att vår produkt kan vidareutvecklas. Produktutvecklingen ska även ske inom ramen av låga kostnader och enkelhet bl.a. vid installation. 1.3 Spelidé Spelet kan i stora drag delas in i fyra faser: Inköp av armé. Deltagaren ska här köpa in olika pjäser (fotsoldat, lätt ryttare, tung ryttare) vilket ska ske dolt för motståndaren. De olika pjäserna har olika egenskaper (kraft och snabbhet) och kostar därefter olika mycket. Inköpen görs inom ramarna för en förbestämd budget. Spelarna tilldelas även en fana, som är en pjäs vars död innebär nederlag i spelet. Uppställning av armé Här ska deltagarna ställa ut sina pjäser och fanan på spelplanen. Detta får ske på vilket sätt som helst på deras respektive tillgängliga rutor. Dock får man endast ställa en pjäs per ruta. Även detta steg sker dolt för varandra. Spel Här blir pjäsuppställningarna kända och man lottar om vem som ska börja. När detta är gjort kan man börja spela, dvs. man kan flytta pjäserna och göra attacker enligt reglerna. När en spelare gjort alla sina önskade och möjliga drag går turen över till motståndaren. Vinner gör man om man slagit ut motståndarens fana eller om man slagit ut alla motståndarens pjäser så att denne bara har fanan kvar. Vinner gör man också om motståndaren kapitulerar. 2
1.4 Krav och avgränsningar 1.4.1 Funktioner 1.4.1.1 Inköp av armé När resurserna dvs. budgeterna är bestämda bör en kombinationstabell över resurserna visas. Det vill säga alla möjliga kombinationer av pjäser som man kan köpa för den bestämda resursen visas. Inköpet av pjäser sker genom att antalet av tungt respektive lätt rytteri väljs. Antalet fotsoldater beräknas sedan automatiskt. 1.4.1.2 Uppställning av armé De valda pjäserna ska nu placeras ut. Detta kan ske genom att spelaren får upp en tabell över vilka pjäser de ska placera ut. I tabellen väljs sedan vilken typ av pjäs man vill placeras ut. Utplacering sker genom att man klickar på en ruta på spelplanen. Här ska även finnas en funktion som kontrollerar att pjäserna placeras ut enligt reglerna. 1.4.1.3 Förflyttning av pjäser Vid förflyttning av pjäser måste man kontrollera att pjäsen flyttas enligt reglerna t.ex. får pjäsen inte hoppa över en annan pjäs, pjäsen får inte heller går på de svarta rutor eller flyttas utanför spelplanen. En pjäs får vidare inte flyttas flera steg än dess snabbhet. När man flyttar pjäser med en snabbhet större än ett så måste alla önskade steg genomföras på en gång, dvs. man kan inte spara steg för en pjäs till senare i samma omgång. Förflyttningen sker genom att dra pjäsen till den önskade rutan. 1.4.1.4 Enskild attack Vid en enskild attack slår en pjäs ut en annan genom att inta dess ruta. Vid en sådan attack måste man kontrollera att kraften på den anfallande pjäsen är lika eller större en den attackerades kraft. Efter attacken reduceras den anfallande pjäsens kraft med den attackerades och den attackerade tas bort från spelplanen. 1.4.1.5 Gemensam attack Vid en gemensam attack slår flera pjäser tillsammans ut en annan. När en svagare pjäs försöker slå ut en starkare kan denne ta hjälp av pjäser runt den attackerade pjäsens ruta och det är då den totala kraften som räknas. Den anfallande pjäsen tar över den attackerades ruta. 1.4.1.6 Jag är klar Här behövs en Jag är klar -knapp eller liknande som spelarna kan använda när de är klara med sina drag och turen ska gör över till den andra spelaren. När denne trycks in kontrolleras att minst en förflyttning gjorts under den gällande omgången och om så är fallet går turen över till motståndaren. 1.4.1.7 Vinstkontroll Efter varje attack kontrolleras om någon av spelarna förlorat sin fana, eller om man bara ha sin fana kvar. I så fall har spelaren förlorat. Spelet kan också ta slut om någon väljer att kapitulera. 3
1.4.2 Datormiljö Datormiljön måste stödja Java 2 Platform Standard Edition 1.4. Det måste dessutom finnas en aktiv internetuppkoppling. 1.4.3 Användare Vi ser till att börja med två typer av användare till Drabbning. Den ena är uppdragsgivaren, Pelle Mårtensson. Han vill använda vår prototyp för att kunna genomföra volymtester av spelet och dess regelsystem. Den andra typen av användare är de spelare som hjälper honom med dessa tester. De förväntas ha god datorvana t.ex. ska de kunna ta reda på sina aktuella ip-nummer. Lite längre fram i utvecklingen av spelet kan man däremot se flera typer av användare. Förhoppningen är att spelat kan tilltala alla målgrupper, såväl unga som äldre generationer och såväl kvinnor som män. 2 Förslag till lösning 2.1 Systemskiss 2.1.1 Komponenter Systemets komponenter kan delas in i tre grupper, Model, View och Controller, enligt designmönstret med samma namn. Modelkomponenter modellerar själva spelet i datorns minne, viewkomponenter fungerar som användarens fönster mot modellen, och controllerkomponenter tolkar användarens kommandon och utför dem på modellen. Se bild på sidan 6. 2.1.2 Spelet (Model) 2.1.2.1 Game Game upprätthåller reglerna, håller reda på vems tur det är och hur spelplanen ser ut (m.h.a. en Board). I uppställningsfasen måste alla pjäser ställas ut, och Game håller då reda på vilka man har kvar. Game hjälper också till att avgöra vilka pjäser man har råd med. I spelfasen är Game mästaren över reglerna, och kan berätta vilka drag en viss pjäs kan utföra, vilka pjäser som kan röra sig, vilken pjäs som för ögonblicket är den som rör sig. Game tar mot order från controller-klasserna och utför dessa drag (om de tillåts enligt reglerna). I slutfasen så har en spelare vunnit, och Game tillåter inga fler drag. Till slutfasen kommer man antingen om en spelare förlorar sin fana (vilket Game märker när det händer), ger upp (kapitulerar) eller bara har sin fana kvar. 4
2.1.2.2 Board Board håller reda på spelplanen. Vilka rutor man kan gå på (det finns ju "svarta" rutor man inte får stå på) och var pjäserna (våra Pieces) står. 2.1.2.3 Piece Piece är en spelpjäs som vet vilken spelare den tillhör. Piece vet också hur många steg och hur mycket kraft spelarpjäsen har kvar. En pjäs som deltar i en gruppattack får sin kraft och sina steg nollställda efter attacken. Spelpjäsen har också en PieceType för att hålla reda på vilken typ den är. 2.1.2.4 PieceType PieceType är spelpjäsernas typer. PieceType känner till deras kraft, steg, deras specialegenskaper (fanan är den enda som har några just nu, och det är "när jag dör är spelet förlorat") och deras naturliga namn "Fotsoldat", "Fana", etc. 2.1.3 Nätverket (Controller) 2.1.3.1 Network Network sköter kommunikation med motspelaren. Network ger hans drag till Game och sänder den lokale spelarens drag (att ge upp räknas också som ett drag) till motspelaren. Sänder data till chatten. Skickar uppställning mellan spelarna, då båda tagit sig igenom uppställningsfasen. 2.1.4 GUI (Controller och View) Visar modellen grafiskt, blir informerad när drag utförs, ger den lokala spelarens drag till spelet. Dess exakta klassuppbyggnad är ännu inte bestämd. 5
2.2 Preliminär användarhandledning I den här användarhandledningen kan inte reglerna skrivas, då vår beställare vill hemlighålla reglerna så länge som möjligt eftersom han vill skydda sin idé. Därför antas spelaren redan kunna reglerna och endast spelsättet beskrivs här. I vissa av följande avsnitt kommer ett antal utkast på gränssnittet för spelet. Dessa är preliminära och kommer antagligen förbättras. 2.2.1 Spelstart Spelet består av ett program som måste finnas på spelarnas datorer. En av spelarna måste agera server till vilken den andra spelaren måste ansluta sig till som klient. För att kunna göra detta måste klienten skriva in servens IP-nummer, dvs. spelaren som agerar server måste ha förmedlat detta till spelaren som agerar klienten, t ex via telefon. Lämpligen kom man då även överens om vilka resurser man ska ha och vilket spelbräde man ska använda, då även detta måste göras i förväg för att det är spelaren som agerar server som ställer in detta vid uppkopplingen. Slutligen slumpas det fram vem som ska börja. 6
2.2.2 Rekrytering Här väljer man antalet lätta och tunga ryttare man vill ha. Datorn räknar sedan automatiskt ut antalet fotsoldater. Om man vill se alla möjliga kombinationer av pjäser som man kan få för just sin budget, klickar man bara på Visa tabell. Vidare om man vill se de olika pjäsernas egenskaper så kan man titta i Statusrutan till höger som ger information om en pjäs snabbhet, kraft och kostnad. Klicka När man är klar med sitt pjäsval är det bara att trycka på Klar. 7
2.2.3 Utplacering En spelare kan placera ut sina pjäser på sina fem första raderna på spelplan, resten av spelplan gråmarkeras. Man välj vilken pjästyp man vill placera ut genom att klicka på pjäsen i statusrutan. Därefter klickar man i den rutan man vill placera pjäsen i. Statusrutan till höger ger information om hur många pjäser som man har kvar att placera ut. En pjäs som placerats ut kan tas bor genom att man högerklickar på den. Den kommer då att återgå till Statusfältet. När man är klar med utplaceringen är det bara att klicka på Klar. I Statusfältet kan man se om motspelaren är klar eller inte. Datorn slumpar slutligen fram vem som ska börja. 2.2.4 Spel För att förflytta en pjäs, klicka på den och sedan på den rutan man vill flytta den till. Spelet kommer då att räkna ut den kortaste sträckan för draget. Om en motståndarpjäs står i rutan man vill gå till måste man ha minst lika mycket kraft som denne för att kunna gå till rutan och därmed slå ut motståndarens pjäs. Om en svagare pjäs angriper en starkare pjäs krävs en gruppattack. Information om att en gruppattack krävs kommer då att visas i Statusrutan, vilken frågar efter vilka fler pjäser som ska delta i attacken. Dessa markeras genom att man klickar på dem. Statusrutan till höger ger information om totalt antal pjäser och hur många som inte är flyttade under en omgång. Vidare om man markerar en pjäs kan man få information 8
om just denne pjäsen i form av typ, steg och kraft. En markerad pjäs kan avmarkaras genom att man klickar någon annanstans på spelplanen. I Statusfältet kan även information såsom ogiltiga drag mm. tänkas visas. När man är klar med sina förflyttningar och attacker, är det bara att klicka på Klar. Spelarna kommer hela tiden att kunna se varandras drag i realtid. 3 Genomförande 3.1 Arbetsbeskrivning Vi har bestämt att vi ska dela upp projektet i olika faser. Dessa är: 1. Förstudie 2. Implementation av spelmodell 3. Implementation av gränssnitt 4. Sammanslagning av gränssnitt och spelmodell 5. Användarmanual 6. Implementation av nätverk 7. Implementation av regelsystem 8. Testning 9. Slutdokumentation 10. Eventuell implementation av extra funktioner 9
Vi kommer att arbeta med projektet enligt en iterativ vattenfallsmetod. För ytterligare information om arbetsmetoden se tidsplaneringen. Vi planerar att försöka genomföra formella arbetsmöten ungefär varannan vecka. Projektledaren ansvarar för det administrativa, tex sammankalla möten, sköta kontakter med uppdragsgivare och kursledare. Mellan mötena kommer arbetet att fortsätta enskilt eller i mindre grupper. 3.2 Ansvarfördelning Vi har gjort följande uppdelning av gruppen: Team GUI: Johan, Borna, Mattias Teamet ansvarar för utvecklingen av gränssnittet, dvs fas 3 och i viss mån fas 4 tillsammans med Team Logic Gruppansvarig: Borna Team Logic: Pontus, Jonas, Fredrik Teamet ansvarar för utvecklingen av spellogiken och nätverkskoden, dvs fas 2, 6, 7, 10 och tillsammans med Team GUI även fas 4. Gruppansvarig: Pontus Team Doc: Frida, Linnea Teamet ansvarar för de olika dokument som ska skrivas samt för projekthemsidan, dvs fas 1, 5, 9. Gruppansvarig: Frida Övergripande ansvar för hela projektet har Johan i kraft av sin roll som projektledare. 3.3 Tidsplanering Fas Uppskattad Period Grupp tidsåtgång (timmar) Förstudie 40 Nov-Dec Doc Spelmodell 120 Jan Logic Gränssnitt 240 Jan-Mars GUI Sammanslagning 50 Feb GUI, Logic Användarmanual 30 Mars Doc Nätverk 60 Feb Logic Regel 240 Jan-Mars Logic Testning 100 Mars Alla Slutdokumentation 100 Mars-April Doc Extra funktioner????????? Denna tidsplanering ger oss 300 timmar över som vi kommer använda där det behövs. Tidsplaneringen är någorlunda jämt fördelad mellan grupperna med avseende på antalet gruppmedlemmar. 10
4 Riskanalys Under arbetet med ett projekt som detta kan en mängd olika oförutsedda händelser inträffa. Dessa händelser kan ha en negativ effekt på den slutliga produkten. Ett sätt att försöka undvika sådana skeenden är att identifiera och belysa dessa i ett tidigt skede av projektarbetet. När detta är gjort kan man analysera vilka konsekvenser det får för det fortsatta arbetet, och hur man kan undvika dem. Här nedan följer en tabell där projektets olika risker tas upp. Deras konsekvenser samt förslag på åtgärderna för att hindra riskerna presenteras också. Riskerna är sorterade i fallande ordning efter deras sannolikhet att de inträffar. Risk Beskrivning Konsekvens Åtgärd Finesser i spelet utöver grund-läggande krav. Tilläggsuppgifter ej slutförda. Oenighet inom gruppen eller med uppdragsgivaren. Stor arbetsbörda. Fas 7 ej slutförd. Fas 1-6 ej slutförd. Dålig planering. Spridning av regler. För hög svårighetsgrad. Sjukdom Oenighet om projektets genomförande eller slutproduktens funktionalitet. Andra kurser inskränker på tiden till förfogande för projektet. Inbyggd regel-kontroll i spelet. Elementära spelfunktioner. Ostrukturerat arbete med projektet. Reglerna sprids till obehöriga utanför gruppen. För svårt för gruppen att genomföra projektet. Någon eller några blir sjuka Mindre attraktivt spel för spelaren. Mer svårlanserat. Bristande motivation. Sämre slutprodukt eller ej slutfört projekt. Endast fas 1-6 slutförs. Eller mindre än så. Spelarna måste kontrollera att reglerna efterföljs. Kommersiellt ej lanserbart. Ingen spelbar prototyp. Stressig arbetsmiljö i projektets slutfas. Risk att projektet ej slutförs. Spelidén stjäls av obehörig. Spelet känt innan lansering. Projektet slutförs ej. Stressig arbetsmlijö och problem med att få projektet slutfört. Arbeta kontinuerligt och sprid ut arbetsbördan över hela projekttiden. Öppna diskussioner. Kompromissvilja och flexibilitet. Kontinuerliga möten. Noggrann studieplanering. Tidig implementering av regelsystemet. Börja tidigt med arbetet på projektet. Kontinuerliga arbetsmöten och kommunikation mellan grupp-medlemmar. Diskret handhavande av utdelat material. Regler publiceras ej för obehöriga. Diskutera med kursansvarig. Be utomstående om hjälp. Ingen har ensamt ansvar för någon del. Alla vet dessutom vad som pågår i de olika grupperna. 11