Systembeskrivning. Dokumentationen finns tillgänglig på Internet:

Relevanta dokument
Användarmanual. Dokumentationen finns tillgänglig på Internet:

Projektpresentation. Kungliga Tekniska Högskolan 2D1954 Programutvecklingsprojekt Vårterminen 2002

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

Länkade strukturer. (del 2)

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Robotprogrammering felsökning & analys.

Kungliga Tekniska Högskolan (KTH) Programutvecklingsprojekt (2D1954) Systembeskrivning för projektgrupp Gestmenyer

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer

Projektpresentation Sakfrågan

Tentamen i Grundläggande Programvaruutveckling, TDA548

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

HexaFlip. Kravspecifikation

Sannolikheten att vinna ett spel med upprepade myntkast

1 Kravspecifikation Snake App

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Datastrukturer och Algoritmer D0041D

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Svenska Ishockeyförbundet OVR Face-Off

Vi är alla i gruppen väldigt intresserade av spel och vill lära oss mer om hur man skapar ett helt spel från idé till slutprodukt.

Ett spel skapat av Albin Wahlstrand

Tentamen TEN1 HI

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Fördjupad Java. Undantagshantering. Fel

Användarmanual Wapspel

Palmbaserad datainsamling och databassynkronisering. Projektpresentation. 2D1954 Programutvecklingsprojekt Projektgruppen Harald

Uppdaterad mars 2014 Webbanmälan till högskolestudier ht 2014

Tentamen, EDA501 Programmering M L TM W K V

Skapa Bufblogg

IT policy för elever vid

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

[SLUTRAPPORT: DRAWPIXLZ (ANDROID-APP)] Slutrapport. Författare: Zlatko Ladan. Program: Utvecklare av Digitala Tjänster 180P

Spelet i sig är inte avancerat men projektet ställer en del krav på implementationen bland annat:

Övning 1 - Abstrakta datatyper

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

3UHOLPLQlU6SHFLILNDWLRQ I U *36VW\UGVW\UG0HGLD6SHODUH

JavaRats. Kravspecifikation. Version 1.1. Gustav Skoglund Marcus Widblom Senast ändrad: 13 / 05 / 08

LÄRARHANDLEDNING SWEET CITY. Ett spännande spel i svenska som andraspråk. Har du frågor om Sweet City? Mejla oss på

Space Invaders - Slutrapport

Rekryteringsprocess. Rekryteringssteg. 1. CV-screening 2. IQ Test 3. Intervju med Säljcoach, Extern konsult samt VD 4. Referenser.

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

Kapitel 6. Kapitel 6. Hakparenteser fšr att ange index float[] priser = new float[500]; frekvens[4] boolean[] flaggor;

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

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

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Detaljbeskrivning av Player

TDDC74: Projekttitel

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Classes och Interfaces, Objects och References, Initialization

Projektpresentation Wapspel

TDIU01 - Programmering i C++, grundkurs

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Arrayer. results

Välkommen till edwise - Elev

Föreläsning 3.1: Datastrukturer, en översikt

Vi har pratat om alla bubblorna, och labbat i de flesta... utom en.

Utbildningsmanual. Rehabstöd

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Lösningsförslag till exempeltenta 2

Preliminär specifikation av projekt

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

2D 4D. Flaskracet. strävorna

Uppdragsbeskrivning. Paddel-appen Utmärkta kanotleder. Version 1.0 Mats Persson. Distributionslista. Namn Åtgärd Info.

Instruktioner för dig som ska söka till Mattekollo 2018 åk 9-gy 1

Feriearbete i Bodens kommun

Konton skapas normalt av användaren själv, men kan i undantagsfall behöva läggas upp av annan person, exempelvis en junioradmin.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Genom att följa dessa steg lär du dig snabbt att spela onlinematcher... och som du kan se är det mycket enkelt, roligt och spännande!

Systemskiss. Självetablerande sensornätverk med 3G och GPS. Version 0.2. Christian Östman Datum: 15 maj 2008

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

MinMax Algoritmen Implementation och optimering. Joakim Östlund 15 juni 2004

URVAL AV UTFÖRDA HOBBYPROJEKT

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

XML-dokumentation. För Projektledare & utvecklare hos IT-leverantörer till Svenska Intensivvårdsregistret

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Time Care Pool Vikarie

Programmering. Scratch - grundövningar

Skapande av en modifikation till Crysis

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Utveckling av simulator för ärendehanteringssystem

Föreläsning 3. Stack

Tummen upp! Matte ÅK 6

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS

Uppgifter 6: Kombinatorik och sannolikhetsteori

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

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Föreläsning 8: Exempel och problemlösning

Fyra i rad Javaprojekt inom TDDC32

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Läslandet 2 Ord och meningar

Projektpresentation Gängbildning

Tentamen , Introduktion till Java, dtaa98, dtea53

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Transkript:

Kungliga Tekniska Högskolan Vårterminen 2002 Systembeskrivning Projekt Alpha Panic Uppdragsgivare: IABA, Institutet för Tillämpad Beteendeanalys Alex Olwal Oskar Rönnberg Dokumentationen finns tillgänglig på Internet: http://www.nada.kth.se/projects/proj02/alpha Projektmedlemmar: Sara Erhlund, projektledare Albin Finne Martin Greber Per Karefelt Mark Peldius Susan Ström Peter Söderlund

Innehållsförteckning INNEHÅLLSFÖRTECKNING...2 FIGURFÖRTECKNING...2 INTRODUKTION...3 INTRODUKTION...3 BAKGRUND...3 DOKUMENTATION...3 AVGRÄNSNINGAR...3 MODULER...4 ANVÄNDARPROFIL...4 Statistik...4 ORDMODULEN...5 SPELMOTORN...5 3DMOTORN...8 3DMODEL...9 PARTIKELSYSTEM...9 PANELMODULEN...0 BANAN...0 SYSTEMSKISS... SYSTEMSKISS... DATAFLÖDESDIAGRAM...2 REFERENSER...3 Figurförteckning FIGUR : ANVÄNDARPROFIL OCH STATISTIK...4 FIGUR 2: SPELMOTORN...5 FIGUR 3: BONUSAR OCH SPEEDBOOSTS...6 FIGUR 4: SPELETS HUVUDLOOP...7 FIGUR 5: 3DMOTORN...8 FIGUR 6: 3DMODELLEN...9 FIGUR 7: STATUSPANELEN...0 FIGUR 8: BANAN...0 FIGUR 9: SYSTEMSKISS... FIGUR 0: SYSTEMSKISS...2 2

Introduktion Bakgrund Alpha Panic är ett 3D racingspel. Först genom tunneln vinner. För att vara framgångsrik i spelet måste man ta upp speed boosts (för att öka färdhastigheten) och bonusar (för att försvåra spelet för opponenterna) genom att skriva korrekt och snabbt. Uppdraget var att skapa ett kul spel som tränar upp tangentbordsfärdigheter. Dokumentation Systemdokumentationen beskriver hur systemet bakom Alpha Panic är uppbyggt rent tekniskt. Efter en genomgång av samtliga moduler i systemet ges en beskrivning av hur modulerna förhåller sig till varandra. För mer information om spelet Alpha Panic hänvisas läsaren till projektpresentationen [] och spelmanualen [2]. Avgränsningar Systemdokumentationen håller sig på modulnivå av två anledningar: systemet är modellerat efter moduler (och kan därför förstås och förklaras bäst på den nivån), och det består av ett stort antal klasser som den intresserade bäst kan förstå genom att titta direkt på koden i sitt sammanhang, med hjälp av kommentarerna i koden. 3

Moduler Målet med systemmodelleringen var att uppnå en så generell och modulär lösning som möjligt. Då tid var den begränsande faktorn redan från början av projektet, var det av största vikt att prototypen skulle bestå av utbytbara delar som kunde vidareutvecklas var och en för sig, utan att kräva att de övriga delarna skulle påverkas. Resultatet av systemmoduleringen blev ett system som uppnått målet, och som projektgruppen och uppdragsgivarna var nöjda med. Genom att utveckla systemet i moduler underlättades framtagandet av en prototyp, som därmed demonstrerar samtliga moduler i varierande grad. Användarprofil Varje användare har en egen användarprofil (ett användarkonto) och loggar in via ett användarnamn och lösenord. Här lagras alla resultat och statistik från tidigare spelomgångar. Detta konto kan sedan lagras i en databas, eller lokalt hos användaren. Under inloggningsproceduren kan användaren ange vilka bokstäver han/hon vill träna på. Detta utför ett keyset som skickas till textmodulen för att välja vilka ord från en textfil som ska läsas in. Player -Name : String -Pos : float Profile -stats : Stats -Name : String Game -time Stats -KeyMatrix : int[][] -keys : KeySet -fingers : FingerSet +isempty() +getstatperfinger() : Boolean: int[] +getnext() +getstatperchar() : char : int[] +addkey(in +report() c : char) : void FIGUR : ANVÄNDARPROFIL OCH STATISTIK Statistik Grunden till statistikframtagning är en matris[i][j], där varje element i matrisen är en räknare som ökar med ett varje gång tangent j trycktes ner då spelet förväntade sig tangent i. Varje spelare har varsin matris under spelets gång. Efter spelet är avslutat, tas all tangentbordsträningsrelaterade statistik fram och sparas ned i ett antal mer kompakta datastrukturer. Underliggande struktur finns för att ta fram statistik per tangent, per finger, per hand, per spelomgång (jämfört med de andra spelarna), samt över de senaste omgångarna. 4

Genom detaljerad statistik kan användarna följa sin egen utveckling och få en bättre förståelse för det de behöver jobba på. Prototypen implementerar endast statistik per finger och statistik per tangent, till exempel, lyckade nerslag för tangent a är 75%. Ordmodulen Spelet läser in orden från en textfil. Denna modul läser olika sorters ord från en textfil, med någon kombination av följande egenskaper: ord som består av visa bokstavskombinationer (för att träna på särskilda bokstäver, eller särskilda fingrar), ord med en viss längd (för att variera svårighetsgraden) ord av varierande längd, och som innehåller alla bokstäver ord som innehåller svåra bokstavskombinationer. ord som användaren har misslyckats med förut. ord kring olika tema, eller ord från andra språk Prototypen implementerar en text fil med svenska ord av varierande längd, dock högst 8 bokstäver långt, med ord bestående endast av utvalda bokstäver. Spelmotorn KBD Input -KeyQueue : char +isempty() : Boolean +getnext() : char +addkey(in c : char) : void Track Player -Name : String -Pos : float Game -time -Current Word Triggers -pos : float -type : Boolean = =Speed, 0 = Bonus WordBank -keys : KeySet -words : Vector +getnextword() : String +loadwords() : string(idl) Expected Word -word : String -currentpos : int +update(in letter : char) : Boolean +isdone() : Boolean FIGUR 2: SPELMOTORN Denna modul är spelets hjärna och implementerar spelreglerna. Den håller reda på all information kring spelet: samtliga spelarna, deras position, vilken bokstav som 5

förväntas skrivas, vilken hastighet spelarna har, och vilka bonusar de har tagit. 3Dmotorn hämtar informationen från Game. Triggers är fasta positioner i banan. När en spelare åker förbi en trigger får han/hon ett ord att skriva. När ordet har skrivits färdigt skapas en bonus eller en speedboost, beroende på vad som bestämdes då spelet initierades. Om spelaren inte hinner skriva färdigt ordet innan nästa trigger passeras får spelaren ett nytt ord och det är den aktuella triggern som gäller. Dyn Object Speed Boost Item Track Bonus -time Game Triggers -pos : float -type : Boolean = =Speed, 0 = Bonus Weapon Shield Missile Mine MultiBomb FIGUR 3: BONUSAR OCH SPEEDBOOSTS För detaljer kring vad de olika items är, och hur man använder dem, se ref [2]. 6

Huvudloopen i spelmotorn (i klassen Game) kan beskrivas som följande: Nej Åk framåt Passerat trigger? = lagra even i statistik JA Skriv nytt ord på informationspanel. Förväntade bokstav = :a bokstav i nya ordetl Char in = förväntade bokstav? JA & nästa bokstav = null (sista bokstav i ordet) JA & nästa bokstav!= null Förväntade bokstav = nästa bokstav Skapa event Event = (speed boost eller bonusar, beroende på vad triggern var) Nej Inform event Sendinfo Other Clients Beräkna konsekvenser Konsekvenser = (ny position på spelare, har passerat en mina?) Uppdater spelstatus och statistik redraw FIGUR 4: SPELETS HUVUDLOOP Huvudloopen i klassen Game känner av om spelaren har passerat en trigger. Om inte, får spelaren åka fram med den hastighet/acceleration som är aktuell. Om spelaren har passerat en trigger får spelaren ett nytt ord och får börja skriva en bokstav i taget. Beroende på om spelaren skriver ordet korrekt, och om han/hon har avslutat ordet, händer olika saker enligt figuren. När man har skrivet klart ordet skapas ett event, som kan vara en speedboost eller en bonus. Information skickas till samtliga spelare över nätverk (de två rutor med kursiv text, till höger). Konsekvenser av eventen räknas ut och uppdaterar en lista innehållande samtliga spelare, deras position, hastighet och bonusar/speedboost. Statistik matrisen uppdateras och bilden ritas ut. 7

3DMotorn Denna modul frågar Game efter aktuell information om spelarnas positioner. Med denna information kan den rita ut banan och uppdatera panelens karta över banan och spelarnas positioner. Track -curve : Curve -totallaps : int -currentlap : int -environmentmatrix : int[][] -environmentmap : Map<int, 3DModel> Game -time : float -playerlist : Player -actionseqlist : Action Sequence 3DEngine -texturelist : Texture -3DModelList : 3DModel FIGUR 5: 3DMOTORN Action Sequence -visualeffect -state -soundeffect +updatestate(in time : float) : void Panel -arealist : Area För att rita ut nästa bild behöver 3D motorn sina 3D modeller (hur alla dynamiska delar ser ut i 3D), samt statuspanelen, som visar upp information i 2D. 8

3DModel 3DObject läsas in från 3D Studio Max-filer. 3DModel -statelist : State +update(in frame : int) : void 3DObject +verticeslist : Vertex -facelist : Face -filename : String ParticleSystem -particlelist : Particle -numparticles : int +init() : void Particle -pos : Vector3 -velocity : Vector3 -accel. : Vector3 -gravity : Vector3 -age : float +init() : void +respawn() : void Snow Smoke Rain Explosion Sparks FIre FIGUR 6: 3DMODELLEN Partikelsystem De 3D effekter som beror av många små rörliga delar (s.k. partiklar) som t.ex. explosioner och rök, styrs av partikelsystemet, d.v.s. utritning, positionering av partiklar etc. Varje partikelsystem har hand om ett visst antal partiklar som rör sig enligt olika mönster beroende på typen av partikelsystem. 9

Panelmodulen Statuspanelen visar upp information till spelaren om hans/hennes position relativt de andra spelarna (deras placering), var på banan de befinner sig (med en minikarta av banan), vilken hastighet spelaren har, samt vilken bonus spelaren har. WordArea Panel -arealist : Area RankArea Area -x : float -x2 : float -y : float -y2 : float DynImageArea -texturelist : Texture StatImageArea minimap SpeedArea FIGUR 7: STATUSPANELEN Banan Banan består av splinekurvor. Punkternas positioner läses från path.dat. Curve -segmentlist : Segment +posat(in t : float) : Vector3 Track -curve : Curve -totallaps : int -currentlap : int -environmentmatrix : int[][] -environmentmap : Map<int, 3DModel> FIGUR 8: BANAN 0

Systemskiss 3Dmodulen, bestående av Panelmodulen, 3Dmodulen (inkl. Partikelsystem), och banan, har följande struktur. Curve -segmentlist : Segment +posat(in t : float) : Vector3 Segment +posat(in t : float) : Vector3 Track -curve : Curve -totallaps : int -currentlap : int -environmentmatrix : int[][] -environmentmap : Map<int, 3DModel> 3DModel -statelist : State +update(in frame : int) : void 3DObject +verticeslist : Vertex -facelist : Face -filename : String -time : float -playerlist : Player -actionseqlist : Action Sequence Game 3DEngine -texturelist : Texture -3DModelList : 3DModel ParticleSystem -particlelist : Particle -numparticles : int +init() : void Particle -pos : Vector3 -velocity : Vector3 -accel. : Vector3 -gravity : Vector3 -age : float +init() : void +respawn() : void Action Sequence -visualeffect -state -soundeffect +updatestate(in time : float) : void Snow Smoke Rain Explosion Sparks FIre Panel -arealist : Area WordArea RankArea Area -x : float -x2 : float -y : float -y2 : float DynImageArea -texturelist : Texture StatImageArea minimap SpeedArea FIGUR 9: SYSTEMSKISS

Användarprofilen, spelmotorn, bonusar och ordmodulen har följande struktur: Player -Name : String -Pos : float Item Profile -stats : Stats -Name : String KBD Input -KeyQueue : char +isempty() : Boolean +getnext() : char +addkey(in c : char) : void Dyn Object Track Speed Boost Bonus Stats -KeyMatrix : int[][] -keys : KeySet -fingers : FingerSet +getstatperfinger() : int[] +getstatperchar() : int[] +report() -time Game -Current Word Triggers -pos : float -type : Boolean = =Speed, 0 = Bonus Weapon Shield FIGUR 0: SYSTEMSKISS WordBank -keys : KeySet -words : Vector +getnextword() : String +loadwords() : string(idl) Expected Word -word : String -currentpos : int +update(in letter : char) : Boolean +isdone() : Boolean Missile Mine MultiBomb Dataflödesdiagram Modulerna kommunicerar med varandra på följande sätt. AnvändarProfilen... Stat Stat n 3DModell Ord modulen GAME SpelMotorn/ 3DMotor 2D Statuspanel Items Bonusar Speedboosts Figur : Dataflödesdiagram 2

Referenser [] Sara Erhlund, Albin Finne, Martin Greber, Per Karefelt, Mark Peldius, Susan Ström, och Peter Söderlund. Projektpresentation. NADA, Kungliga Tekniska Högskolan, Stockholm, maj 2002. [2] Sara Erhlund, Albin Finne, Martin Greber, Per Karefelt, Mark Peldius, Susan Ström, och Peter Söderlund. Spelmanual. NADA, Kungliga Tekniska Högskolan, Stockholm, maj 2002. 3