• No results found

Er bestaan veel verschillende soorten serious games in ver uit elkaar verspreide domeinen. Elk hebben ze eigen impliciete doelen die ze op veel verschillende manieren proberen te bereiken. Hoewel serious games een goede aanvulling zijn op traditionele manieren van revalideren of le- ren, is hun effectiviteit niet gemakkelijk te berekenen. Hierdoor gebeurt adaptiviteit niet altijd op persoonlijk niveau wat leidt tot minder goede resultaten. Daarboven wordt het systeem, dat zorgt voor adaptiviteit, vaak sterk met de game vermengd waardoor bij ontwikkeling van nieu- we serious games steeds opnieuw begonnen moet worden. Uitbreidbaarheid en de mogelijkheid om code te recupereren komt daardoor in het gedrang waardoor de ontwikkeling van nieuwe adaptieve en gepersonaliseerde serious games langer duurt.

In deze masterproef wordt gepoogd een architectuur te maken die toelaat serious games adaptief en gepersonaliseerd te maken. Deze architectuur zal een adaptive engine bevatten met compo- nenten die toelaten een serious game gemakkelijk adaptief en gepersonaliseerd te maken. Hierbij is het belangrijk dat delen van een reeds geïmplementeerde architectuur opnieuw gebruikt kun- nen worden bij de ontwikkeling van nieuwe games. Om het systeem nog gepersonaliseerder te kunnen maken, moet het mogelijk zijn om, buiten gegevens uit het spel, ook gegevens van exter- ne bronnen zoals bijvoorbeeld een hartslagmonitor te kunnen gebruiken voor analyse en selectie van nieuwe opdrachten in de adaptive engine. Om ervoor te zorgen dat het systeem overdraag-

2.6. CONCLUSIE 19 baar is naar andere games, dient het systeem modulair te zijn. Aanpassingen aan het spel mogen geen overbodige aanpassingen in het systeem tot gevolg hebben. Ook wanneer een reeds geïmple- menteerd systeem voor adaptatie overgedragen wordt naar een andere game, zou dit zo weinig mogelijk aanpassingen als gevolg mogen hebben. Als laatste zou de architectuur de verschillende methodes, tijdstippen en locaties van adaptiviteit, zoals besproken in Sectie 2.2, moeten kunnen ondersteunen om compatibel te zijn met zo zoveel mogelijk soorten serious games.

De architectuur zal geïmplementeerd worden in een Flappy Bird serious game die op zich niet adaptief en gepersonaliseerd is. Het is de bedoeling dat, door de architectuur in het spel te integreren, dit wel zo is. Om een Flappy Bird serious game te hebben, zal een basis Flappy Bird spel omgevormd worden naar een serious game voor fysieke revalidatie. Hiervoor zal, met behulp van een camera, geverifieerd worden of de oefening correct werd uitgevoerd. Later wordt ook gepoogd om met dezelfde architectuur een andere serious game adaptief en gepersonaliseerd te maken met behulp van een stappenplan. Met performantie, uitbreidbaarheid en aanpasbaarheid dient tijdens de ontwikkeling van de architectuur dus rekening gehouden te worden.

3

Flappy Bird

Flappy Bird is een eenvoudige game die in mei 2013 voor het eerst voor Android en Apple verscheen [34]. Het spel werd na enkele maanden razend populair waarna het niet veel later door de ontwikkelaar zelf terug verwijderd werd. De bedoeling van Flappy Bird is om met een vogel tussen obstakels te vliegen, zonder deze te raken, en om zo een zo hoog mogelijke score te behalen. Flappy Bird is een uitdagend spel dat lang gespeeld kan blijven worden, wat het een goede kandidaat maakt om naar een serious game omgevormd te worden. Daarboven laat de eenvoudige besturing van het spel toe andere manieren voor het vliegen van de vogel te gebruiken. Als eerste wordt een implementatie van Flappy Bird besproken. Vervolgens wordt verklaard hoe van deze implementatie een serious game voor fysieke revalidatie gemaakt wordt.

3.1. BASISIMPLEMENTATIE 21

3.1 Basisimplementatie

Voor de implementatie van Flappy Bird, werd gebruik gemaakt van Unity [35]. Unity is een cross-platform game-engine voor de ontwikkeling van games in 2D, 3D en VR. De games kunnen geprogrammeerd worden in de object-georiënteerde programmeertaal C# alsook in UnityScript. Omdat Flappy Bird zo een eenvoudig concept heeft, is de implementatie ervan in Unity deel van een tutorial voor beginners [36]. Hierin worden de basisprincipes van een 2D-game in Unity zoals collisie-detectie, animaties en UI besproken en toegepast. Als eerste wordt een scene gemaakt waaraan de vogel, de grond en de lucht toegevoegd worden. Verder zullen aan deze objecten componenten en scripts toegevoegd worden die ervoor zullen zorgen dat deze objecten fysisch gedrag vertonen en bestuurd kunnen worden door de gebruiker. Elk object in Unity heeft een start en update functie die door de programmeur gebruikt kan worden. De start-functie wordt door de engine opgeroepen telkens wanneer het spel start. De update-functie daarentegen wordt elke keer het scherm ververst wordt, opgeroepen door Unity.

3.1.1 De vogel

Aan het vogel-object in de scene wordt een script toegevoegd dat ervoor zorgt dat de vogel reageert op input van de gebruiker. Elke keer de update-functie opgeroepen wordt, wordt gecon- troleerd of de gebruiker input gegeven heeft. Wanneer dit het geval is, wordt aan het vogel-object een opwaartse kracht gegeven waardoor de vogel even vliegt. Een volgende stap is om ervoor te zorgen dat gedetecteerd wordt wanneer de vogel op de grond valt of tegen een obstakel, hier pilaren, vliegt. In Unity is dit eenvoudig en hoeft aan de pilaren, de grond en de vogel enkel een collider toegevoegd te worden. Zo een collider registreert wanneer die botst met een andere collider en roept, wanneer dit het geval is, de methode OnCollisionEnter op. Wanneer bij de vogel deze methode opgeroepen wordt, wordt een boolean isDood van de vogel op waar gezet. Als laatste, om de game wat mooier te maken, werden animaties aan de vogel toegevoegd. Telkens wanneer de vogel fladdert of doodgaat, krijgt de speler een andere afbeelding van de vogel te zien. De verschillende figuurtjes die getoond worden aan de gebruiker, zijn te zijn in Figuur 3.1.

22 HOOFDSTUK 3. FLAPPY BIRD

Figuur 3.1: Verschillende figuren die gebruikt worden in de animatie van de vogel

3.1.2 Gamecontroller

Een belangrijk object, dat staat voor het in goede banen leiden van de game, is de gamecon-

troller. Dit object houdt scores en snelheden bij en zorgt er bovendien voor dat de gebruiker

tekst te zien krijgt met scores of instructies. De gamecontroller voorziet de functies BirdScored en BirdDied die scripts kunnen gebruiken om de gamecontroller te melden dat de vogel een punt gescoord heeft of ergens tegengevlogen is. De gamecontroller kan vervolgens tekst op het scherm tonen om de gebruiker de score te laten zien of om instructies om opnieuw te beginnen te tonen.

3.1.3 Bewegende scene

De vogel moet gedurende het spel constant vooruit vliegen. Om ervoor te zorgen dat er geen oneindig grote scene gemaakt moet worden, beweegt de vogel niet vooruit maar beweegt de achtergrond achteruit. Dit geeft de speler niet enkel de illusie dat de vogel vooruit vliegt maar zorgt er ook voor dat er efficiënt kan omgesprongen worden met de grootte van de scene. Telkens wanneer een stuk achtergrond voorbij de scope van de scene is, kan dit stuk terug vooraan geplaatst worden. Het spel kan hierdoor oneindig lang gespeeld worden met slechts twee stukken achtergrond. De werking van dit mechanisme wordt getoond in Figuur 3.2.

Figuur 3.2: Mechanisme voor het oneindig laten doorlopen van de achtergrond

Voor de pilaren waar de vogel door moet vliegen wordt een gelijkaardig principe gebruikt. In het begin van het spel wordt een bepaald aantal pilaren aangemaakt in de scene. Slechts wanneer ze

3.2. TRANSITIE NAAR EEN SERIOUS GAME 23