Uitleg
|
Dit filmpje is nog een oud filmpje van de Brainbox Arduino. We zullen binnenkort een nieuw (en beter) filmpje maken.
|
1- Start van het spel (P0)
A - Aftellen
Als je een vinger op GND houdt, en met de andere hand op start duwt, moet je op het LED-scherm van je Micro:bit zien aftellen van 3 naar 1. Daarna valt het scherm uit. Dit zou op zich moeten lukken. De enige blok die misschien nieuw is, kan je vinden bij invoer: Deze blok begint door zijn code te lopen als de Pin een signaal krijgt.
|
|
B - Figuur verschijnt
Na een willekeurige tijd tussen 1 en 3 seconden verschijnt er een figuur op het scherm. We zullen hier een beetje wiskunde en een blok nodig hebben die willekeurig een getal neemt. Let wel op: Door de snelheid van de Micro:bit werken we niet met seconden, maar met milliseconden (1/1000ste van een seconde).
|
|
2- Spel met 1 speler
Uiteindelijk gaan we naar een spel met 2 spelers. De code van speler 2 is heel gelijkaardig als die van speler 1. We gaan die dus later gewoon dupliceren en aanpassen.
tA - De variabel 'Wachten'
De bedoeling is dat de speler pas wint als hij slaat nadat hij de figuur gezien heeft. Als hij ervoor slaat moet dit getoond worden. We hebben dus een variabel nodig die dit regelt. Wij geven deze de naam 'wachten' met als mogelijkheden:
|
|
B - Spel maken (met een kleine bug)
De code die nu volgt is logisch. Als Speler 1 op zijn knop (P1) slaat terwijl zijn andere hand op de GND ligt, moet er een nieuwe tekening verschijnen:
Om deze code te maken zal je volgende nieuwe blokken nodig hebben:
We moeten in onze code van de 'start (P0)' de variabel 2 keer instellen. In onze nieuwe code van 'Speler 1 (P1)' moeten we er nu voor zorgen dat we met de bovenstaande blokken de speler duidelijk maken of hij gewonnen heeft of niet.
|
Als je de code hierboven bekijkt, krijgen we vaak de vraag waarom we de blok [Stel (wachten) in op (0)] niet bovenaan de code plaatsen van 'Start (P0)'. Elk plaats heeft zijn voor- en nadeel:
|
Je zal merken dat de figuur van het startsignaal nog verschijnt na de melding dat je 'te vroeg' ingedukt hebt. Je kan zelf nog eens drukken waardoor je alsnog wint. In de volgende stap lossen we dit op.
B - Spel maken (zonder een kleine bug)
Waar zit het probleem van de bug?
De code loopt gewoon verder nadat je te vroeg geduwd hebt. De code zet dus de variabel 'wachten' op 1, waardoor je kan winnen. Druk je nog eens op de knop, dan win je toch nog. Dit kunnen we enkel oplossen door een 2e variabel toe te voegen: 'Te vroeg':
We beginnen met deze variabel in te stellen bij het opstarten en als er op de startknop (P0) gedrukt wordt. Daarna moeten we bij een te vroeg indrukken van de knop zo snel mogelijk mijn programma dit laten weten door mijn variabel 'Te vroeg' in te stellen. Als laatste moet ik nu in mijn 'start(P0)'-code een als blok gebruiken om bepaalde code niet uit te voeren. Als je dit juist gedaan hebt, heb je een werkend spel voor 1 speler. |
|
2 - Hoe snel was speler 1?
Zoals het spel nu is, zal je als speler heel snel geen doel meer hebben in het spel. Laten we daarom wat competitie met jezelf toevoegen.
We laten de Micro:bit je vertellen hoe snel je nu eigenlijk wel was.
Om dit te kunnen doen, moet je wel verstaan hoe tijd werkt op een micro:bit. Bij het opstarten van een programma begint er een timer te lopen. Deze timer is tot op de microseconde nauwkeurig en blijft oneindig doorlopen, tenzij je micro:bit zonder spanning valt of iemand op de resetknop drukt.
Het enige wat we kunnen doen met die tijd is ze op een bepaald moment 'plukken' en gebruiken met de onderstaande blokken. Het verschil tussen beide blokken is de nauwkeurigheid. Voor dit project is een nauwkeurigheid van milliseconden voldoende.
We laten de Micro:bit je vertellen hoe snel je nu eigenlijk wel was.
Om dit te kunnen doen, moet je wel verstaan hoe tijd werkt op een micro:bit. Bij het opstarten van een programma begint er een timer te lopen. Deze timer is tot op de microseconde nauwkeurig en blijft oneindig doorlopen, tenzij je micro:bit zonder spanning valt of iemand op de resetknop drukt.
Het enige wat we kunnen doen met die tijd is ze op een bepaald moment 'plukken' en gebruiken met de onderstaande blokken. Het verschil tussen beide blokken is de nauwkeurigheid. Voor dit project is een nauwkeurigheid van milliseconden voldoende.
Nu we dit weten, kunnen we heel eenvoudig en heel precies de tijd berekenen voor ons project.
We zullen wel 2 nieuwe variabelen moeten aanmaken:
Met eenvoudige wiskunde en deze nieuwe blokken zou het moeten lukken de reactietijd te berekenen en op het juiste moment te laten verschijnen. Je zou in principe kunnen redeneren dat de 'win-figuur' niet meer nodig is in de code. Maar laat de tijd toch maar 1 seconde na deze blok verschijnen. Anders kunnen we in de volgende upgrade niet meer weten wie er gewonnen is.
|
|
3 - Extra speler
Zou het niet veel toffer zijn als we dit spel ook met 2 spelers kunnen spelen. We hebben nog een knop over en op ons spelbord is er plaats voor een 2e speler.
Zou het lukken om gewoon de code van speler 1 te dupliceren (rechtermuisknop op code - dupliceren), het pinnummer te veranderen en de 'toon lichtjes' aan te passen? Probeer maar eens.
Je merkt dat de beide codes door elkaar werken. We zouden dus graag hebben dat beide pinnen niets meer doen nadat er op en spelerspin is geduwd. Dit kan eenvoudig door een 5e variabel toe te voegen: Game over
Hoe lossen we dit probleem precies op: Als je op een knop drukt, dan controleer je altijd eerst of het spel nog bezig is.
|
|
Proudly powered by Weebly