Bob's Portfolio

Snake+

Keuzeonderwerp V6 periode 1

Beschrijving

Als keuzeonderwerp voor periode 2 van V6 ga ik een spelletje maken gebaseerd op het Snake-spelletje dat altijd werd meegeleverd op de bekende Nokia telefoons.

Je zult in het spel kunnen kiezen tussen drie moeilijkheidsgraden waarmee je kunt varieren in de snelheid van de slang, en je zult kunnen kiezen met of zonder muren te spelen. Ook zal het spel highscores bijhouden. Voor het weergeven van het spel op het scherm zal ik gebruik maken van de SDL engine.

Eerst zal ik vaststellen wat het spel zal gaan bevatten (design sheet), daarna zal ik de benodigdheden gaan verzamelen (fundamentele functies in het programma zelf, maar ook graphics) en daarna zal ik het spel programmeren.

Planning

Week Wat doen
46 Keuze & orienteren
47 Planning & design sheet maken
48 Design sheet maken & beginnen met programmeren
49 Programmeren
50 Programmeren & inleveren aan eind van de week

Design Sheet

Voor mijn wat serieuzere projectjes maak ik vooraf vaak een design sheet. Hierin leg ik voordat ik ga programmeren vast wat ik in het programma zal verwerken, hoeveel schermen er zullen zijn, hoe de individuele schermen eruit gaan zien (betreffende bijvoorbeeld bestuurselementen), werk ik algoritmes van te voren alvast wat uit, maak ik aantekeningen over dingen die ik moet onthouden of waar ik rekening mee moet houden, dat soort dingen. Het Design Sheet is echter niet in steen geschreven; het is voor mij slechts een richtlijn en geheugensteuntje tijdens het ontwikkelen, puur voor het overzicht. De Design Sheet voor dit project is hier te downloaden. Dit was het design sheet aan het begin van het project. Het is nauwelijks veranderd door het project heen.

Het programma

Het programma is hier te downloaden.

Hoe werkt mijn programma?

Het is heel simpel. Het houdt bij waar de slang zich bevind en hoe de staart eruit ziet. Dan kijkt hij per frame naar welke toets er ingedrukt wordt (boven, beneden, links, rechts) en afhankelijk daarvan laat hij de slang een stuk vooruit bewegen. Als de kop van de slang dan op een muis of pil terecht komt eet hij die op, en krijgt de speler punten op basis van de moeilijkheidsgraad. De pil is 5 x zoveel waard als de muis, en verschijnt elke 5 a 10 muizen die je opeet. Elke keer als je een muis opeet gaat hij weer naar een andere willekeurige plek. Hetzelfde geldt voor de pil.

Reflectie

Ik ben redelijk tevreden over dit project. Ik vind het (als ik zo vrij mag zijn) er oke uitzien, de besturing loopt soepeltjes en het highscore systeem werkt prima. Het spelletje bevat eigenlijk alles wat een snake-kloon zou moeten bevatten. Iets waar ik minder tevreden over ben is het programmeerwerk. Dit project is namelijk niet zo heel erg object-georienteerd ingesteld, wat me bij mijn vorige projectje juist heel goed lukte. Dit komt volgens mij omdat a) dit projectje ietsje simpeler was in vergelijking met Maze+ en b) omdat ik het daardoor soms iets onderschatte, en vervolgens maar koos voor een stuk "dirty coding" in plaats van een mooie gestructureerde class. Hierdoor is de code ietsje rommeliger geworden en lijkt hij op sommige plekken wat chaotisch. Dit is een punt waar ik bij mijn volgende project zeker meer aandacht aan ga besteden. Verder ben ik zeer tevreden met het eindresultaat.

Ontwikkelingsdagboek

Klik op de plaatjes voor een vergroting.

Dag 1 (26/11/12)


Vandaag heb ik de fundamenten voor het programma gelegd. Ik heb het finite gamestate system (de spelsituatie manager), het knoppensysteem en het vinkensysteem geimplementeerd en werkend gekregen. Dit is van groot belang, want dit zorgt ervoor dat interactie met de gebruiker versimpeld wordt (ik kan makkelijk vragen stellen aan de gebruiker d.m.v. knoppen & vinken) en ik kan makkelijk tussen schermen wisselen dankzij de spelsituatie manager. Dit schiet al lekker op!

Dag 2 (28/11/12)

Ik heb vandaag een beginnetje gemaakt aan het positioneren van het UI. Het is nog niet helemaal volledig en de knoppen (behalve de eerste) werken nog niet, maar het geheel begint al een beetje tastbaarder te worden.

Dag 3 (29/11/12)

De laatste hand aan het menu is gelegd. Nu kan ik aan het leuke stuk (het programmeren van Snake+) beginnen :-)

Dag 4 (30/11/12)

De header ietwat aangepast.

Dag 5 (3/12/12)

Vandaag heb ik de eerste stappen gezet naar het spel! Ik ben begonnen met het skelet van het spel: het verdelen in 4 verschillende toestanden. Als je mijn spel speelt kan je op de volgende 4 plekken in het spel zijn: het daadwerklijke spel (waar de slang kruipt), het pauzescherm, het aftelscherm naar het daadwerkelijke spel & het eindscherm dat je verteld dat het game over is. Dat ik het verdeelt heb in 4 verschillende situaties is handig, want dan kan ik makkelijk wisselen tussen de verschillende spelsituaties. Verder heb ik het aftelscherm gemaakt en het pauzescherm. Volgende uitdaging: het echte concrete daadwerkelijke spel!

Dag 6 (4/12/12)

Nu is er een slangetje :D Erg leuk, pak de champagne maar. De basis van de slang is geimplementeerd. Dit houdt in, basis bewegingen (naar boven/beneden/links/rechts), dat hij niet over zichzelf heen kan gaan, en dat ik aan kan geven hoe de slang om moet gaan met muren (er doorheen en dan aan de andere kant weer tevoorschijn komen, of game over wanneer een muur geraakt wordt.). Nu is het een kwestie van een scoresysteem en eetdoelsysteem toevoegen, en dan is het af!

Dag 7 (6/12/12)

Het gaat hard nu! Score, een mooie pauzeknop, een pauzescherm dat de huidige spelsituatie mooi vervaagd, een paar optimalisaties & bug-fixes hier en daar: de to-do list wordt steeds korter. Ook heb ik een scoreteller toegevoegd, al zit er nog geen systeem in dat muisjes of pillen op het veld kan plaatsen om op te eten. Ik heb ingesteld dat als ik met de slang over (0,0) ga hij ook punten geeft, puur voor het testen. Snel zal ik ook pillen & muizen toevoegen, zodat het spel interessant wordt en een doel krijgt.

Dag 8 (7/12/12)

Niet veel bijzonders toegevoegd/aangepast vandaag. Introscherm wat interessanter gemaakt, de enter-knop is wat groter en er kruipt een slangetje willekeurig over het scherm. Schattiggg :)

Dag 9 (8/12/12)

Er is nu ook een eindscherm! Altijd fijn. Als je nu game-over gaat wordt je verteld wat je score is en kun je je naam invullen. Het idee is dat het spel dan je score opslaat als het een highscore is. Dat is alles eigenlijk. :p

Dag 10 (10/12/12)

De basis van het spel is eindelijk compleet. Het heeft nu daadwerkelijk zin om het spel op te starten! :D Een gedenkwaardig moment. Muisjes verschijnen op het scherm en verplaatsen als je ze opeet, en elke 5 a 10 keer verschijnt er een pil. De muizen zijn 10 punten waard, de pil 50. De pil is echter maar tijdelijk! Je krijgt 50 bewegingen de tijd om de pil op te eten. Als dit niet lukt verdwijnt de pil weer zonder dat je punten krijgt en moet je weer wat muizen eten voordat hij weer verschijnt. Het spel is nu eigenlijk praktisch af. Het enige wat nog mist is een systeem dat de highscores bijhoudt en er moeten nog wat puntjes op de i gezet worden. Lang duurt het in ieder geval niet meer!

De laatste dag (13/12/12)

Het spel is af! :D De puntjes op de i waren niet heel veel moeite. Het lees/schrijf systeem voor de highscores ging vlotter dan verwacht, en dingen als het helpscherm of overscherm waren meer een kwestie van met paint spelen dan programmeren ;-) Als je benieuwd bent naar het eindresultaat kun je dat hierboven downloaden!