Wat is een conditie eigenlijk ? Het is een test. Meestal in de vorm van een vergelijking. bv:
- is 20 groter dan 10 : ja
- is 10 groter dan 20 : neen
Als de test waar is, wordt de bijhorende code uitgevoerd, anders niet.
Een voorbeeld in geschreven taal:
Als mouseX groter is dan 10, dan wordt de achtergrond rood
Er zijn een aantal verschillende soorten tests die je kan laten uitvoeren:
- > groter dan
- < kleiner dan
- >= groter dan of gelijk aan
- <= kleiner dan of gelijk aan
- == gelijk aan
- != niet gelijk aan
Als we de sketch met het monstertje er even bij halen en even in zijn meest simpele versie voorstellen hebben we een vierkant dat naar boven beweegt :
Hoe luidt de test die wij willen uitvoeren ? In mensentaal:
Als het vierkantje het venster verlaat, langs boven, moet het van richting veranderen.
Wat weten we over de positie van het vierkant? Waar wordt die bijgehouden?
y
Wat weten we over de bovenrand van het venster ? Hoe kunnen we die aanduiden ?
0
In code kunnen we dan al deels de oplossing beschrijven:
if(y < 0){ ... keer verticale richting om ... }
Het probleem met onze code zoals ze er nu staat is dat we de richting nog “hardcoded” hebben neergezet. Dat wil zeggen dat we manueel hebben ingegeven dat y = y – 1 wordt. -1 is in dit geval de richting. Als we niet goed nadenken zouden we kunnen denken dat de oplossing is om dit te doen:
if(y < 0){ y = y + 1; }
Echter als we dit in de code integreren werkt het niet:
Als we de code regel voor regel nagaan, komen we erachter waarom het vierkant aan de bovenkant blijft stilstaan. Zo lang y niet kleiner is dan 0, voeren we y = y -1 uit. Van het moment dat y kleiner wordt als 0, voeren we y = y + 1. Echter door dit te doen, wordt y onmiddellijk weer 1, wat groter is dan 0. We komen daardoor in een voortdurende loop. Y wordt continu 0 en 1, 0 en 1,.... dat zien we niet met het blote oog.
De oplossing hiervoor is om de richting ook in een variabele op te slaan. Een variabele dient namelijk om informatie voor een langere tijd op te slaan terwijl ons programma loopt. Als we de richting in een variabele stoppen, kunnen we deze van richting veranderen als y onder 0 komt. we doen dit door
richting = -richting
op deze manier wordt ongeacht hoe snel we de richting hebben ingesteld, de richting omgekeerd.
De volledige oplossing:
kan je ervoor zorgen dat het vierkantje ook aan de onderkant van richting veranderd ?