Voorbeeld programma's
In de volgende programma's krijg je een idee hoe de basisinstructies
en programmeerstructuren tot interessant gedrag van de robot leiden. Probeer
te begrijpen wat er in het programma staat, en waarom het werkt. Deze voorbeelden
zijn ook in het boek te vinden met een uitgebreidere uitleg.
Probeer de programma's ook gewoon uit. Je kunt de ondestaande
code kopieëren en in het scriptvenster van RoboMind plakken. Open van
te voren ook de juiste kaart die staat aangegeven bij eslk voorbeeld.
Voorbeeld 1 : Je naam schrijven
Doordat de robot kan verven heb
je de mogelijkheid simpele tekeningen te programmeren. Met de opdrachten verfWit() en stopVerven() kan
je de robot zijn kwast op de grond laten zetten of juist niet.
Als je de robot vervolgens laat rijden, zal er een streep op de
grond achterblijven. Op deze manier kan je bijvoorbeeld de letter
'A' tekenen.
In de kaart openruimte.map heb je genoeg
ruimte voor een kunstwerk. Probeer de afstandsbediening (menu:
Uitvoeren > Afstandsbediening) eens
uit om de robot te laten schilderen.
Zie ook: basic instructions: verven, bewegen |
|
# Schrijf de letter 'A'
verfWit()
vooruit(2)
rechts()
vooruit(1)
rechts()
vooruit(2)
achteruit(1)
rechts()
vooruit(1)
stopVerven()
Voorbeeld 2 : Vind de stip
In de kaart findSpot1.map die standaard
meegeleverd is met RoboMind zit er ergens in de muur links een nis.
In deze nis vind je een witte stip. Stel dat je van te voren niet
weet waar deze witte stip zich precies bevind, hoe moet de robot
deze dan vinden als hij ergens langs de muur begint? Natuurlijk kan
je van te voren zelf het aantal hokjes uittellen, maar er is een
slimmere manier.
Laat de robot telkens één stapje
vooruit zetten en laat hem controleren of hij nu een witte stip ziet.
Als hij hem ziet, dan moet hij erop gaan staan en dan is hij klaar.
Anders doet hij nog een stapje vooruit en controleert opnieuw, net
zo lang tot hij hem heeft gevonden.
Zie ook: basisintructies:bewegen, zien, programmeerstructuren: herhalingen, als-structuren, eind
|
|
herhaal(){
als(linksIsWit()){
# Je staat naast de witte stip links
links()
vooruit(1)
einde
}
anders{
# Je hebt de stip nog niet gevonden.
# Ga een stap verder.
vooruit(1)
}
}
Een andere aanpak vind je in het volgende script. Hier gaat de robot net zo lang vooruit, totdat hij de muur links niet meer ziet. Dit moet de hoek zijn waar we de stip is. Dan draait de robot en gaat vooruit zodat hij op de stip beland.
herhaalZolang(linksIsObstakel()){
vooruit(1)
}
links()
vooruit(1)
Voorbeeld 3 : Lijnvolger
De standaard kaart die wordt geopend
in RoboMind is default.map. Hierin bevind zich een witte
verfstreep die een spoor vormt door de omgeving. Hoe zou je de robot
dit spoor kunnen laten volgen? De oplossing lijkt wel wat op het
voorgaande voorbeeld. Nadat de robot naar het begin van de lijn gereden
is, bepaalt de robot per stapje wat hij moet doen.
Zie ook: basic instructions:bewegen, zien, programming structures: herhalingen, procedures, als-structuren, end |
|
# Ga naar het begin
rechts()
vooruit(8)
# Start de vervolging
herhaal()
{
als(voorIsWit()){
vooruit(1)
}
anders als(rechtsIsWit()){
rechts()
}
anders als(linksIsWit()){
links()
}
anders als(voorIsVrij()){
end
}
}
Een andere aanpak is door gebruik te maken van een recursieve procedure.
In het volgende script zie dat er een procedure volg() is gedefinieerd. Deze wordt een keer 'van buitenaf' aangeroepen (#Start de vervolging).
In de procedure zelf zie je dat volg() zichzelf aanroept, nadat er een stap in de juiste richting is gezet. Hierdoor krijg je een hele reeks aanroepen volg(...volg(...volg(...)...)...) die telkens de juiste stap zet op het moment dat de procedure wordt uitgevoerd. Dit soort cyclische definities noemt men recusief. Het is waarschijnlijk wat vreemd wanneer je dit voor de eerste keer ziet. Maak je geen zorgen. Speel ermee, voor het programma langzaam uit, en het wordt duidelijker.
# Ga naar het begin
rechts()
vooruit(8)
# Start de vervolging
volg()
# Recursieve definitie
procedure volg(){
als(voorIsWit()){
vooruit(1)
volg()
}
anders als(rightIsWhite()){
rechts()
volg()
}
anders als(linksIsWit()){
links()
volg()
}
anders als(voorIsVrij()){
# Spring uit deze aanroep,
# en daardoor uit alle
# voorgaande aanroepen
retourneer
}
}
Voorbeeld 4 : Een doolhof ontrafelen
Hoe ontrafel je een willekeurig
doolhof? Het blijkt dat je door simpelweg altijd de linker of de
rechter muur te volgen ieder oplosbaar doolhof doorkomt. Hieronder
vind je het programma waarmee je bijvoorbeeld de kaart maze1.map kunt doorkruisen.
Zie ook: basic instructions:bewegen, zien,
programming structures: herhalingen, als-structuren, end |
|
herhaal(){
als(rechtsIsObstakel()){
als(voorIsVrij()){
vooruit(1)
}
anders{
links()
}
}
anders{
rechts()
vooruit(1)
}
als(voorIsBaken()){
pakOp()
end
}
}
|