Projektspecifikation



Relevanta dokument
Kravspecifikation TDP005 Projekt: Objektorienterat system

Tor Sterner-Johansson Thomas Johansson Daniel Henriksson

TDDC74 - Projektspecifikation

Kravspecifikation. TDP005 Projekt: objektorienterade system. Version 4.0 Datum Anna Ahlberg Johan Almberg

TDP005 Projekt: Objektorienterat system

Space Invaders - Slutrapport

Programmering. Scratch - grundövningar

TDP005 Projekt: Objektorienterat system

LUVIT LMS Quick Guide LUVIT Composer

Kom igång. Readyonet Lathund för enkelt admin. Logga in Skriv in adressen till din webbsida följt av /login. Exempel:

Detaljbeskrivning av Player

Projektrapport EDA095

Handbok Rymdduell. Andreas Zehender Eugene Trounev Översättare: Stefan Asserhäll

Kristina Grundström Erik Truedsson

KOM-IGÅNG-GUIDE. Kom igång och redigera din hemsida! SmelinkWeb4 editor 2

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI

Manual för Typo3 version 4.2

Fyra i rad Javaprojekt inom TDDC32

Manual för din hemsida

1 Kravspecifikation Snake App

Manual till DIKO

Skapa mapp. * Gör så här: Det finns många sätt att skapa mappar, men det enklaste sättet brukar vara följande.

Instruktioner. Innehåll: 1. Vad är Kimsoft Control (SIDA 2) 3. Hem (SIDA 2)

HexaFlip. Kravspecifikation

TES Mobil. Användarmanual. Användarmanual TES Mobil Dok.nr v8

ANVÄNDARBESKRIVNING FÖR PERSONAL

ALEPH ver. 16 Introduktion

E-post. A. Windows Mail. Öppna alternativ. Placera ikonen på skrivbordet.

Användarmanual för mycaddie version 2.0

TDDC74: Projekttitel

Ett spel skapat av Albin Wahlstrand

LÄSLANDET - BOKSTÄVER OCH ORD

Meteor 1.0. När man startat Meteor möts man av huvudmenyn:

Användarmanual Wapspel

Dokumentation. Joomla - Administrationsguide 1. Logga in i administrations-gränssnittet 2. Ändra globala inställningar 2.

Projektdokumentation för Othello

Svenska Ishockeyförbundet OVR Face-Off

1. Enkel sökning Globalsökning Avancerad sökning Historik Söka via klassificeringsstruktur 14

Paneler - VCPXX.2. Programmeringsmanual för VCP-paneler. Revision 2

Instruktion för applikation Var sitter känslan?

Instruktioner plattformen entreprenörsenhet

Lab5 för prgmedcl04 Grafik

Komma igång med 3L Pro Komma igång med 3L. Copyright VITEC FASTIGHETSSYSTEM AB

Manual. Anpassad för CMS Made Simple version 1.9.x (uppdaterad ) Birger Eriksson webblots.se

Snabbguide till First Class

Läslandet 2 Ord och meningar

Handbok Svarta lådan. Nicolas Roffet Robert Cimrman Philip Rodrigues Lauri Watts Översättare: Stefan Asserhäll

BuildingPortalSuite. Beskrivning BuildingPortalSuite - Beskrivning

FIRSTCLASS. Innehåll:

ANVÄNDARMANUAL CIRCUS

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

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

Wordpress och Sociala medier av Sanna Ohlander Guide till hur du skapar och förändrar inlägg och sidor på staffanstorp.se

Frågor & svar Smartbank

> Guide till Min webmail

Space Shooter. Projektrapport i kursen Avancerad C/C++ (DVA303) vid Mälardalens Högskola av Lars Lindqvist och Niklas Nolte

Joomla CMS Del 2 av 2

Roboten. Sida 1 av 11

Wordpress och Sociala medier av Sanna Ohlander Guide till hur du skapar och förändrar inlägg och sidor på staffanstorp.se

Mobile Arkanoids. Edlund, Louise Ekdahl, Johan Fernström, Jesper Jansson, Fredrik Larsson, Helene Malmén, Per Sölen, Baran Wiksten, Oskar

I.site Webbsidesverktyg handledning

Användarmanual Vklass lärplattform. Student

Introduktion till Matlab

Lathund till First Class

Lathund till PowerPoint 2002 (XP)

Installera din WordPress med 9 enkla steg

Manual Söka ledig tjänst Landstinget i Östergötland. Senast reviderad

Designspecifikation den 13 december 2007

Words and Sentences Träna engelska!

1

Inställningstips. Visuella anpassningar Windows

Moodle2 STUDENTMANUAL

Det finns några grundinställningar och förutsättningar som man bör tänka på innan man börjar använda pluginet och spela online.

ANVÄNDARGUIDE VITAL & TALANDE TANGENTBORD

Installationsguide läsplatta

Lathund Claro Read Plus

Leica mojo3d start första gången

TDDD78 projekt: Tower Defence

En guide till Hembygdsgilletsgillets intranät.

Hur skriver man ett textdokument med bild i OpenOffice?

LUVIT LMS Quick Guide LUVIT Composer

1 Den normala kartbilden

Uppdatera Mobilus Professional till version * Filen MpUpdate.exe får inte köras när du startar denna uppdatering.

Kursvärdering. Denna manual beskriver hur du kan skapa en mapp i Fronter som heter Kursvärdering där du ladda upp reslutat från kursutvärderingar.

Elsmart Användarmanual Nätanmälan för Installatörer

Word Grunderna 1. Om du kan det allra enklaste i Word, hoppa över uppgifterna A-E.

Guide till att använda Audacity för uttalsövningar

UngO teket. Banläggning i OCAD. ungoteket.se

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

Manual för MellanBasen. Mellan Basen

Vilken version av Dreamweaver använder du?

Förpackningens innehåll

Jaktpejl.se. Användarmanual. Av: Erik Åberg

ANVÄNDARMANUAL. Besök vår hemsida för mer information om våra produkter:

Välj bort om du vill. 96 Internet och e-post. 2. Mail-programmet finns i datorn. 1. Skriv mail i sökrutan. Windows Live Mail i Aktivitetsfältet.

Manual Betongindustris kundportal

3. Hämta och infoga bilder

Workshop PIM 2 - PowerPoint

Lathund steg för steg

Dollar Street Beta Version 1.0 Manual

Transkript:

TDDC74 Programmering, abstraktion och modellering Projektspecifikation 2010-05-31 Projektmedlemmar: Robert Cranston robcr829@student.liu.se Viktor Klasson vikkl729@student.liu.se Handledare: Emil Nielsen emini@ida.liu.se Projektets webbplats: http://schiero.googlecode.com

Innehållsförteckning 1. Inledning...1 1.1. Spelhistoria...1 1.1.1. Bakgrund...1 1.2. Utvecklingsmetodik...1 2. Användarmanual...1 2.1. Huvudmenyn...2 2.2. Spelet...3 2.2.1. Orientering i spelvärlden...4 2.3. Skapa nya banor...4 3. Kravlista...5 4. Implementation...5 4.1. Abstrakta datatyper...7 4.2. Beskrivning av implementationen...7 4.2.1. Funktionen update...7 4.2.2. controller-input...8 4.2.3. Inladdning av grafik...8 4.2.4. Ändra globala inställningar...8 5. Utvärdering och erfarenheter...8 5.1. Uppdelning...8 5.2. Hantering av filer...8 6. Tidsrapportering...9

1. Inledning Spelet är ett flerspelarspel, varje spelare är en mask som gräver omkring sig i jorden. Maskarna vill döda varandra, och den som överlever vinner. 1.1. Spelhistoria Spelaren ska kunna göra följande med sin mask: Gå åt höger och vänster Sikta upp och ned Hoppa Skjuta missiler och rep, repen ska kunna fästas i den omgivande jorden Masken ska börja i en stor jordhög och masken kan gräva sig runt i den. Masken har ett visst antal hitpoints som minskar då den blir träffad av andra maskars missiler. 1.1.1. Bakgrund Året är 2011 och Jorden håller på att gå under, för att rädda sig själva så har människorna förvandlat sig själva till maskar för att överleva den bittra atomvintern. Men rivalitet uppstår och vardagen blir istället en fråga om liv och död. Styr din mask och utrota dina medmänniskor (som också förvandlats till maskar) med hjälp av den mäktiga bazookan eller den kraftfulla big bomb så att du kan bli den som överlever! 1.2. Utvecklingsmetodik Förhoppningsvis så kommer Google Code att användas för att på ett smidigt sätt se till att all kod finns tillgänglig för båda medlemmarna. Kommunikationen mellan medlemmarna kommer att för akuta ärenden ske via mobiltelefon och för mindre akuta ärenden via mail. Båda medlemmarna går i samma klass och kommer därför att träffas på en daglig basis. Jobba på kvällar och helger är inget problem så länge det inte går ut över medlemmarnas sociala liv. Betyget som vi satsar på är antingen 3:a eller 5:a vilket presenteras i kravlistan. Detta eftersom en 4:a är värdelös ur vår betygssynpunkt. 2. Användarmanual Spelet startas genom att öppna och köra filen main.scm med PLT Scheme. Man kommer då direkt till huvudmenyn. Det mesta i spelet bör vara självförklarande för en erfaren gamer men här följer ändå en detaljerad användarmanual. 1

2.1. Huvudmenyn Figur 1 Huvudmeny i Schiero Genom att använda piltangent upp och ned så kan olika alternativ väljas i huvudmenyn, Figur 1, detta visas på så vis att markören > flyttas till det alternativ som är valt. Nedan följer instruktioner för hur de olika alternativen ändras. Start! När markören befinner sig bredvid Start! så trycker man på enter för att starta spelet. Map: När markören befinner sig bredvid Map: så kan man byta bana genom att trycka på höger- eller vänsterpil. Number of players: När markören befinner sig bredvid Number of players: så kan man välja antalet spelare. Edit player number: När markören befinner sig bredvid Edit player number: så kan man välja vilken spelares kontroller som man vill ändra. Genom att sedan bläddra i listan över de olika kontrollerna med piltangent upp och ned så kan man ändra en kontroll genom att trycka på enter och sedan den nya kontrollen som man vill använda. Help När markören befinner sig bredvid Help så kan man komma åt hjälpen i Schiero genom att trycka på enter. Quit När markören befinner sig bredvid Quit så kan spelet avslutas genom att trycka på enter, för att komma direkt till Quit så kan man även trycka på escape. 2

2.2. Spelet Efter att man tryckt på Start! så startas spelet och det kan då se ut som i Figur 2. Figur 2 Spelet med bana pinetree De olika komponenterna i spelet presenteras i Orientering i spelvärlden. För att styra masken så används de knappar som valdes på huvudmenyn. De olika knapparna är rätt så självförklarande, men här följer en översättning från engelska till svenska: Left Vänster Right Höger Up Sikta upp Down Sikta ned Shoot Skjut Jump Hoppa Change Byt vapen (håll inne och tryck på Left eller Right) Det finns även en kombination av kontroller för att skjuta iväg ett rep. Detta gör man genom att först trycka på Change och sedan på Shoot. För att släppa repet så trycker man på Jump. Repet och i vilken riktning som vapnet avlossas styrs med Up och Down, detta visas med en röd prick. För att gräva så håller spelaren intryckt knappen åt det hållet som den vill gå (Left eller Right) samtidigt som den klickar flera gången på knappen för att gå åt andra hållet (Right eller Left). För att pausa spelet så trycker man på escape, då kommer en ny meny upp där man kan välja om man vill fortsätta (Resume) eller gå tillbaks till huvudmenyn (Main Menu). 3

2.2.1. Orientering i spelvärlden Figur 3 Spelet I Figur 3 finns fyra komponenter numrerade som förklaras nedan: 1. Masken som spelare 1 styr, detta ser man genom att den ligger överst i listan över spelare (2). 2. Listan över spelare. Spelarna står här i ordning. I varje ruta så står det hur många liv spelaren har, vilken HP den har (grön linje) samt hur mycket ammunition i vapnet den har (ljusblå linje). Masken har oändligt med ammunition men måste ladda om när den blå går till längst till vänster. 3. En healthbox genom att gå in i denna så får spelaren mer liv. 4. En projektil som avlossats. 2.3. Skapa nya banor Att skapa en ny bana kräver viss datorvana, det krävs även att man har någon form av bildbehandlingsprogram. Varje bana ligger lagrad som tre olika bildfiler, en för hur banan ska se ut, en för hur kollisionerna ska fungera samt en för hur bakgrunden ska se ut. För att skapa en egen bana så är det enklast att först rita upp banan. Denna sparar man sedan som bannamn.png i mappen maps som ligger i schieromappen. Kollisionsbilden är svartvit, denna skapas enklast genom att fylla alla pixlar som man vill ska vara förstörbara med grått (en godtycklig nyans mellan vitt och svart räcker), alla som ska vara solid svart (till exempel stenar och marken) och alla som ska vara luft vitt. De vita pixlarna kommer att bytas ut mot bakgrunden. Denna bild sparar man som bannamn_collision.png i samma mapp som den vanliga banan sparades. För att lägga in en bakgrund så skapar man bara en bildfil i samma storlek som de övriga filerna. Bakgrunden ska sparas i samma mapp som de andra 4

3. Kravlista Kravlistan presenteras i Tabell 1, kolumnen Avklarat? har lagts till efter första inlämningen för att få en bättre uppfattning om vilka punkter som faktiskt avklarats. Kravlista # Beskrivning Betyg Avklarat? 1 Flytta spelaren med tangentbordet 3 Ja 2 Skjuta iväg saker 3 Ja 3 Sikta 5 Ja 4 Träffa motspelare och den förlorar HP 3 Ja 5 Skjuta iväg rep och åka iväg med det 5 Ja 6 Hoppa 3 Ja 7 Gräva i jorden 3 Ja 8 Skapa egna banor 5 Ja 9 Spela mot en annan spelare 3 Ja 10 Gravitation 3 Ja 11 Kollisionshantering 3 Ja 12 Spela över nätverk 6 Nej 13 Välja antal spelare 3 Ja 14 Byta vapen 5 Ja 15 Vapnen ser olika ut 5 Ja 16 Vapen som studsar omkring 5 Ja 17 Andra objekt tex livboxar 5 Ja 18 Tidsvariabel 3 Ja Tabell 1 Kravlista 4. Implementation En principiell bild av spelets uppbyggnad återfinns i Figur 4. Ur figuren kan det utläsas hur de olika filerna/klasserna kommunicerar med varandra samt på vilken abstraktionsnivå de ligger. Implementationen beskrivs mer ingående under rubriken Beskrivning av implementationen. 5

Figur 4 Beskrivning av spelets uppbyggnad 6

4.1. Abstrakta datatyper Spelet använder många olika abstrakta datatyper. De är indelade i 5 nivåer som kan ses i Figur 4: 1. Globala funktioner och definitioner. Innehåller spelets startfunktion. 2. Klasser för stora objekt som det bara finns en av. game-manager tar hand om menyn, world tar hand om spelets interna kodflöde och user-interface tar hand kommunikation med användaren (i form av knapptryckningar och ritning på skärmen). 3. Abstrakta basklasser för objekt. Från physics-object ärver objekt som ska vara en del av världen, den inkluderar fysikaliska egenskaper som position och hastighet. Från graphics-object ärver object som representeras grafiskt. Objekt som ska kunna kontrolleras av användaren implementerar controller. 4. Denna nivå innehåller player och weapon som är de objekt som har störst roll utåt i spelandet. De övriga klasserna (destruction, damage, sprite m.m.) är hjälpklasser. 5. Denna nivå innhåller endast konkreta objekt. Mer innehåll i spelet läggs till på den nivån. 4.2. Beskrivning av implementationen Figur 4 ger en bra överblick av implementationen i helhet, spelet startas med att main körs. En ny tråd skapas. Denna kör main som i sin tur kallar två av de tre viktigaste funktionerna för spelet, update och draw. Knapptryckningar etc körs i den ursprungliga tråden. Dessa vidarebefordras till controller-input som är den sista viktiga funktionen. Eftersom det finns så många funktioner och algoritmer i spelet så nöjer vi oss med att förklara en handfull. 4.2.1. Funktionen update Update är den funktion som uppdaterar alla objekts positioner. Den startas med att main skickar update till game-manager, game-manager kollar sedan om spelaren har tryckt på startknappen (eq? state start)om så är fallet så skickar den vidare update till world. I world så körs först kollisionsdetekteringen, hastighet och position uppdateras, och efter det så skickar world update vidare till physics-object för att behandla vad som hänt i kollisionen. Kollisionshantering är det mest krävande i hela spelet. Det den gör är att för varje objekt i listan över alla objekt kolla om objektet kommer att krocka med någonting (ett annat objekt eller banan). Om det kommer att krocka så beräknar den en ny hastighetsvektor för objektet genom att skapa en vektor från objektets mittpunkt till varje pixel som kollisionsdetekteringen detekterat att den kommer att krocka med. Dessa vektorer summeras (med funktioner ur vector.scm). Denna vektor är sedan den normal som den inkommande hastighetsvektorn speglas i. Om det är så att ett objekt har kolliderat med ett annat objekt så talar update om detta för objekten. På så vis så kan skott explodera, försvinna och minska maskarnas hitpoints. Det sista update gör är att uppdatera vektorn map-collision med vart alla objekt befinner sig samt ändra deras föregående position till tomrum. Det physics-object sedan gör med informationen om position och hastigheten är att skicka vidare den till varje objekt så att de sedan kan tala om för update i world vart de befinner sig samt vart de vill åka. 7

4.2.2. controller-input I user-interface kan controllers registreras. Dessa är objekt som innehåller funktionen controller-input. Denna kallas varje gång spelaren trycker på en knapp på tangentbordet. Detta gör det lätt att göra ett objekt kontrollerbart. 4.2.3. Inladdning av grafik Alla grafikresurser är sparade efter en mall: 1. Först kommer basnamnet (t.ex. player) 2. Sedan kommer en eller flera av följande taggar: Frame - _f<nummer> : denna fil är en del av en animation, numret talar om vilken bild i ordningen. Degree - _d<nummer> : denna fil kan vinklas i spelet. Numret talar om vinkel denna bild representerar. 3. Sist kommer filnamnstillägget. Vi har valt att använda.png som format eftersom Scheme bara stödjer alpha kanaler i.gif- och.png-filer. Av dessa hade fler bildbehandlingsprogram bra stöd för.png. När en fil laddas letar spelet i en databas efter grafik med samma basnamn. Om något hittas läggs den nyligen laddade bilden till, annars skapas ett nytt inlägg i databasen. Om filen hade en degree tag skapas också i samband med detta speglade versioner av den laddade bilden. 4.2.4. Ändra globala inställningar I menyn kan vissa globala inställningar ändras, andra är låsta för spelaren. Dock kan dessa lätt ändras i filen globals.scm, där alla konstanter finns. Till exempel kan antalet liv ändras till ett godtyckligt värde. Det är dessutom lätt att utöka menyn. 5. Utvärdering och erfarenheter Alla punkter på kravlistan (sånär som på punkt 12 Spela över nätverk) hanns med, dock implementerades en del av dessa först efter demonstrationen. Dessa funktioner var enkla att lägga till tack vare en bra grundstruktur. Därför är också ytterligare funktionalitet i spelet enkel att implementera. Detta gällde i allmänhet: det tog lång tid innan vi såg några resultat men när de väl kom, kom mycket på en gång. 5.1. Uppdelning Arbetet med projektet har flutit på bra. Den mesta kod har skrivits tillsammans där en projektmedlem suttit vid datorn och den andre suttit bredvid och hjälpt till. På slutet skedde en viss uppdelning av arbetet och Viktor tog mer hand om det grafiska och dokumentationen samtidigt som Robert avslutade arbetet med koden. 5.2. Hantering av filer För att på ett enkelt sätt se till att båda projektmedlemmarna alltid hade tillgång till aktuella filer så användes ett versionshanteringssystem kallat SVN. Ett versionshanteringssystem håller reda på historik och förändringar och gör det möjligt att backa tillbaka i tiden eller att spåra vem som gjort vad. Dessutom möjliggör det samarbete på samma projekt för utvecklare som är spridda över världen. http://sv.wikipedia.org/wiki/subversion_(versionshanteringssystem) 8

Servern som användes tillhandahölls gratis av Google med enda villkoret att alla kod publiceras som öppen källkod. Projektets adress blev http://schiero.googlecode.com och där finns hela projektet tillgängligt samt information om vilka filer som uppdaterats av vem och när (observera att flertalet filer har utformats tillsammans och därför går det inte att dra för många slutsatser av vem som har uppdaterat). 6. Tidsrapportering Tidsrapporteringen har skett som så att vid varje tillfälle så har timmarna fyllts i Tabell 2. Dock så är den bara tillförlitlig fram till vecka 19. Sedan så spårade det ur och timmarna flög iväg bortom kontroll. Dessutom så gjordes mer arbete enskilt (på grund av sjukdom) vilket gjorde det svårt att hålla koll på exakt antal effektiva timmar. Vecka 12 13 14 15 16 17 18 19 20 21 Summa Viktor 3 8 12 14 16 18 12 9 92 Robert 3 9 11 13 17 18 20 9 100 Tabell 2 Tidsrapportering 9