Flappy Bat (Programmeren met Greenfoot)
Greenfoot is een programmeeromgeving waarmee je op een eenvoudige manier programma's maakt met een visuele component: spelletjes, simulaties, ... De programmeer'taal' die je gebruikt is Stride. Stride houdt ergens het midden tussen een grafische en een tekstuele programmeertaal en is gebaseerd op Java.
We bouwen een eenvoudig spelletje dat doet denken aan het bekende Flappy Bird. Maar eerst analyseren we het programma om vertrouwd te raken met de manier waarop je een computer vertelt wat hij moet doen - en hoe belangrijk details hierbij zijn.
Daarna het programma zelf schrijven is niet heel moeilijk want je krijgt van ons reeds heel wat cadeau.
Links met leerplan
- Informaticawetenschappen
- Vaardigheden
- Observeren en analyseren van een probleem
- Probleemoplossend denken
- Algoritme opstellen
- Programmeren
Leeftijd
- Vanaf 14 jaar (tot 18 jaar) - 2de (3de) graad ASO/TSO
Materiaal
- PC/laptop (kan ook in groepjes van 2)
- Software: Greenfoot (versie 3.6.0 of hoger). Wijzig de taal eventueel naar Nederlands (Edit | Properties | Interface).
- De volgende Greenfoot-projecten: flappybat-run (uitvoerbaar, maar zonder code), flappybat-start (om mee te starten), flappybat-oplossing (de oplossing). Dit zijn ZIP-bestanden die je vooraf reeds kan uitpakken. Het resultaat is telkens een map die je vanuit de Greenfoot-software kan openen. (Oudere versies: flappybat-run | flappybat-start | flappybat-oplossing.)
- Je kan je als leerkracht best op voorhand een beetje vertrouwd maken met Greenfoot. Als het stap voor stap doorlopen en uitproberen van deze tekst en het aandachtig bestuderen van de eindoplossing niet voldoende is, vind je o.a. een korte introductie tot Greenfoot op deze website (in Java, maar de principes blijven in Stride dezelfde).
- Ook het werken met de Stride-editor moet je een beetje gewoon worden: je tikt niet langer volledige opdrachten in maar gebruikt éénletterige afkortingstoetsen - en dat is zeker even wennen.
Instructies
Demonstreer het programma
Start de Greenfoot-software en open het scenario flappybat-run. (Als er een venster met een foutboodschap verschijnt, dan klik je dit gewoon dicht.)
Demonstreer het programma voor de klas: klik op Run om het op te starten (Start in de Nederlandse versie), gebruik de spatiebalk om de vleermuis niet te laten neerstorten en probeer ongeschonden voorbij de stekels te geraken. Klik op Reset (Overnieuw) om opnieuw te beginnen. Toon ook wat er gebeurt als de vleermuis de stekels raakt, de grond of het plafond.
Analyseer het programma
Laat de leerlingen analyseren wat er gebeurt aan de hand van de volgende vragen. De antwoorden dienen voldoende gedetaileerd te zijn. Overnieuw en Start het programma telkens opnieuw voor elke vraag. (Antwoorden staan telkens tussen haakjes.)
- Wat doet de vleermuis wanneer we van het toetsenbord afblijven? Observeer goed! (Ze valt recht naar beneden en als ze de grond raakt, draait ze ondersteboven.)
- Wat gebeurt er wanneer je één keer op de spatiebalk drukt? (De vleugels van de vleermuis gaan naar omlaag en ze stijgt eventjes. Daarna valt ze weer recht naar beneden.)
- En wanneer je achtereenvolgens meerdere keren drukt? (De vleermuis lijkt te flapperen, want ze valt (vleugels omhoog) en stijgt (vleugels omlaag) afwisselend.)
- In welke richting beweegt de vleermuis over de scène? En de stekels? (De vleermuis lijkt naar rechts te bewegen, maar blijft eigenlijk in het midden staan. Het stekelpaar lijkt stil te staan, maar beweegt eigenlijk van rechts naar links.)
- Hoe zie je dat de vleermuis dood is? (De afbeelding is ondersteboven gedraaid met de vleugels omhoog.)
- Wanneer sterft de vleermuis (gaat ze dood)? (Als ze de grond, het plafond of de stekels raakt.)
- Wanneer stopt het programma? (Als de vleermuis de grond raakt of als de stekels de linkerkant bereiken. Belangrijk! Het programma stopt niet onmiddellijk nadat de vleermuis sterft - de dode vleermuis valt eerst nog naar beneden.)
Uitproberen en werken met de Greenfoot-omgeving
Open het project flappybat-start (naar keuze doe je dit klassikaal of laat je de leerlingen meedoen)
- Druk op Run (of Start). Wat gebeurt er? (De vleermuis valt naar beneden)
- Druk op Restart (of Overnieuw).
- Druk nu enkele malen op Act (of Handeling). Wat gebeurt er? (Bij elke klik beweegt de vleermuis een klein beetje naar beneden)
Dit toont wat Greenfoot doet: de Run-knop werkt precies alsof je telkens opnieuw op Act zou drukken. We moeten aan de computer vertellen (= programmeren) wat hij in één zo'n Act-stap precies moet doen. (Je hoeft (mag) dus in het programma zelf geen lus te schrijven om de opdrachten te herhalen. Om de 'lus' te stoppen zal je in de act()-methode dus enkel testen of de stop-voorwaarde voldaan is, en in dat geval het programma stilleggen - zie verder).
- Dubbelklik op het rechthoekje met de naam Vleermuis aan de rechterkant van het venster. Dit opent een nieuw venster met daarin het 'programma' voor de vleermuis.
- Bij de methode act() staat er wat de vleermuis telkens opnieuw moet doen. Hier staat één opdracht val(). Deze opdracht doet de vleermuis een heel klein beetje naar beneden bewegen. Vervang deze opdracht door stijg(). Wat gebeurt er nu als je op Run klikt?
- Vervang de inhoud van act door twee opdrachten onder elkaar: eerst vallen en dan stijgen. Wat gebeurt er nu? (De vleermuis stijgt nog steeds, maar langzamer dan eerst om dat ze eerst altijd een klein beetje valt. Je verwacht misschien dat ze 'flappert', maar dit is niet zo omdat de twee afbeeldingen elkaar te snel achtereen opvolgen tijdens de act.)
- Er is ook nog een derde opdracht die de vleermuis begrijpt, en dat is sterf(). Probeer die opdracht uit.
Reageren op een toets
Een programma wordt pas leuk wanneer we de computer laten reageren op bepaalde voorwaarden - bijvoorbeeld, iets anders laten doen wanneer de spatiebalk is ingedrukt. Dit doe je met een als-dan-anders-opdracht, in het Engels: if-then-else.
- Verander de act-methode in wat hieronder staat:
if (isSpatieBalkIngedrukt()) stijg() else val()
- Tip: gebruik de i-toets om het if-gedeelte tevoorschijn te toveren, en de e-toets voor het else-gedeelte
- Gebruikt ctrl-spatie om een woord automatisch aan te vullen nadat je pas 1 of 2 letters hebt ingetikt
We vertellen hier aan de computer dat de vleermuis moet stijgen wanneer de spatiebalk is ingedrukt, en anders moet dalen. Probeer uit wat het resultaat hiervan is.
De vleermuis begrijpt nog andere voorwaarden die je bovenaan in een if-opdracht kan gebruiken. Hier is een overzicht.
Stekel
Er staan nog geen stekels in de grot. Om dit te programmeren kijken we eerst hoe de vleermuis op de wereld is gekomen:
- Dubbelklik op het rechthoekje met de naam Grot, rechts in het Greenfoot-venster.
- Onderaan zie je de volgende lijn:
addObject (new Vleermuis(), MIDDEN, HALFWEG)
Deze lijn zorgt ervoor dat er bij het opstarten van het programma een vleermuis wordt geplaatst, precies midden in de grot. Je kan nu wel raden hoe we een stekel plaatsen rechts bovenaan de grot. Voeg een lijn toe aan het programma die precies dat doet. - En plaats ook een tweede stekel rechts onderaan de grot.
De rest van het programma
De leerlingen weten nu voldoende om ook de rest van het programma af te werken. Het kan helpen om eerst de nodige stappen te bespreken vooraleer ze in het programma worden ingetikt. Eventueel kan dit ook klassikaal op bord (in het Nederlands).
Maak gebruik van de analyse die je eerder hebt gemaakt en de lijst van toegelaten opdrachten. Test het programma uit. Geef zeker het belang van testen aan. Laat de leerlingen geregeld nieuwe delen van de toegevoegde code testen. Benadruk ook het belang van opsplitsen van problemen in kleinere deelproblemen.
In de praktijk
Door de voorafgaande analyse leren de leerlingen niet alleen een probleem opdelen in verschillende delen, maar maken ze ook kennis met de verschillende controlestructuren zoals de sequentie en de selectie.
Laat de leerlingen nadenken over hoe ze hun programma opbouwen vóór ze het intikken. Laat ze voorspellen hoe de stekels of de vleermuis zullen bewegen, vóór ze op Run klikken.