5.3 (optional): Debugger nutzen in einem irregulären Labyrinth
Contents
5.3 (optional): Debugger nutzen in einem irregulären Labyrinth#
Ziel des Tasks#
Einführen in die Arbeit mit einem Debugger und dabei die unterliegende Datenstruktur aufdecken.
Aufgabe 3: Debuggen eines irregulären Labyrinths#
Im vorherigen Abschnitt gehorchte das Labyrinth den Gesetzen der Geometrie. In diesem Abschnitt wird diese Beschränkung gelockert. Dadurch liegen die MazeCells nicht mehr in einem schönen rechteckigen Raster, in dem die Bewegungsrichtungen den natürlichen Himmelsrichtungen entsprechen, sondern können auch anders angeordnet sein.
Die zweite Hälfte von main enthält einen Code, der so ein verwinkeltes Labyrinth erzeugt, das mit der Konstante kYourName
personalisiert ist. Wie zuvor muss eine Abfolge von Schritten gefunden werden, mit denen die drei Gegenstände aufgesammelt werden.
Die Vorgehensweise ist ähnlich wie in der vorherigen Aufgabe: über einen Haltepunkt soll im Debug-Modus das Labyrinth erkundet werden.
Anders als im vorigen Abschnitt hilft jedoch nicht mehr die Intuition zur Geometrie des Labyrinths. Nehmen wir zum Beispiel an, dass vom Startpunkt aus nach Norden gegangen wurde. In der erreichten Zelle ist es aber durchaus möglich, dass man sich nur nach Osten oder nach Westen bewegen kann. Eine dieser Richtungen wird einen wieder an den Ausgangspunkt zurückbringen, aber es ist nicht klar welche.
Hier kommen die Speicheradressen ins Spiel: Intern ist jedes Objekt in C++ mit einer Speicheradresse verknüpft. Darüber können Objekte und die Cells identifiziert werden. Um das Labyrinth sinnvoll zu erkunden, sollte diese ID/Adresse mitgeschrieben werden in einem Kreis. Beim Erkunden sollten Pfeile zwischen den Kreisen hinzu, die die Richtung angeben, in die sie zeigen. Dies braucht etwas Zeit und Geduld, aber mit ein wenig Mühe sollte so das gesamte Labyrinth erfasst werden können.
Grundlegende Struktur#
Anweisungen
Setzen eines Haltepunkt an der angegebenen Zeile in
main
und ausführen des Programm im Debug-Modus.Zeichnen des verwinkelten Labyrinths auf einem Blatt Papier.
Finden einer Escape-Sequenz und ändern der Konstante
kPathOutOfTwistyMaze
am Anfang vonmain.cpp
.Testen des Pfads (mit ausgeschaltetem Debugger) über aufrufen der Funktion
isPathToFreedom
.
Tipp - hier öffnen
Es ist nicht garantiert, dass die Speicheradressen von Objekten in allen Programmläufen gleich sind.
Wenn du einer Verbindung von einer MazeCell zu einer anderen folgst, ist garantiert, dass es immer eine Verbindung von der zweiten MazeCell zurück zur ersten gibt, auch wenn die Richtung dieser Verbindungen völlig willkürlich sein kann.
Die Liebe zum Detail ist hier das A und O - verschiedene MazeCell-Objekte haben immer unterschiedliche Adressen, die sich aber sehr ähnlich sein können. Achte darauf, dass du beim Zeichnen deines Diagramms des Labyrinths keine doppelten Kopien derselben MazeCell einfügst.
Das Labyrinth, das du erkundest, kann Schleifen enthalten oder Fälle, in denen es mehrere unterschiedliche Wege zwischen verschiedenen Orten gibt. Behalte dies bei deiner Erkundung im Hinterkopf, sonst könntest du dich im Kreis drehen!
Denke daran, dass du nicht unbedingt das ganze Labyrinth erkunden musst. Du musst nur genug davon erforschen, um die drei Gegenstände zu finden und einen Weg zu finden, der sie alle aufnimmt.
Referenzen#
Dies Task ist abgewandelt von einem Task des Stanford-Kurses 106B/X zur Programmierung in C++.