SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS Individuellt Mjukvaruutvecklingsprojekt (Utvecklare av digitala tjänster) Den 1 juni 2011
ABSTRAKT Rapporten tar upp positiva och negativa erfarenheter som jag erhållit då jag under 10 veckor har arbetat med att skapa en pokerapplikation för att spela Texas holdem på Androidenheter. Det som särskiljer min applikation från de som redan finns att få tag på idag är att jag har skapat en applikation som gör det möjligt att spela flera personer på en Androidenhet. Genom det här projektet har jag fått erfara hur viktigt det är med bra testrutiner. Det kan leda till stora problem och vara väldigt tidskrävande att hitta buggar för en funktion flera veckor efter att man har implementerat funktionen. Jag har även fått ökade kunskaper om versionshantering, att uppskatta tid och hur man arbetar rent allmänt inom mjukvaruprojekt. Projektet har ökat mina kunskaper om Android-plattformen avsevärt och resulterat i en produkt med stora vidareutvecklingsmöjligheter. 2
FÖRORD Idén om att göra en Androidapplikation där flera personer kan spela Texas holdem på en enhet kom jag på några veckor innan kursen Individuellt Mjukvaruutvecklingsprojekt startade. Då jag upptäckte att det inte fanns någon liknande applikation bestämde jag mig för att skapa en applikation för detta under den ovan nämnda kursen. 3
INNEHÅLLSFÖRTECKNING Inledning/bakgrund 5 Positiva Erfarenheter 6 Negativa Erfarenheter 7 Sammanfattning 8 4
INLEDNING/BAKGRUND Projektets mål har varit att skapa en applikation för att spela Texas holdem ( namngiven Texas Holdem 4 Friends ) som sedan kan vidareutvecklas efter projektets slut. Ett annat mål med projektet var att få ökad kunskap inom Androidutveckling och hur man kan skapa applikationer med enkel 2d grafik anpassad för mobila skärmar. Applikationen skrevs i programmeringspråket java med specialanpassade api:er anpassade för Androidsystemet. Jag använde utvecklingsmiljön Eclipse (vilken rekommenderas av Google som står bakom Android) tillsammans med pluginet ADT som anpassar Eclipse för Androidutveckling och kopplar ihop Android SDK med Eclipse. För att testa applikationen på olika Androidversioner och skärmstorlekar har jag använt mig av ett verktyg för att skapa emulatorer som följer med Android SDK. Gränsnittet i applikationen är uppstrukturerat i XML och för att visa de mer grafiska bitarna (d.v.s pokerbordet, korten och spelarinformation) används ett biliotek i Android anpassat för att skapa enklare 2d grafik. De två första veckorna av projektet arbetade jag med att lära mig mer om hur Androidutveckling går till, hur Androidsystemet är uppbyggt och skapade lite olika prototyper. När jag väl började implementationen av själva applikationen jobbade jag först med att få ett fungerande grundläggande spelflöde vilket bland annat bestod av att generera kort, implementera de olika val som en spelare ska kunna göra och byta mellan spelare efter ett mönster enligt Texas holdems regler. Sedan arbetade jag med funktionen för att avgöra en vinnare efter varje hand samtidigt som jag tittade på olika grafiska alternativ. Då jag hade skapat en fungerande funktion för att avgöra vinnaren av en hand påbörjade jag implementationen av grafiken. Avslutningsvis utnyttjades de sista två veckorna av projektet mest till finputsning och att fixa diverse buggar. Eftersom att inte tiden räckte till för att göra en korrekt implementation av hur en situation då en spelare vill syna en höjning som spelaren inte har råd att syna ska hanteras fick jag lösa detta genom att göra en specialversion som innebär att en spelare kan sätta sig i skuld (d.v.s få ett negativt antal pokermarker) genom att syna en höjning som han eller hon egentligen inte har råd att syna. Detta är inte helt i linje med Texas holdems regler men göra applikationen spelbar på ett relativt rättvist sätt. 5
POSITIVA ERFARENHETER Innan projektet startade hade jag endast gjort små enkla prototyper i Android och hade väldigt ytliga kunksaper i hur plattformen fungerade. Efter att nu har jobbat med Android under 10 veckor kan jag påstå att jag har börjat känna mig mer bekväm i hur systemet är uppbyggt och hur man kan utveckla applikationer med enklare 2d grafik för plattformen. Även fast jag är ganska dålig på design och färger samt att grafiken är väldigt enkel så anser jag att denna del gick smidigt och då jag inte använt några bilder över huvud taget (förutom till ikonen) i applikationen utan ritar allt direkt i applikationen i relationen till enhetens höjd och bredd med hjälp av olika simpla former som finns att tillgå i ett Android-bibliotek för 2d grafik blir det lättare att skala grafiken för att det ska se bra ut på olika enheter (visualiseringen av de olika valörerna på korten löste jag genom att använda ett typsnitt som innehåller de olika symbolerna) och även om slutresultatet på denna punkt blev långt ifrån perfekt blev det bättre än om jag hade använt bilder. Anledningen till varför den grafiska biten visade sig gå smidigt är troligtvis för att jag var väl förberedd innan jag började implementationen genom att jag hade tittat på många exempel och tutorials på internet och läst om 2d-grafik för Android i böcker. Till framtida projekt ska jag därför i allmänhet bli bättre på att göra lite research och planering innan jag börjar skriva kod. Jag uppfattar även att implementationen som helhet var lyckad och förutom vid implementationen för att avgöra vinnaren av en hand fastnade jag aldrig på något specifik moment under en längre tid. Anledningen till varför implementationen gick relativt smidigt bedömer jag har att göra med att jag hela tiden strävade efter att ha en väl strukturerad och kommenterad kod med bra klass, metod och variabelnamn så att jag senare ska kunna gå tillbaka och enkelt förstå vad till exempel en specifik metod gör. Jag har även insett hur oerhört viktigt det är att ha bra förståelse för den kod man skriver och att det inte fungerar att försöka sitta och skriva av kod från internet som man inte har koll på vad den gör. 6
NEGATIVA ERFARENHETER Innan jag började med projektet trodde jag att jag skulle ha en fungerande spelbar version av applikationen efter ungefär fyra veckors tid och att jag resten av tiden skulle kunna sitta och finputsa på grafiken. Detta visade sig vara ett grovt felaktigt antagande och det var först efter 8 veckor som jag lyckades få fram en hyffsat fungerande spelbar version som dock fotfarande var väldigt buggig. Utifrån detta har jag lärt mig att i framtida projekt ha en mer realistisk syn då jag startar upp projektet på hur långt tid saker och ting faktiskt kommer att ta. Det var inte möjligt som jag först hade väntat mig att sitta 40 timmar i veckan med detta projektet och fortfarande hinna med övriga skolarbeten. Ett stort problem under projektet har varit testning, jag har haft problem med att testa så att de funktioner jag implementerat verkligen fungerar i alla olika tillfällen och lägen som applikationen kan befinna sig i. För att jämföra kort och avgöra vinnaren för en hand skrev jag ett ganska omfattande enhetstest vilket gjorde det möjligt att testa funktionen automatiskt. Men enhetstestningen tog långt tid att skriva och med begränsad tid och kunskap hade jag inte möjlighet att skriva fler enhetstester som testade mer avancerade funktioner som spelflöde, att stora och lilla mörken tilldelas rätt o.s.v vilket har inneburit att jag har haft problem att testa dessa funktioner. Jag har använt mig av ett testfall som är skrivet för att ge en beskrivning för hur jag ska testa spelflödet väldigt flitigt och då det visade sig att man får in en stor mängd funktionallitet och olika kombinationer av funktioner har det testfallet varit till stor hjälp. Testfallet täcker dock inte allt, vilket har inneburit att jag i efterhand då jag har spelat spelet hittat en mängd olika konstiga buggar som jag inte vet vad i koden de kommer ifrån och det har gått åt onödigt mycket tid för att hitta sådana fel och rätta till dem. Lärdomen av detta är att i framtida projekt skriva fler testfall som är lätta och tar kort tid att genomföra (gärna ganska snarlika men med några betydande skillnader så att man lätt kan hitta vad olika fel beror på). Sedan kanske det hade visat sig så att även om avancerade enhetetstester tar långt tid att skapa så hade jag kanske sparat in den tiden genom att lätt hitta fel i applikationen och var i koden felet finns. 7
SAMMANFATTNING Jag tycker att det har varit ett lyckat projekt då jag har uppnått samtliga av mina krav (även om det finns utrymme för förbättring) och lyckats göra en spelbar version av Texas holdem i min applikation vilket är ett resultat jag är nöjd med. Jag tror att det finns en marknad och stor utvecklingspotential (både vad gäller finslipning av redan existerande funktioner och tillägg av nya) för den produkt som jag har skapat. Exempel på en funktioner som hade varit intressanta att skapa är en funktion som gör det möjligt att koppla ihop ett antal enheter och sedan spela på var sin enhet istället för att alla ska spela på en enda. Sedan finns det en del funktioner som redan finns i spelet men som skulle kunna förbättras, som att göra det möjligt för användaren att ställa in inställningar själv för saker som lilla och stora mörken, hur många marker varje spelare ska börja med o.s.v. Detta är funktioner jag vill implementera i framtiden och tanken är att jag ska fortsätta utveckla applikationen och så småningom lägga ut den på Android Market. 8