1 Slutrapport Interaktiv Mjukvaruutvecklingsprojekt HIF-Spelet Ett XNA-spel
2 Med den här rapporten avser jag att förmedla min bild av hur jag anser att mitt mjukvaruutvecklingsprojekt gick och hur jag gick tillväga för att nå det resultat jag nu kan presentera. Med facit i hand kan jag säga att XNA är ett alldeles utmärkt verktyg för spelutveckling, och inte bara konsolspel(läs Xbox 360) som många, helt felaktigt, har bilden av. Det går alldeles ypperligt att sätta sig in i för den oinvigde. Med en enkel och tydlig struktur är det lätt att förstå hur det är avsett att användas. I rapporten redovisar jag min inlärningsprocess för XNA-ramverket och för att skapa ett simpelt spel; i mitt fall ett s.k. catching-game där spelaren styr en karaktär som rör sig sidleds och fångar objekt som faller ovanifrån. En typ av spel som tilltalar såväl nostalgiker som casual-spelare. Att spelet är centrerat kring Helsingborgs IF är inget som förstör upplevelsen för den oinitierade då hela spelet är gjort med glimten i ögat.
3 Förord Inledningsvis fick vi kursdeltagare ett val att välja ett projekt fritt med de kunskaper vi införskaffat oss hittills som underlag. Med ASP.NET och databashantering-kurser precis avslutade kände jag att jag behövde prova på något nytt. Då jag inte längre direkt spelar spel kan mitt val av projekt tyckas vara ett tämligen ologiskt sådant, men samtidigt insåg jag att kodningens värld är förhållandevis mångfacetterad, och därför insåg jag att kan det vara intressant att lära sig, inte minst inför framtiden. Valet av spel var inte särskilt svårt, då jag växte upp med lite simplare spel, ofta av just den typen jag valde. När det sedan kom till val av språk blev det desto svårare. Jag ville inledningsvis göra något i HTML5, alternativt Javascript. Istället valde jag ett fegare val i XNA, då resten av gruppen valt detta språk. I och med att mina kunskaper var så begränsade ansåg jag då i stundens hetta att det skulle vara lättare att få hjälp vid behov vid valet av XNA. Slutligen gällde det valet av bakgrund till spelet. Detta var det lättaste beslut jag tagit under mitt år på skolan. Givetvis skulle det vara laget som ligger mig närmast om hjärtat, och trippelmästarna överlägsna i vårt avlånga land. Samtidigt insåg jag, så här i främmande stad, att spelet behöver göras med humor i fokus, så att det skall gå att spela utan att vara insatt i ämnet. I introduktionen som följer förklarar jag hur jag som helt ovetande satte mig in i XNA och vilka svårigheter jag stötte på.
4 Inledning Målet med projektet som helhet har hela tiden varit att sätta sig in i XNA-ramverket för att bygga en bra grund inför framtiden. Att man sedan använder sig av C# är givetvis också det en bonus då man förnyar sina gamla kunskaper. Att göra något helt nytt tilltalade mig väldigt mycket, och trots att spel inte riktigt är mitt forté så var det klart intressant att ta in. Inledningsvis fokuserade jag mycket på grafik då jag insåg att det blir lättare att jobba med direkt respons i form av bildligt innehåll. Det är så mycket lättare att testa med riktiga modeller istället för placeholders. När jag sedan kom igång med kodandet insåg jag att det var en viss tröskel att komma över, men XNA är ändå förhållandevis enkelt att komma in i. Det är uppbyggt av ett antal olika klasser som alla fyller olika funktioner. Som ett praktexempel finns det en klass som heter Draw, där all grafik du ska använda dig av ritas upp. Har du gjort det en gång är det lätt att göra om. För den som funderar på XNA som plattform för ett spel har jag bara positiva saker att dela, även om det kräver en hel del jobb. Tutorials finns i mångfald och att titta på dessa är ett råd jag har ett ge, då grunden till de flesta spel i mångt och mycket är densamma, inte minst i plattformsspel.
5 Positiva Erfarenheter Jag är mycket nöjd med valet av plattform för mitt spel, och även typen av spel som visade sig vara en mycket bra grund för att bygga även andra spel i framtiden, såsom breakout, Pong, tetris och så vidare. Listan kan i det närmaste göras oändlig. För en inbiten supporter av ett fotbollslag som mig visade det sig också mycket lyckat att välja just det tema jag valde. Bildmaterial var desto svårare att hitta då bevakningen från svensk fotboll är väldigt mycket sämre än i exempelvis England. Visst är det bättre nu än tidigare, men jag fann fortfarande att det inte var det lättaste. Annars finns det ett stort antal historier och händelser som präglar laget i fråga. Inte minst negativa sådana där det alltid uppskattas med lite häcklande. Jag ville samtidigt att spelare som har någon eller väldigt lite koll alls lätt skulle kunna ta in allt material, och det tycker jag att jag lyckats med synnerligen väl. Med en enkel How-To- Play-sektion är det enkelt att ta in spelkonceptet. Att jag sedan valde att ta bort ett antal av de fallande föremål som jag inledningsvis ville ha med var det bästa jag kunde gjort då detta möjliggjorde att en större målgrupp i slutändan kan njuta av spelet. Spelet i sitt nuvarande skick tycker jag absolut är underhållande och det tyckte jag visade sig på redovisningen, som jag tycker gick tämligen väl.
6 Negativa Erfarenheter Med facit i hand kanske jag hade tjänat på att bygga den absoluta grunden med basfunktionalitet allra först, då jag underskattade tiden det skulle ta något. Då hade jag också insett att det är mycket lättare att jobba med sprites än att hämta in det externa klassbiblioteket GIFAnimation som använder sig av.gif-filer istället för statiska bilder i en.png-fil. Detta innebar att jag slet med något i alltför många timmar som senare ersattes mot något som tog 2-3h att fullända. Planeringsmässigt finns det mycket att förbättra. Iterationsplanen lades det inte tillräcklig fokus på inledningsvis, dessutom var utformningen och formatet fel på grund av slarv. Detta ledde ofrånkomligen till problem senare under projektets slutgång. Felprioritering av de olika delarna av projektet ställde också till med en del problem, vilket ledde till en oregelbunden arbetsbörda under de flesta veckorna. Jag tänkte fel innehållsmässigt för spelet, då jag proppade ett tämligen simpelt spelupplägg med alltför många funktioner. Hade dessa implementeras hade jag varit tvungen att ta bort dessa för att tillgängligheten skulle vara acceptabel. Just kodandet hade kunnat struktureras upp mycket bättre, och så som jag utformat det hade man kunna strukturera upp det ganska rejält. I min kod finns all kod för huvudkaraktären och dess egenskaper inuti själva basklassen, Game1. Sedan är jag nöjd med strukturen för det andra, där jag korrekt delat upp det i klasser så som GameObject och GameMenu. Jag hade sedan ganska stora problem med en del av målen, och det var att alltid ge objekten som faller en slumpmässig funktion, och i nuläget är det inte optimalt, men fungerar. Att jag blev tvungen att skära ner på spelets innehåll på grund av tidsbrist var det absolut bästa som kunde hända, och därför väljer jag att inte inkludera det i denna sektion. Annars skulle det givetvis vara en självklar negativ erfarenhet. Den del som jag är missnöjd med att jag inte fick med i slutändan var införandet av flera tidsbaserade nivåer i spelet, något jag har en god bild av hur jag ska göra, men som på grund av tidsbrist inte blev av.
7 Sammanfattning Det blir antagligen inga fler spel från min sida på ett bra tag, men känner mig klart nöjd med projektet i helhet och att det var en fräsch vind som behövdes för min personliga utveckling inom webbprogrammeringens ramar. XNA är ett mycket trevligt ramverk som jag absolut kan tänka mig att arbeta med igen dock. I framtiden gäller det att vara mycket mer noga med planering och faktiskt använda och framförallt respektera de verktyg som finns för just detta. Iterationsplan har jag insett är mycket värdefullt för en webbprogrammera för det mesta, inte minst för en själv. Spelet i det skicket det är i nu skulle jag vilja påstå är till 90% klart. Ett fåtal förändringar och lite strukturering av koden och så vill jag hävda att det är så färdigt det kan bli. Framtiden för spelet blir att optimera positionsmässig slumpning av fallande objekt, och att införa tidsbaserade nivåer där hastigheten för föremål som faller ökar. Detta innebär också att den fasta poänggränsen som i nuläget är satt givetvis tas bort.
8