Entwickler-Ecke

Open Source Projekte - Labyrinthgenerator


Fiete - So 03.02.08 14:12
Titel: Labyrinthgenerator
Mit diesem Programm können einmal Labyrinthe generiert werden, desweiteren kann eine Simulation >Maus im Labyrinth< versucht werden.

Die Maus wird vor ein Labyrinth gesetzt und soll zum Ausgang laufen.
Den Weg vom Start zum Ziel wird sie mit zunehmenden Versuchen lernen.

Das Programm versucht das Lernen einer Maus zu simulieren, nicht den schnellstmöglichen Weg zum Ausgang zu finden.

Die normale Maus kann sich nur die letzte Kreuzung merken, die schlaue alle.
Die Mausintelligenz ließe sich sicher noch anders implementieren(Level, etc.).
Die Anzahl der Schritte wird festgehalten.
Nach einigen Versuchen hat die Maus den Weg gelernt und vergißt ihn auch nicht mehr.
Die Simulation des Gedächtnis wird über die Speicherung der besuchten Kreuzungen realisiert.
Läuft die Maus in eine Sackgasse dann wird der letzte Kreuzungswert um den Richtungswert vermindert. So wird in keine Sackgasse zweimal gelaufen.
Je mehr Kreuzungen das Labyrinth aufweist, desto länger dauert es, bis die Maus den kürzesten Weg gelernt hat.

Die erzeugten Labyrinthe lassen sich öffnen, speichern oder drucken.

Unter Optionen lassen sich Einstellungen wie Eingang, Ausgang, Länge, Breite, Ganghöhe, Verzögerung für die Mausgeschwindigkeit und der IQ der Maus einstellen.

Unter Labyrinth können Neu, Konstruieren, Wegsuche, Menschsuche und Maussuche aktiviert werden.

Wie wurde das Labyrinth implementiert?

Als Datenstruktur bietet sich ein Array an.
Da von jedem Feld die Wände registriert werden müssen (ähnlich wie bei Käsekästchen) reicht es nicht nur mit 1 oder 0 zu arbeiten.
Die Wände haben die Werte 1 (oben), 2 (rechts), 4(unten) und 8(links).
In jedem Feld steht die Summe der freien Wände. Es gibt also 16 Zelltypen(0 bis 15).

Zum Generieren: anfangs sind alle Wände gesetzt. Von einem Startpunkt wird zufällig eine Zelle mit dem Wert 0 gesucht und eine Wand gelöscht, dies wiederholt sich dann. Falls es keine unbenutzte Zelle in der Nähe gibt, wird zufällig eine Zelle gesucht, der schon eine Wand fehlt. So ist gewährleistet, dass alle Wände mit der Außenwand verbunden sind, es gibt keine freistehenden Wandbereiche.

Bei der Wegsuche wird der kürzeste Weg vom Start zum Ziel angezeigt.

Verirrt euch nicht!

Fiete

Moderiert von user profile iconChristian S.: Überflüssige Zeilenumbrüche entfernt


Hidden - So 03.02.08 14:27
Titel: Linien statt Punkte
Hi,

Nette Idee und nettes kleines Spielzeug :D

Eventuell die roten Punkte durch eine durchgehende Line ersetzen, das lässt sich visuell besser erfassen funde ich.

Edit: Wo ichs gerad wieder maximiere fällt mir auf, dass die roten Punkte dabei nicht refresht werden.
Ist zwar 'n bissel störend, aber dazu müsstest du denk' ich die Punkte speichern...

Edit2:Menschsuche funktioniert bei mir nicht und wenn ich das Programm während der Suche schließe, kommt zwar eine Warnung "der irre Garten wird geschlossen", aber ich muss die Suche erst abbrechen.

Edit3: :oops: Okay, Menschsuche funzt - Ich dachte das wäre sowas wie eine "vorausschaend Planende Maussuche", also eine, die nicht nur rät und sich erinnert^^
Ich tät aber gern am Ende meine Schritte sehen :P

mfG,
Daniel


Xion - So 03.02.08 14:39

schöne Sache :) muss ich mal meinem kleinen Bruder zeigen, der steht auf so n zeugs XD
Finde auch lustig, wie die Maus die Wege lernt ;)

Vorschläge:
a) Du könntest Start und Ziel farbig markieren
b) Wenn ich auf "Nochmal" drücke wenn die Maus den Weg gelernt hat, dann hat sie NICHT! den Weg nach einem Versuch gelernt.
c) die Punkte der Maus durch eine Linie zu ersetzen fände ich auch nett.
d) Zudem könntest du auch Punkte bzw. Linie beim Menschen einzeichnen lassen.
e) Lustig wäre vielleicht auch ein Modus in dem man gegen die Maus antritt, ggf. auch in mehreren Runden, da die Maus ja immer stärker wird.

@Hidden:
Die Menschensuche funzt über die Cursortasten, da musst du dann selber ran. :mrgreen:

//Edit:
f) die Maussuche abbrechen müsste in die Liste "Labyrinth", am besten statt "Maus suchen" wenn suche läuft

die "geniale Maus" ist mal brotig...3 Felder vor Ziel biegt sie ab und durchsucht das ganze restliche Labyrinth (ca.90%). eine echte Maus wäre da wohl doch schlauer denk ich mal. Die hat ja auch Nase+Augen


Fiete - So 03.02.08 15:24

Einige Vorschläge werde ich umsetzen.

Danke für die Hinweise. :wave:

Gruß
Fiete

Edit1: Wenn ein neues Labyrinth erstellt werden soll, dann können ALLE Einstellungen verändert werden.
Die Maus hat den Weg erst dann gelernt, wenn sie dreimal den kürzesten Weg erkannt hat.

Edit2: Folgende Änderungen gibt es jetzt: Start und Ziel sind markiert, Mausabbruch im Labyrinth-Menue, Menschsuche ist unsichtbar möglich, der Weg wird mit Pfeilen(Wingdings) angezeigt Farbe ist einstellbar, freie Mauern können über Rechtsclick auf Label Verzögerung angezeigt werden(war schon von Anfang an vorhanden :mrgreen: ), hat zur Konsequenz, daß die Wegsuche nicht aktiv ist, da es keinen eindeutigen Weg mehr gibt.
Die neue Version ist hochgeladen


Hidden - So 03.02.08 20:38

user profile iconXion hat folgendes geschrieben:

b) Wenn ich auf "Nochmal" drücke wenn die Maus den Weg gelernt hat, dann hat sie NICHT! den Weg nach einem Versuch gelernt.


Ich denke das Gelernte wird dann gelöscht, weil sie immer den selben weg nehmen würde :D
Bei mir funktionierts: Maus auf "genial"
1316,528,270,1316,250,264,244(min),244,244
9 Versuche, 4700 Schritte ges.

Wenn ich den Weg anzeigen lasse, vermisse ich die Länge.
Das Feature, dass es keine isolierten Mauerstücke geben kann betrachte ich als Bug, da man es nicht abschalten kann :roll:
Zerstört deinen Bearbeitungsalgorithmus, oder?^^

Warum sind einige Optionen deaktivert :?:

Moderiert von user profile iconNarses: BMP in GIF gewandelt


Xion - Mo 04.02.08 10:17

user profile iconHidden hat folgendes geschrieben:
user profile iconXion hat folgendes geschrieben:

b) Wenn ich auf "Nochmal" drücke wenn die Maus den Weg gelernt hat, dann hat sie NICHT! den Weg nach einem Versuch gelernt.


Ich denke das Gelernte wird dann gelöscht, weil sie immer den selben weg nehmen würde :D
Bei mir funktionierts: Maus auf "genial"
1316,528,270,1316,250,264,244(min),244,244
9 Versuche, 4700 Schritte ges.


Ja, das schon, nur hat sie ja den Weg nicht nach einem Versuch gelernt, wenn ich sage sie soll nochmal durchlaufen. Sondern sie hat ihn (wie in der Meldung vorher) in 9 Versuchen gelernt. Ich will ja nur, dass sie nochmal durchrennt ;)


huuuuuh - Mi 19.03.08 21:34

mich stört das man das programm während der maussuche nich schließen kann. aber ansonsten - ser gut


FinnO - Mi 19.03.08 22:01

Die Maus lernt aber scheinbar auch nicht, wenn sie so läuft :

923, 1304, 245, 245, 245 , 245, 245, 245, 245 Es kommt erst nach dem 9ten Mal die Meldung.


Hidden - Mi 19.03.08 22:37

Hi,

Anscheinend ist das einigen hier nicht klar: gelernt ist der Weg, wenn die Memory-Datei den kompletten Weg enthält -> weiteres durchlaufen keinen Sinn mehr macht! Das Programm simuliert das lernen einer Maus, die kann das nicht beim ersten Mal, sondern lernt durch Erfolg und Misserfolg.

Dass die Maus lernt sieht man daran, dass die benötigte Zeit tendenziell kürzer wird.

mfG,