Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
phtg:fdif:karatutorial:labyrinthe2 [2024-10-31 10:03] – angelegt hof | phtg:fdif:karatutorial:labyrinthe2 [2024-11-01 09:18] (aktuell) – hof | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ## Labyrinthe | + | ## Labyrinth |
- | Mit unserem Wissen über Schleifen und Verzweigungen können wir bereits aus einem einfachen | + | |
- | + | ||
- | ### Aufgabe 6 | + | |
- | Schreibe möglichst kompakten Code, der aus dem Labyrinth findet. Schau falls nötig bei [[phtg: | + | |
< | < | ||
Zeile 10: | Zeile 6: | ||
< | < | ||
- | KaraWorld.create( | ||
- | `TTTTTTTTT | ||
- | | ||
- | | ||
- | | ||
- | TTT TTT T | ||
- | | ||
- | T TTTT T | ||
- | | ||
- | | ||
- | </ | ||
- | |||
- | ++++Mögliche Lösung| | ||
- | <code javascript> | ||
while (!kara.mushroomFront()) { | while (!kara.mushroomFront()) { | ||
- | | + | if (kara.treeFront()) { |
- | kara.turnRight(); | + | |
- | } else { | + | if (kara.treeFront()) { |
- | kara.move(); | + | |
- | } | + | |
+ | } | ||
+ | } else { | ||
+ | | ||
+ | kara.turnLeft(); | ||
+ | if (kara.treeFront()) { | ||
+ | | ||
+ | | ||
+ | if (kara.treeFront()) { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
} | } | ||
- | </ | + | 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( | KaraWorld.create( | ||
`TTTTTTTTT | `TTTTTTTTT | ||
- | T> T | + | |
- | TTTTTTT T | + | TT TTTTTT |
| | ||
- | T TTTTTTT | + | TTTTTTMTT`); |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
</ | </ | ||
- | ++++Mögliche Lösung| | + | ### Erstes Laby |
- | <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 | + | <HTML>< |
- | Schreibe die Lösung zu Aufgabe 7 um, indem du die neuen Bedingungen einbaust! | + | |
- | + | ||
- | ++++Lösung| | + | |
- | <code javascript> | + | |
while (!kara.mushroomFront()) { | while (!kara.mushroomFront()) { | ||
- | | + | if (kara.treeFront()) { |
- | if (kara.treeLeft()) { | + | kara.turnLeft(); |
- | kara.turnRight(); | + | if (kara.treeFront()) { |
- | } else { | + | |
- | | + | |
- | } | + | |
- | } else { | + | |
- | kara.move(); | + | |
- | } | + | kara.turnLeft(); |
+ | if (kara.treeFront()) { | ||
+ | | ||
+ | | ||
+ | if (kara.treeFront()) { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
} | } | ||
- | </ | + | kara.move() |
- | ++++ | + | |
- | ### Aufgabe 9 | + | KaraWorld.fromOptions( |
- | Reicht das bereits, um aus jedem Labyrinth hinauszufinden? | + | `TTT TTTTT |
- | + | ||
- | < | + | |
- | KaraWorld.create( | + | |
- | `TTTTTTTTT | + | |
- | | + | |
- | | + | |
| | ||
- | T T TT TT | + | T T T TTT |
- | T T | + | T T T T |
- | | + | |
- | M T | + | T T <T T |
- | TTTTTTTTT`); | + | T |
+ | | ||
+ | keyhandler: false, | ||
+ | delay_ms: 100, | ||
+ | max_commands: | ||
+ | }); | ||
</ | </ | ||
- | ++++Ideen| | ||
- | * ... einfach mal die Hand an die Wand legen und nie loslassen! | ||
- | ++++ | ||
- | ++++Lösung| | + | ### Grösseres Laby |
- | <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=" | <script type=" | ||
+ | while (!kara.mushroomFront()) { | ||
+ | if (kara.treeFront()) { | ||
+ | | ||
+ | if (kara.treeFront()) { | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } else { | ||
+ | | ||
+ | | ||
+ | if (kara.treeFront()) { | ||
+ | | ||
+ | | ||
+ | if (kara.treeFront()) { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | kara.move() | ||
+ | |||
let game = KaraWorld.create( | let game = KaraWorld.create( | ||
`TTTTTTTTTTTTTTTTTT | `TTTTTTTTTTTTTTTTTT | ||
- | | ||
- | | ||
| | ||
TTT TTTTTTTTTTTTTT | TTT TTTTTTTTTTTTTT | ||
- | | + | |
| | ||
| | ||
Zeile 185: | Zeile 132: | ||
</ | </ | ||
- | ++++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(); | + | |
- | } | + | |
- | } | + | |
- | </ | + | |
- | ++++ | + |