Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Nächste Überarbeitung | Vorherige Überarbeitung | ||
| phtg:fdif:karatutorial:labyrinthe [2024-06-23 19:49] – angelegt hof | phtg:fdif:karatutorial:labyrinthe [2024-06-27 14:20] (aktuell) – [Mehr Bedingungen] hof | ||
|---|---|---|---|
| Zeile 27: | Zeile 27: | ||
| if (kara.treeFront()) { | if (kara.treeFront()) { | ||
| kara.turnRight(); | kara.turnRight(); | ||
| + | } else { | ||
| + | kara.move(); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | ++++ | ||
| + | |||
| + | ### Aufgabe 7 | ||
| + | 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? Findet Kara zum Pilz? Was musst du ändern, um ins Ziel zu kommen? Denk dran, dass sich Verzweigungen (`if`) und Schleifen (`while`) beliebig ineinander verschachteln lassen! | ||
| + | |||
| + | < | ||
| + | // Lösung von Aufgabe 6 - was passiert? | ||
| + | while (!kara.mushroomFront()) { | ||
| + | if (kara.treeFront()) { | ||
| + | kara.turnRight(); | ||
| + | } else { | ||
| + | kara.move(); | ||
| + | } | ||
| + | } | ||
| + | KaraWorld.create( | ||
| + | `TTTTTTTTT | ||
| + | | ||
| + | | ||
| + | | ||
| + | T TTTTTTT | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | |||
| + | ++++Mögliche Lösung| | ||
| + | <code javascript> | ||
| + | while (!kara.mushroomFront()) { | ||
| + | if (kara.treeFront()) { | ||
| + | kara.turnRight(); | ||
| + | if (kara.treeFront()) { | ||
| + | // Umdrehen, wenn die Rechtsdrehung nichts gebracht hat. | ||
| + | kara.turnLeft(); | ||
| + | kara.turnLeft(); | ||
| + | } | ||
| + | } else { | ||
| + | kara.move(); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | ++++ | ||
| + | ### 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: | ||
| + | |||
| + | * `kara.treeLeft()` trifft zu, falls links von Kara (in Laufrichtung) ein Baum steht. | ||
| + | * `kara.treeRight()` trifft zu, falls links von Kara (in Laufrichtung) ein Baum steht. | ||
| + | |||
| + | ### Aufgabe 8 | ||
| + | Schreibe die Lösung zu Aufgabe 7 um, indem du die neuen Bedingungen einbaust! | ||
| + | |||
| + | ++++Lösung| | ||
| + | <code javascript> | ||
| + | while (!kara.mushroomFront()) { | ||
| + | if (kara.treeFront()) { | ||
| + | if (kara.treeLeft()) { | ||
| + | kara.turnRight(); | ||
| + | } else { | ||
| + | kara.turnLeft(); | ||
| + | } | ||
| + | } else { | ||
| + | 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(); | ||
| } | } | ||
| } | } | ||
| </ | </ | ||
| ++++ | ++++ | ||