ZELF COMPUTERSPELLEN BOUWEN MET DWENGO Peter Bertels en Francis Wyffels
Copyright 2013 Dwengo vzw ISBN 978-90- 819917-1- 1 D/2013/Dwengo/1 NUR 980, 257 We willen graag dat zoveel mogelijk mensen kennis kunnen maken met microcontrollers of leren programmeren met Dwengo Blocks. Daarom brengen we dit boek uit onder Creative Commons: De gebruiker mag: het werk kopiëren, verspreiden en doorgeven remixen afgeleide werken maken Onder de volgende voorwaarden: Naamsvermelding: de gebruiker dient bij het werk steeds Dwengo vzw te vermelden (maar zonder de indruk te wekken dat Dwengo vzw instemt met je werk of jouw gebruik van het werk). Niet- commercieel: de gebruiker mag het werk niet voor commerciële doeleinden gebruiken. Gelijk delen: indien de gebruiker het werk bewerkt, kan het daaruit ontstane werk uitsluitend krachtens dezelfde licentie als de onderhavige licentie of een gelijksoortige licentie worden verspreid. info@dwengo.org http://www.dwengo.org
Voorwoord In dit boekje leren we hoe computerspellen geprogrammeerd worden. Net als het eerste boekje in deze reeks, Leren programmeren met Dwengo Blocks, wordt gewerkt met software die volledig online werkt. Meer dan een computer met internet heb je dus niet nodig. Zelf computerspellen bouwen kan zowel thuis als in de klas. Dit boekje is in de eerste plaats bedoeld voor leerkrachten die in het kader van hun lessen omgaan met informatica, elektronica of techniek. Maar jongeren kunnen dit boekje ook zelfstandig ontdekken. Dat maakt hun leer- ervaring nog intenser. De industrie smeekt al jaren om mensen met een goede kennis van techniek. Dwengo vzw biedt jongeren de kans om techniek op een aangename en vooral praktische manier te ontdekken. Kan dat beter dan aan de hand van het bouwen van een computerspel? Veel succes!
arcadespelletjes In de jaren zeventig ontstond een grote gekte rondom het spelletje Pong, ontworpen door het bedrijf Atari. Voortbouwend op dat succes werden in restaurants, pretparken en cafés automaten geplaatst met daarop bekende namen als Tetris, Pac- Man en Space Invaders. Echter, door de opkomst van krachtigere spelconsoles en de computer is de spelautomaat in verval geraakt. Toch is het ook nu nog interessant stil te staan bij de spelautomaat. Meestal waren die automaten opgebouwd uit een beeldscherm, knoppen en een microcontroller om het geheel aan te sturen. Al die elementen vind je ook terug op het Dwengo- experimenteerbord. Het is dus perfect mogelijk om zelf een computerspel te bouwen met Dwengo. In dit boekje leggen we de basis voor het programmeren van spelletjes. We doen dat aan de hand van een logisch denkspel, MasterMind. Met de kennis uit dit boekje, wat handigheid en creativiteit, kan je later zo jouw eigen flipperkast bouwen!
HOE WERKT MASTERMIND? MasterMind is een logisch denk- spel waarbij je moet proberen een code te kraken. Dit spel ga jij programmeren! We gebruiken een variant van het spel waarbij de code bestaat uit drie cijfers met voor ieder cijfer tien mogelijkheiden (0, 1,, 9). In totaal zijn er dus duizend mogelijke combinaties. Aan jou om ze te raden! Raden gaat in verschillende rondes. Elke keer als je een gokje waagt, vertelt het Dwengo- bord hoe goed jouw gok was: het aantal cijfers op een juiste positie het aantal cijfers dat je juist kon raden maar niet op een juiste positie stonden Een voorbeeldje: als de code 259 is, jij gokt 215, dan krijg je als hint: 1 1. De eerste 1 vertelt dat er één cijfer exact juist is (de 2). Uit de tweede 1 leer je dat je ook één cijfer hebt geraden, maar niet op de juiste positie (de 5). Een speciaal geval treedt er op wanneer je raadt 555. Je krijgt dan 1 2 terug omdat er één cijfer juist staat en de andere twee cijfers uit jouw gok, ook voorkomen in de geheime code, maar niet op dezelfde plaats.
MASTERMIND OP HET DWENGOBORD Om het spelletje MasterMind te programmeren op het Dwengo- bord moeten we het eerst omzetten naar een algoritme. Dit is een reeks van stappen die de microcontroller na elkaar moet uitvoeren. Dit zijn de stappen van het algoritme: Tonen van een welkom berichtje Wachten totdat de startknop is ingedrukt Een geheime code kiezen Starten spel met Start! Wachten tot de gebruiker drie cijfers ingeeft Vergelijken van de ingegeven cijfers met de geheime code Weergeven van de score op het LCD- scherm De vorige drie stappen herhalen tot de code gekraakt is Tonen boodschap: Gekraakt! indien de cijfers juist zijn geraden Het spelletje MasterMind maakt dus gretig gebruik van het LCD- scherm en de druktoetsen op het Dwengo- bord.
blokschema maken en simuleren Op de website http://blocks.dwengo.org vind je een grafische programmeeromgeving voor het Dwengo- bord. Je kan er blokschema s tekenen. Via de online simulator kan je onmiddellijk zien of jouw programma correct werkt. Surf met Google Chrome naar http://blocks.dwengo.org Wie klikt op Demo krijgt een voorbeeld van een blokschema. Het begint helemaal bovenaan bij de blauwe bol. Het volgt de blauwe lijn langs alle blokjes tot het eindigt bij de groene bol. Merk op dat er twee verschillende soorten blokken zijn. Rechthoekige blokken vormen een opdracht of instructie voor de microcontroller. Bij ruitvormige blokken nemen beslissingen over hoe het programma verder loopt. Het programma kan bij de ruit verschillende kanten op. Rechts in beeld zie je een tekening van het Dwengo- bord. Via de knoppen bovenaan kan je het programma simuleren en zien hoe het werkt. Tip: met C wordt het middelste knopje bedoeld. Laat de simulatie stap- voor- stap lopen. Probeer alle knoppen van de simulator: play, pause, step en code. Waarvoor dienen ze?
WE STARTEN MET EEN RAAMWERK Eerst zetten we een raamwerk op met alle basiselementen. De ingewikkeldere stukken vullen we dan later in. Op de figuur links zie je symbolisch het raam- werk met basisblokken. Rechts kan je zien hoe je dat in Dwengo Blocks kan opbouwen. Eerst tonen we de welkomtekst, dan wachten we met het paarse blok op een knop. Dan start het programma pas echt. In de drie groene blokken stellen we de geheime code in die de gebruiker moet raden. We slaan ze op in de variabelen j1, j2 en j3. Hier kiezen we een vaste geheime code: 2, 5, 9. Dan hebben we weer een lus waarin de gebruiker telkens opnieuw mag gokken. We tellen het aantal stappen en we controleren ook telkens hoeveel cijfers van de code juist zijn. Zolang er minder dan 3 cijfers juist zijn, gaan we door. Als alles juist is, tonen we de boodschap Gekraakt!.
CIJFERS INTOETSEN MET DE KNOPJES Als je het spel test in de simulator, dan gebeurt er na het indrukken van knop C (de startknop) nog niet veel. Je kan als speler immers nog niet jouw eigen cijfers ingeven. Dat gaan we eerst toevoegen. We willen dat de speler drie cijfers kan ingeven één- na- één: eerst het honderdtal, dan het tiental en tenslotte de eenheid. Met de N- knop kan het cijfer verhoogd worden, met de S- knop wordt het cijfer verlaagd en met de C- knop wordt een cijfer vastgelegd. Vergeet niet om het cijfer naar 0 te laten springen wanneer de 9 overschreden wordt, of naar 9 als het getal onder 0 gaat! De gekozen cijfers slaan we in de hoofdlus op in de variabelen c1, c2 en c3. Die moet je eerst aanmaken. Omdat de speler drie keer een cijfer moet intoetsen, maken we hier best een aparte functie voor. We noemen ze input. De functie geeft het gekozen getal terug. Als argument geven we positie op het LCD- scherm mee waar het getal moet worden getoond.
Met de functies ispressedsw_* kan je zien of een knop is ingedrukt. Vervang het sterretje * door N, E, S, W of C voor de 5 knoppen. Bij het oproepen van een van deze functies, kijkt de microcontroller kortstondig of de knop ingedrukt is. Als mensen een knop indrukken, dan duurt dat typisch enkele honderden milliseconden. Het checken of een knop is ingedrukt duurt maar een paar milliseconden. Als je dus snel na elkaar kijkt of knop N is ingedruk, met de functie ispressed_sw_n, dan zal ze dus niet 1 keer, maar meerdere keren na elkaar antwoorden dat de knop is ingedrukt. Hier is het belangrijk dat we telkens het cijfer met 1 verhogen als de knop wordt ingedrukt. Daarom staat in het programma hiernaast een vertraging ingebouwd van 200 milliseconden met delay_ms(200). Zo kunnen we elke keer als de knop N wordt ingedrukt, apart tellen. In simulatie treedt dit probleem niet op. Maar op de echte hardware, moet je er altijd rekening mee houden. Speel met verschillende wachttijden om gevoel te krijgen met het gedrag in simulatie én op de hardware!
SCORE BEREKENEN De functie input is klaar. Je kan ze gebruiken om in de hoofdlus de drie cijfers van de gok van de speler op te slaan in g1, g2 en g3. Nu de speler deze cijfers kan raden moeten we natuurlijk ook kunnen controleren of die cijfers correct zijn. We geven de speler twee hints: 1. het aantal cijfers op een juiste positie 2. het aantal juist geraden cijfers die niet op een juiste positie staan De eerste hint is eveneens de score: is dit getal gelijk aan drie dan is de code gekraakt. Met de functie correct berekenen we de hints. Deze functie moet beschikken over de cijfers g1, g2 en g3 die de speler ingaf en de geheime code j1, j2 en j3. Voeg deze getallen toe als parameters aan de functie. Daarnaast willen we ook de twee hints bijhouden. Hiervoor maken we twee variabelen half en juist aan. Tot slot zorgen we dat de functie de score juist teruggeeft zodat het hoofdprogramma weet of de code gekraakt is.
Bij het begin van deze functie, staan de variabelen juist en half op nul. Telkens een cijfer juist is geraden gaan we de variabelen op een correcte manier verhogen. We beginnen bij het cijfer g1, het cijfer van de honderdtallen. Is de waarde van deze variabele gelijk aan het eerste cijfers van de geheime code j1 (g1 == j1) dan verhogen we de variabele juist met 1 (juist = juist + 1). Is de waarde van g1 gelijk aan j2 of j3 dan verhogen we de variabele half met 1. Implementeer dit met behulp van het selectie- blok zoals op deze figuur. Herhaal dit voor cijfers g2 en g3. Klaar!? Toon nu de hints juist en half op het scherm. En vergeet ook niet om de functie correct op te roepen in het hoofdprogramma!
EN NU HET ECHTE WERK... MASTERMIND OP HET DWENGOBORD Het blokschema van MasterMind is nu klaar. Met de play- knop kan je in de simulator zien hoe het werkt. Ons voorbeeld kan je zien op http://blocks.dwengo.org/mastermind Maar dat is nog niet alles. Met Dwengo Blocks kan je blokschema s ook onmiddellijk compileren tot een werkend programma in hex- formaat. De hex- codes kan je rechtstreeks programmeren op het Dwengo- bord. Dat gaat snel via deze drie stappen: Klik op de HEX- knop en download het hex- bestand. Sluit het Dwengo- bord en de programmer aan op de computer. Start de programmeersoftware op jouw computer. Een link naar de juiste software staat op http://www.dwengo.org/nl/hex
WILLEKEURIG OF TOCH NIET HELEMAAL? Wie het boekje gevolgd heeft, merkt dat zijn spelletje steeds dezelfde code gebruikt. Gelukkig is er een oplossing! We kunnen de microcontroller zelf een geheime code (de cijfers j1, j2 en j3) laten kiezen. De functie rand geeft een pseudo- willekeurig getal op basis van een wiskundig algoritme. Dat getal ligt tussen 0 en 32767. Omdat wij enkel getallen van 0 t.e.m. 9 willen, delen we het willekeurig getal door 10 en nemen we de rest van die deling. Dat kan met de modulo- operator (%). Als je het spel een paar keer opnieuw opstart, zal je zien dat toch altijd dezelfde reeks van geheime codes terugkeert. Dit komt doordat het wiskunde algoritme niet helemaal willekeurig werkt. Je moet het initialiseren met de functie srand (spiek in ons online voorbeeld). Ziezo, je bent nu een volleerde spelprogrammeur! Op naar het volgende computerspel. Bedenk daarbij dat bijna alles mogelijk is: the sky is the limit. Een paar voorbeelden: maak nu jouw eigen elektronische dobbelsteen in Dwengo Blocks, programmeer galgje in C of bouw een heuse flipperkast met het Dwengo I/O- bord.
Voor wie de microbe te pakken heeft In dit boekje leerde je grafisch programmeren met Dwengo Blocks. Uiteraard stopt het hier niet. Je kan nog veel verder experimenteren met microcontrollers. Dwengo vzw wil je daar graag bij helpen. Met Dwengo Blocks zie je al meteen de link tussen blokschema en de programmeertaal C. Je kan C compileren met MPLAB X. En vanuit C kan je verder ontdekken. Hiervoor kan je onze tutorials gebruiken die stap- voor- stap alle functies van het Dwengo- bord uitleggen. Je kan ze lezen en proberen op http://www.dwengo.org/nl/tutorials Voor C- programmeurs is er een kant- en- klare bibliotheek met handige functies voor het Dwengo- bord en de Dwengo- robot. Je leest er alles over op http://www.dwengo.org/nl/dwengo- library Verder vind je op onze site ook nog: Technische informatie: http://www.dwengo.org/nl/product- info Voorbeeld- projecten: http://www.dwengo.org/nl/blog Je kan ook zelf een super- mega- cool project posten op onze blog! Forum voor al jouw vragen: http://www.dwengo.org/nl/forum
Dwengo Blocks: eenvoudig en vlot. Flexibel en combineerbaar wat zeker een pluspunt is voor het onderwijs. Serge Vrancken, leerkracht WICO Campus Sint- Maria Kunnen programmeren is dé uitdaging voor de toekomst en Dwengo Blocks maken het tastbaar, makkelijk en bovenal LEUK!! Bram Faems, KlasCement Bekijk alle boeken van Dwengo op htttp://dwengo.org/nl/books