BlackBoard » Design, Programmierung & Entwicklung » Programmieren » Delphi Labyrinth - Backtracking » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Labyrinth - Backtracking
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
SirSteffiMiles SirSteffiMiles ist weiblich
Neuling

images/avatars/avatar-1433.jpg

Dabei seit: 08.02.2002
Beiträge: 23

Labyrinth - Backtracking       Zum Anfang der Seite springen

Haben die Aufgabe ein LAbyrinth zu programmieren, aus dem eine Maus herausfinden soll...
Naja, da ich absolut kein Plan von gar nichts habe, hab ich schon das erste Prob beim einfachen erstellen des LAbyrinths mit einem StringGrid.
Kann mir jemand helfen??

__________________
Wer keine Angst vorm Teufel hat braucht auch keinen Gott

12.12.2003 08:34 SirSteffiMiles ist offline E-Mail an SirSteffiMiles senden Homepage von SirSteffiMiles Beiträge von SirSteffiMiles suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

am einfachsten wäre es mit Rekursion zu realisieren (wenn ich dein Begriff "backtracking" richtig verstehe... musst du denn auch die Maus progen oder solls einfach ein Labyrint sein, (nach zufallsprinzip erstellt) ?.
Dann:
Zitat:
LAbyrinths mit einem StringGrid.

Delphi ist zwar nicht so mein Ding, aber als Tipp: immer die Oberfläche(GUI) vom eigentlichen Programm trennen. Ich würde das vielleicht so realisieren:

ein zweifaches Array:

Labarray: array[1..MAX_FELDER, 1..MAX_FELDER] of boolean;

so und dann sagst du: true=wand, false=keine Wand;
ich weiß jetzt nicht ob dein Programm den Labyrinth erstellt oder du/user...
aber Labyrintzeichnen wäre dann auch kein großes problem: einfach dann für jedes "true" einen strich zeichnen (mit einer forschleife dein Array durchlaufen)
Wie du es zeichnest, bleibt dir überlassen... man kann (wenn ich mich recht an delphi erinnere) doch einfach eine Fläche zum zeichnen reservieren und bilder über bild.bla.left:=bla und bild.bla.top:=bla plazieren. Eine primitive Zeichnung wäre dann mit Punkten oder Srichen, wo dann jeder Pixel einen Wert des Arrays darstellt (sieht etwas klein aus)

PS: hatte zwar eine Woche Delphieinführung in den Projekttagen, aber die Rechner waren einfach zu neu (halbes Jahr Info als Theorie vorher, weil die Rechner net da waren Augen rollen ), man sagte uns dass das Netzwerk net stabil läuft, also mussten wir es ja austesten (ab dem zweiten Projekttag - UT-Massenspiele -Härtetest bestanden großes Grinsen )

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von CDW: 12.12.2003 18:04.

12.12.2003 18:00 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
Black Star Black Star ist männlich
Der Pate [Admin]


images/avatars/avatar-2158.jpg

Dabei seit: 11.12.2001
Beiträge: 2.282
Herkunft: /dev/stderr

      Zum Anfang der Seite springen

Ein boolean-array reicht nicht, wenn ich mir das richtig ueberlege.
Du brauchst fuer jede Zelle mindestens 4 Zustaende, besser 8. Und zwar mindestens untere Wand da/nicht da und rechte Wand da/nicht da.
Auf diese Weise laesst sich das Labyrinth beschreiben. Ein wesentlich groesseres Problem ist es ein sinnvolles Labyrinth zu generieren.

Die Sache mit der Maus ist dann in der Tat sehr einfach via Rekursion zu loesen, indem du die Maus von jeder Zelle aus in jede moegliche Richtung gehen laesst, und dann wieder und wieder, bis entweder eine sackgasse erreicht ist, oder du den Weg gefunden hast.

__________________
vescere bracis meis

12.12.2003 18:06 Black Star ist offline E-Mail an Black Star senden Homepage von Black Star Beiträge von Black Star suchen
CDW CDW ist männlich
eine Simulation


Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread

      Zum Anfang der Seite springen

@blackstar: ich meinte damit: True=Block, FALSE=kein Block
Zitat:

....................
........... .... ...
... ...............
........ ..... ....
. .. ... ........
.....................



lässt sich etwas schlecht darsellen, aber im Prinzip einfacher als 8zustände zu verwalten Augenzwinkern .
Und hier ein einfacher Wegfindealgo:

gehe_grade_aus;
wenn_abzweigung dann: Merke Stelle, gehe nach rechts
wenn_wieder_ an_der_selben_stelle_raus dann biege NICHT ab, sondern gehe weiter.
Wenn_sack_gasse_dann_drehe_um;

usw.
erinndert mich irgendwie an Nicki Augenzwinkern
12.12.2003 18:22 CDW ist offline E-Mail an CDW senden Homepage von CDW Beiträge von CDW suchen
Black Star Black Star ist männlich
Der Pate [Admin]


images/avatars/avatar-2158.jpg

Dabei seit: 11.12.2001
Beiträge: 2.282
Herkunft: /dev/stderr

      Zum Anfang der Seite springen

^^ok wenn das Labyrinth aus Bloecken oder Weg, statt aus Waenden besteht, ist das echt einfacher, aber dein Algorithmus ist ja jetzt iterativ oder?

Da coded man sich bestimmt einen bloeden und rastet 75mal aus, weil dauernd Bloedsinn rauskommt.

Ich wuerd das ganz radikal per Rekursion machen, wo bei man an die Funktion uebergibt, wo man gerade steht, wo man herkommt, und welchen Weg man bis dahin hinter sich hat (von mir aus auch als String mit Feld-indizes (nur fuer die Ausgabe des Endergebnisses))
Dann macht man ne Schleife, die die Richtungen durchlaueft und fuer den Fall, dass da ein Weg ist, ruft die Funktion sich selbst wieder auf.
Die Abbruchbedingung ist 1) Sackgasse, oder 2) Ziel. Ausserdem muss man in dem Weg-String checken, ob man da schon mal gewesen ist, weil man sonst im Kreis laeuft, und dir die Rekursion um die Ohren fliegt.

Mit der Rekursion laesst sich das bestimmt elegant in 15-20 (max 30) Zeilen loesen.
Iterativ waere man vielleicht tagelang beschaeftigt und sehr frustriert.

[EDIT]
Wobei ich zugeben muss, dass das quasi geschummelt ist.
Die Maus "teilt" sich an jeder Gabelung und "stirbt", wenn sie in einer Sackgasse ist, oder ihren alten Weg kreuzt.
Aber das ist die schnellste Methode den richtigen Weg zu finden.

__________________
vescere bracis meis

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Black Star: 12.12.2003 18:42.

12.12.2003 18:35 Black Star ist offline E-Mail an Black Star senden Homepage von Black Star Beiträge von Black Star suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Programmieren » Delphi Labyrinth - Backtracking

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH