Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
phtg:fdif:karatutorial:labyrinthe [2024-06-23 19:59] – [Aufgabe 7] hof | phtg:fdif:karatutorial:labyrinthe [2024-06-27 14:20] (aktuell) – [Mehr Bedingungen] hof | ||
---|---|---|---|
Zeile 33: | Zeile 33: | ||
</ | </ | ||
++++ | ++++ | ||
+ | |||
### Aufgabe 7 | ### Aufgabe 7 | ||
- | Schwieriger wird es, wenn je nach Situation nach links statt nach rechts gewendet werden soll. Findet Kara zum Pilz? | + | Schwieriger wird es, wenn je nach Situation nach links statt nach rechts gewendet werden soll. Wie wird sich Kara mit dem Code von Aufgabe 6 bewegen? |
< | < | ||
+ | // Lösung von Aufgabe 6 - was passiert? | ||
+ | while (!kara.mushroomFront()) { | ||
+ | if (kara.treeFront()) { | ||
+ | kara.turnRight(); | ||
+ | } else { | ||
+ | kara.move(); | ||
+ | } | ||
+ | } | ||
KaraWorld.create( | KaraWorld.create( | ||
`TTTTTTTTT | `TTTTTTTTT | ||
Zeile 65: | Zeile 74: | ||
</ | </ | ||
++++ | ++++ | ||
- | |||
### Mehr Bedingungen | ### Mehr Bedingungen | ||
Damit wir Kara nicht die ganze Zeit umdrehen müssen, können wir sie auch zusätzlich fragen, ob links oder rechts von ihr ein Baum ist: | Damit wir Kara nicht die ganze Zeit umdrehen müssen, können wir sie auch zusätzlich fragen, ob links oder rechts von ihr ein Baum ist: | ||
Zeile 81: | Zeile 89: | ||
if (kara.treeLeft()) { | if (kara.treeLeft()) { | ||
kara.turnRight(); | kara.turnRight(); | ||
- | } else if (kara.treeRight()) { | ||
- | kara.turnLeft(); | ||
} else { | } else { | ||
- | // Umdrehen! | ||
- | kara.turnLeft(); | ||
kara.turnLeft(); | kara.turnLeft(); | ||
} | } | ||
} else { | } else { | ||
kara.move(); | kara.move(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ### Aufgabe 9 | ||
+ | Reicht das bereits, um aus jedem Labyrinth hinauszufinden? | ||
+ | |||
+ | < | ||
+ | KaraWorld.create( | ||
+ | `TTTTTTTTT | ||
+ | | ||
+ | | ||
+ | | ||
+ | T T TT TT | ||
+ | T T T | ||
+ | T TTTTTTT | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ++++Ideen| | ||
+ | * ... einfach mal die Hand an die Wand legen und nie loslassen! | ||
+ | ++++ | ||
+ | |||
+ | ++++Lösung| | ||
+ | <code javascript> | ||
+ | while (!kara.mushroomFront()) { | ||
+ | // Wir folgen der rechten Wand | ||
+ | if (!kara.treeRight()) { | ||
+ | kara.turnRight(); | ||
+ | kara.move(); | ||
+ | } else if (!kara.treeFront()) { | ||
+ | kara.move(); | ||
+ | } else { | ||
+ | kara.turnLeft(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
+ | ### Wie weiter? | ||
+ | Gratulation, | ||
+ | |||
+ | Aber halt! Gibt es Labyrinthe, aus denen wir mit dem Wand-Folge-Algorithmus nicht hinausfinden? | ||
+ | |||
+ | ++++Ideen| | ||
+ | * Wenn Kara mitten im Raum steht, müssen wir zuerst eine Wand findent! | ||
+ | * Wenn die gefolgte Wand eine Insel im Labyrinth bildet, so laufen wir im Kreis. | ||
+ | * Abhilfe: | ||
+ | * Wir könnten uns merken, wo wir bereits durchgelaufen sind, und allenfalls eine andere Abzweigung nehmen ([[wpde> | ||
+ | * Wir könnten Kara auch einfach eine Zufallswahl treffen lassen und hoffen, dass wir irgendwann zum Pilz finden... | ||
+ | * Mehr Ideen: [[wpde> | ||
+ | ++++ | ||
+ | ### Aufgabe 10 (Challenge) | ||
+ | |||
+ | Finde aus dem untenstehenden Labyrinth! | ||
+ | |||
+ | < | ||
+ | <script type=" | ||
+ | let game = KaraWorld.create( | ||
+ | `TTTTTTTTTTTTTTTTTT | ||
+ | | ||
+ | | ||
+ | | ||
+ | TTT TTTTTTTTTTTTTT | ||
+ | | ||
+ | | ||
+ | | ||
+ | TTT TTTTTTTTTTTT T | ||
+ | | ||
+ | | ||
+ | | ||
+ | TTT TTTTTTTTTTTT T | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | function setup() { | ||
+ | let size = game.grid.gridSize(); | ||
+ | createCanvas(size.x * 25, size.y * 25); | ||
+ | // 100ms delay, up to 200 commands | ||
+ | game.executeKara(100, | ||
+ | } | ||
+ | |||
+ | function draw() { | ||
+ | game.draw(25); | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ++++Lösung| | ||
+ | <code javascript> | ||
+ | // Wand suchen | ||
+ | while (!kara.treeFront()) { | ||
+ | kara.move(); | ||
+ | } | ||
+ | kara.turnLeft() | ||
+ | |||
+ | // Folge der rechten Wand | ||
+ | while (!kara.mushroomFront()) { | ||
+ | if (!kara.treeRight()) { | ||
+ | kara.turnRight(); | ||
+ | kara.move(); | ||
+ | } else if (!kara.treeFront()) { | ||
+ | kara.move(); | ||
+ | } else { | ||
+ | kara.turnLeft(); | ||
} | } | ||
} | } | ||
</ | </ | ||
++++ | ++++ |