Slutrapport för Pacman Datum: 2011-05-30 Författare: cb222bj Christoffer Bengtsson 1
Abstrakt Jag har under våren arbetat med ett projekt i kursen Individuellt Mjukvaruutvecklingsprojekt. Målet med mitt projekt har varit att skapa en klon utav spelet Pacman. Under arbetets gång har jag använt mig av programmeringsspråket C# och ett ramverk som heter XNA. I denna rapport tänkte jag gå igenom hur mitt projekt gick, vad som gick bra och vad som gick mindre bra. Vad jag dock kan säga redan nu är att i alla fall med de förkunskaper jag hade så är Pacman mycket mer komplext än vad man kan tro även om spelet är gammalt. 2
Innehållsförteckning Inledning...4 Positiva erfarenheter...4 Negativa erfarenheter...5 Sammanfattning...6 3
Inledning När jag skulle börja arbeta mitt projekt hade jag väldigt mycket problem med att bestämma mig vad jag ville göra, jag sökte runt väldigt mycket på internet för att hitta idéer men kunde inte direkt komma på något unikt som jag skulle kunna göra med de förkunskaper jag hade. Jag började då fundera på om det fanns något spel jag kunde göra då just spelprogrammering länge varit ett av mina intressen och mitt val föll då mellan Pacman, Tetris eller Space Invaders. Tillslut valde jag dock att arbeta med Pacman då detta är ett väldigt känt spel och jag trodde att det skulle ge mig en god utmaning. I början av projektet spenderade jag mycket tid på att planera och försöka fundera över hur jag skulle kunna programmera de olika delarna av spelet. Under min inledande period av projektet spenderade jag min tid med att spela Pacman och diverse kopior för att kunna få en uppfattning om vilken funktionalitet jag vill ha i spelet och hur jag skall kunna lägga till det i mitt spel. Positiva erfarenheter Till att börja med skulle jag vilja säga att jag har stött på både goda och dåliga erfarenheter. Jag skulle dock tro att det flesta negativa beror på att jag inte haft tillräckligt stora förkunskaper och att jag i början av mitt projekt antog att eftersom ett spel är gammalt så kommer det inte bli överdrivet svårt att göra en klon av, vilket dock visade sig felaktigt men mer om det senare. Något jag skulle vilja ta upp är min planering där jag både haft väldigt stor framgång men också väldigt stora motgångar. Det som gått bra är att jag faktiskt trots stora motgångar i början, tillslut lyckades uppnå en god mängd arbetstid även om majoriteten av arbete skedde under den andra halvan av projektet. Anledningen till att detta gick så bra tror jag är för att jag visste att jag behövde skärpa mig och att när jag väl börjar ta saker riktigt på allvar så kan jag verkligen pressa mig själv till utmatning om det ger resultat. Något annat som jag är väldigt nöjd med är hur mitt koordinatsystem i spelet blev tillslut. Koordinatsystem används för att mina karaktärer ska kunna veta vart de befinner sig på spelplanen och för att de ska kunna röra sig därefter. Anledningen till att detta blev så bra tror jag är för att jag spenderat så mycket tid på att göra det bättre samt att jag när jag fastnade fick hjälp med att komma i rätt riktning utav dem som är mer kunniga än jag inom XNA och C#. Viktigt att då tänka på inför framtiden är att om du skulle fastna försök ta kontakt med och diskutera dina problem med dem som är mer kunniga inom ämnet. Det är givetvis viktigt att läsa i litteraturen samt leta runt på internet. I slutet av projektet så arbetade jag med att lägga till ett system som håller reda på tidigare poängrekord och till en början gick det inte så bra då jag stötte på en massa olika problem som gjorde att mitt spel inte fungerade som det ska men efter att jag spenderat lite tid med att leta runt på internet och leta efter exempel på hur andra gjort så lyckades jag få det att fungera och jag skulle också vilja påstå att resultatet blev riktigt bra. Det enda jag inte tycker om är faktumet att jag inte kan skriva in ett eget namn men detta var något som jag valde bort att ha med för att det gav mig så mycket problem och för att jag istället skulle få tid till att lägga in musik. 4
Negativa erfarenheter När det gäller negativa erfarenheter finns det en hel del att se på men som jag nämnde som både något positivt och negativt så är det min planering av projektet. Det bra med min planering var att jag mot andra halvan av projektet skärpte mig och verkligen fick saker och ting gjort men för att fokusera på det negativa så var jag i början väldigt dålig på att följa min planering även om jag tidigt i veckan funderade ut vad jag behövde åstadkomma. Anledningen till att jag inte följde min planering tror jag såhär i efterhand först och främst var för att jag underskattade hur mycket tid 180 timmar faktiskt är när vi talar om en 10 veckors period och du under denna tid även läser en annan kurs. Jag tror också det har att göra med att jag inte i förväg såg till att de program jag använde under min utveckling verkligen fungerade på min bärbara dator då jag var iväg från min stationära dator där jag normalt sett arbetar med programmering. Detta skedde 2 veckor i rad och då jag faktiskt inte kunde testköra mitt spel så kändes det meningslöst att arbeta med det under den tiden jag inte hade tillgång till min stationära dator. Något annat som i början av projektet inte gick så bra men som blev mycket bättre i andra halvan av projektet är min tidsrapportering. I början av projektet noterade jag i princip bara hur mycket tid jag spenderat och satte en stämpel på vad jag arbetat med (implementation, planering osv.) men i andra halvan började jag istället även notera mer vad jag faktiskt gjort och vad jag kände behöver göras framåt. Detta har hjälpt mig väldigt mycket och har varit bra för att ge mig en överblick över vad jag faktiskt gjort i projektet och vad som fortfarande behöver göras. Det har även såhär i efterhand gett mig information till denna rapport om hur mina arbetspass faktiskt gick. En sak som jag dock vill gå igenom som jag inte gjort så mycket av men som jag personligen tycker är väldigt viktig är dokumentation av testfall. Jag har inte direkt gjort någon stor mängd med testdokumentation och när ett projekt är individuellt såsom detta och när projektet relativt sett är ganska små så kan jag tycka att det är ok. Vad jag dock insett är att testdokumentation kan ge dig en bra överblick över vad som gått fel och vad som kan orsakat felet. Något jag också noterat när det gäller testning är att det är så mycket som kan gå fel och så fort ett projekt blir större så är det väldigt viktigt att hålla reda på vad som inte fungerar korrekt och hur detta uppstår. När man sedan också arbetar i ett projekt som inte är individuellt blir det än mer viktigt att göra testdokumentation eftersom det är helt omöjligt för en person att veta om ett fel är åtgärdat eller hur man återskapar ett fel så att man kan göra något åt det om det från början är någon annan som hittat felet. Men som sagt när man arbetar individuellt så är det inte lika viktigt med att dokumentera testning just för att någon annan behöver ha informationen. Såhär mot slutet av projektet kan jag också säga att när det gäller testningsdokumentation så skulle den kunnat vara bra tidigare i projektet för att jag bättre skulle kunnat prioritera om vad som faktiskt behöver göras. Jag spenderade flera veckor på att få mitt koordinatsystem att fungera och detta gjorde att jag länge knappt hade något att visa upp eller få feedback på. Det gjorde också att projektet i princip stannade upp då jag under en längre tid arbetade med och gjorde om samma sak ett flertal gånger. Det hade då kunnat vara bra att ha testning- och fel-dokumentation som gjorde att när det väl fungerade dugligt så kunde jag gått vidare och sedan när jag fått tid gå tillbaka och förbättrat. En till sak som är negativ är hur mitt spel ser om din karaktär och ett spöke rör vid varandra. Detta är för att jag valde att försöka efterlikna originalet. I originalet så sker en kontroll som säger att om Pacman och ett spöke någon gång befinner sig på samma koordinat så är det en träff. 5
Problemet med detta är att om Pacman och ett spöke rör sig rakt mot varandra kan det vara så att när uppdateringen sker så passerar man rakt igenom varandra utan att träffa eftersom både Pacman och spökets koordinat blev uppdaterade innan dem faktiskt befann sig på samma. Dock så sker detta mer ofta än vad det gjorde i originalet vilket jag tyvärr inte lyckats ta red på varför. Så även om detta är negativt så var det ett val jag personligen gjorde och om jag någon gång i framtiden ska försöka efterlikna något annat så får jag än en gång fundera på om man ska försöka efterlikna originalet eller ändra hur logiken fungerar. När det gäller något jag tyvärr inte blev speciellt nöjd med måste jag säga att det är hur mina datorstyrda karaktärer fungerar. De är väldigt simpla och har inget som kan liknas vid intelligens överhuvud taget. Anledningen till detta var att jag inte ville fastna för mycket på en funktion som jag gjorde när det gällde mitt koordinatsystem, det blev så att min AI (datorstyrda karaktärer) fick lida för att jag ville gå vidare och för att jag tyckte att det var bättre att faktiskt tillslut få ett resultat än att sitta med ett halvfärdigt projekt och en grym AI. Jag tror också att en annan anledning till att den inte blev så bra är för att jag trodde att det skulle vara mycket simplare att lägga till än vad det senare visade sig. Sammanfattning Sammanfattningsvis så skulle jag dock vilja säga att som jag nämnt ett par gånger så har jag underskattat hur komplext Pacman faktiskt är (i alla fall relativt sett mot vilka förkunskaper jag hade). Detta har ofta gjort att jag tror att saker kommer bli lätta att lägga till i mitt spel men som senare tagit väldigt mycket tid att lägga till. För att nämna två exempel så logiken bakom mina datastyrda karaktärer (AI) och mitt koordinatsystem. Vad jag dock kan säga är att även om jag i alla fall vad jag personligen tycker tog mig vatten över huvudet och har en hel del negativa erfarenheter så har jag lärt mig mycket mer än vad jag trodde att jag skulle kunna lära mig. Mina kunskaper inom programmering som helhet och speciellt mina kunskaper inom C# har ökat enormt mycket och jag är glad att jag valde att arbeta med det jag gjort även om jag som sagt antagligen underskattade svårighetsgraden. Jag vill också säga att även om jag som sagt haft en hel del negativa erfarenheter, så skulle jag faktiskt vilja påstå att man lär sig mer av att göra fel och att arbeta med något som är lite svårare än vad man klarar av. Än att arbeta med något som är lätt och som bara gör att det blir positiva erfarenheter. Eftersom om det är för lätt så kommer du knappt lära dig något av det. När det gäller utvecklingspotential i framtiden så finns det en hel del saker jag tycker skulle kunna förbättras i mitt projekt bland annat hur de datastyrda karaktärerna fungerar men också sådana simpla saker som att jag inte tog med bonus föremål för extra poäng och att du inte kan skriva in ditt namn när du får ett nytt poängrekord. När vi istället pratar om mig själv så tror jag att detta projektet har gett mig väldigt mycket och att jag byggt en bra grund att arbeta på i framtiden. Även om jag nu kan en stor del mer än vad jag kunde tidigare så inser jag nu att det finns så mycket mer att lära sig än vad jag tidigare trott och jag ser fram emot att utforska vad som kan finnas att ta lärdom av. 6