U bent hier » http://www.goudappel.org/onderwijs/index.php

Voorbeeld Verslag Opdracht 1

Opdracht:
Op een leeg speelveld
Begin linksboven
Zoek een socket op een willekeurige plek
Opladen en langs de snelste weg terug

Voorkennis:
Het tools menu:
Stappen (M)
Draaien (TL, TR)
Events detecteren (WallAhead, RobotOnSocket, dxRobot, dyRobot, xRobot, yRobot, etc.) robot language summary
Logische beslissingen (Keuzestructuur, If)
Operatoren gebruiken (And Or Not) robot language summary
Lussen gebruiken (Wile-Wend, For-Next)
Status weergeven (Display)
Andere acties:
Reload
eventueel (Mark, Erase, Comment, Toekenning)
Subroutines toepassen
Indelen speelveld

Probleem 1 systematisch zoeken
Robot loopt aan de rechterkant een draai naar rechts en aan de linkerkant een draai naar links
als de robot naar rechts kijkt (dxRobot = 1) wanneer een muur bereikt wordt dan rechtse draai
als de robot naar links kijkt wanneer een muur bereikt wordt dan linkse draai

MAIN:

Probleem 1a systematisch zoeken
Robot loopt aan de rechterkant een draai naar rechts en aan de linkerkant een draai naar links
als de robot in kolom 10 staat (xRobot = 10) dan rechtse draai
als de robot in kolom 1 staat dan linkse draai
dit gaat alleen fout op de home plek , maar daar is yRobot 1.

MAIN2: (korter dus sneller)

Probleem 2 Na elke stap kijken of er een socket ligt
zorg dat na elke stap gecheckt wordt of er een socket ligt.

SUB Stap:

Probleem 3 kortste weg naar huis
als de robot naar rechts kijkt linksom draaien, lopen tot muur, dan ben je boven, linksom draaien lopen tot muur
als de robot links kijkt doorlopen tot muur dan ben je aan de linkerkant, rechtsom draaien lopen tot muur
Ik vermoedde een zwakke plek in het programma als dxRobot = 0 en dyRobot <>0 en dat bleek bij het testen
daarom is dyRobot <>0 en een draai toegevoegd zodat de robot zeker links-rechts georriënteerd is.
Op de terugweg hoeven we niet te zoeken naar een socket dus in plaats van Stap gebruiken we Move, dat is sneller.

de oplossing met SUB Home2 (overgenomen uit de tutorial) gaat direct naar de aangegeven positie (in dit geval 1,1)
is zeker de moeite waard (korter dus sneller) om te proberen en komt wellicht later van pas....

SUB Home:

SUB Move:

SUB Home2:

Opmerkingen en verbeteringen
als er geen socket gevonden wordt crashed het programma, maar dat valt buiten de opdracht.

Er wordt een keer dubbel gecontroleerd of de robot op een socket staat, dat is niet nodig maar het is makkelijker te bedraden.
ook wordt na sub stap nogmaals gecontroleerd of de robot op een socket staat.

werkende code:
oplossing 1 (bop)
oplossing 2 (bop)


Voorbeeld Verslag Opdracht 2

Opdracht:
Op een leeg speelveld
Begin linksboven
Zoek het speelveld af in een spiraal
Opladen bij elke socket
langs de snelste weg terug

Voorkennis:
Het tools menu:
Stappen (M)
Draaien (TL, TR)
Events detecteren (WallAhead, RobotOnSocket, dxRobot, dyRobot, xRobot, yRobot, etc.) robot language summary
Logische beslissingen (Keuzestructuur, If)
Operatoren gebruiken (And Or Not) robot language summary
Lussen gebruiken (Wile-Wend, For-Next)
Status weergeven (Display)
Andere acties:
Reload, Mark, Erase, Toekenning
eventueel (Comment)
Subroutines toepassen
Indelen speelveld
Opdracht 1

Probleem 1 spiraal
Robot loopt 9 stappen naar rechts draait naar rechts
Robot loopt 9 stappen naar onder draait naar rechts
Robot loopt 9 stappen naar links draait naar rechts
Robot loopt 8 stappen naar boven draait naar rechts
Robot loopt 8 stappen naar rechts draait naar rechts
Robot loopt 7 stappen naar onder draait naar rechts
Robot loopt 7 stappen naar links draait naar rechts
Robot loopt 6 stappen naar boven draait naar rechts
Robot loopt 6 stappen naar rechts draait naar rechts
hierin zit na de eerste regel een regelmaat die in twee lussen kan worden gestopt:de lus wordt steeds korter (variabele max)

Probleem 2 ben ik er al?
als de variabele max op 0 staat zijn we klaar
dit kan met while worden onderzocht.

Probleem 3 terug naar huis en opladen op socket (als opdracht 1)

Opmerkingen en verbeteringen
Het is jammer dat de eerste regel een uitzondering is op de regel, dat levert relatief veel extra code op.

werkende code:
oplossing opdracht 2 (bop)


Voorbeeld Verslag Opdracht 3

Opdracht:
als 1 dus:
Op een leeg speelveld
Begin linksboven
Zoek bal
zet ergens een :x = xBall: opdracht voor een random bal
ga met de bal terug naar 1,1

probeer de opdracht uit en kijk wat er gebeurt:

er komt een bal in het veld, op een willekeurige plaats.

Wat kan ik allemaal met een bal?
robot language summary vertalen:

GetBall raapt de bal op (als de robot op hetzelfde vak staat)
DropBall laat de bal vallen (op het vak waar de robot staat)
ThrowBall werpt de bal 3 vakjes vooruit (wat gebeurt er als er een muur staat?)
BallOnGround waar als de bal op de grond ligt (dus niet is opgeraapt)
xBall x-Positie van de bal
yBall y-Positie van de bal

Geen BallAhead of zo, maar; who needs it?
We weten waar de bal ligt! op (xBall, yBall)
Dat zijn de meevallers die een programmeur kan hebben, geen problemen, we hebben alles al eens eerder gedaan...

2 minuten later:

Done

gotoXY hebben we al eens gebruikt om thuis te komen (1,1)

Wat gebeurt hier eigenlijk?
in woorden:
zolang de robot niet op (x,y) staat
de robot kijkt naar links of rechts EN (de robot staat niet in de gekozen kolom) en kijkt naar het doel - ja dan vooruit - nee dan volgende
de robot kijkt naar boven of beneden EN (de robot staat niet in de gekozen rij) en kijkt naar het doel - ja dan vooruit - nee draai rechtsom
totdat de robot in de juiste rij/kolom staat