Der Hintergrund
Mein Sohn Leonhard (4 Jahre) liebt Labyrinthe. Ich weiß nicht, woher er Labyrinthe kennt, aber er malt sie und weiß recht gut, wie sie funktionieren:
Vor kurzem fing er an, ein Spiel aus seinen Gemälden zu machen. Das sind seine Regeln:
- ein schwarzes Quadrat kennzeichnet den Startpunkt.
- Ein Haken kennzeichnet den Ausgang des Labyrinths (dort werden Sie herausgezogen).
- Sie können Kronen sammeln.
- Sie können Goldnuggets (die runden Dinge) sammeln.
- Sie können einen Weg vor und zurück gehen, aber nicht mehr.
- Pfeile können Sie zum Ausgang führen. (Wenn er ein Labyrinth malt, das ich lösen soll, sind sie oft irreführend.)
Kommentierte Version:
- blau: Startpunkt
- Orange: Kronen
- gelb: Bereich mit Goldnuggets
- grün: Haken (Ausgang)
- pink: Pfeile (meist irreführend)
Die Aufgabe
Vielleicht wissen Sie, dass Kinder im Alter von 4 Jahren anfangen, Schweinefleisch zu erzählen, und manchmal befolgt er nicht seine eigenen Regeln, besonders wenn er feststellt, dass er das Ende des Labyrinths nicht mehr erreichen kann.
Hier kommen Sie ins Spiel: Da ich sowieso nach Spielen für Kinder suche , verwandeln Sie seine Idee in ein Spiel, in dem Betrug nicht möglich ist.
Nun, wir brauchen noch einige Definitionen, die ich sagen würde:
- Das Spielfeld ist ein
n
*m
Rechteck aus gleich großen Quadraten. - Ein Quadrat kann 0 bis 4 Wände haben, eine auf jeder Seite.
- Eine Krone ist 50 Punkte wert.
- Ein Goldnugget ist 20 Punkte wert.
- Wenn Sie auf ein bereits begangenes Feld gehen, wird 1 Punkt abgezogen.
- Die Quadrate sind so markiert, dass angegeben wird, wie oft der Spieler darauf gegangen ist (0, 1 oder 2 Mal).
- Der Spieler kann in 4 Richtungen gehen, außer wenn es eine Wand gibt.
- Eingabegerät kann alles sein. Bitte beachten Sie die Tastaturunterstützung.
- Das Labyrinth muss lösbar sein. Das heißt, es muss möglich sein, den Haken vom Startpunkt aus zu erreichen, und es müssen alle Wertsachen gesammelt werden können (auch wenn dies nicht zu einer höchstmöglichen Punktzahl führt).
- Wenn der Spieler stecken bleibt, endet das Spiel.
- Der Spieler darf nicht sterben, indem er vom Brett fällt. Sie können eine Wand um das gesamte Labyrinth legen oder Kanten umwickeln, was immer Sie möchten.
- Das Programm verwendet ein Wortargument (0-65535) als Eingabe. Dies ist der Keim für den Zufallszahlengenerator. Wenn Sie das Programm mit demselben Startwert erneut aufrufen, erhalten Sie dasselbe Labyrinth.
Bonus:
- Berechnen Sie die maximalen Punkte, die gesammelt werden können. Bedenken Sie, dass es aufgrund von -1 Punkten möglicherweise besser ist, nicht alle Gegenstände zu sammeln.
- Zeige die beste Lösung (kürzester Weg, um maximale Punkte zu bekommen)
Die Regeln
Dies ist ein Beliebtheitswettbewerb, da ich in der Lage sein möchte, den Code zu lesen und zu verstehen und mich vielleicht an neue Ideen meines Sohnes anzupassen. Tut mir leid, Codegolfer, vielleicht möchten Sie eine Kopie dieser Frage mit Regeln erstellen, die besser zum Golfen geeignet sind, z. B. eine Konsolenversion mit allen definierten Zeichen.
Das beliebteste Spiel am 3. Mai wird als Antwort akzeptiert. Und warum nicht in einem App Store veröffentlichen?
quelle
Antworten:
JavaScript
In Arbeit. Leider ist das Labyrinth nicht immer lösbar - das Limit für den Vor- und Rücklauf ist die eigentliche Hürde.
Edit 1 Cosmetic
Edit 2 Besseres Gameplay, aber das große Problem ist immer noch da
quelle
Java
Ich habe mich nie über GolfScript oder CJam beschwert, aber hier ist trotzdem eine Java-Antwort für Sie. Dies war eine wirklich erfreuliche Herausforderung. ;)
Der Prozess der Erstellung des eigentlichen Labyrinths nutzt die Tiefensuchalgorithmus verwendet , jedoch mit einem iterativen Ansatz. So funktioniert das.
Wir beginnen mit einem 2D-Array von
int
Werten, wobei jedes Element ein -1 ist. Ein zufälliges Element mit geraden Indizes wird ausgewählt und sein Wert wird zu 0:Dann tritt das Programm in eine Schleife ein und prüft auf verfügbare Zellen, bis es einen Zustand erreicht, in dem keine verfügbaren Zellen mehr vorhanden sind. Dies kann mehrmals vorkommen und ist der Zeitpunkt, an dem das Zurückverfolgen beginnt. Zu diesem Zeitpunkt werden alle Nullen, auf die es stößt, zu Einsen. Auch in dieser Zeit wird festgelegt, ob an dieser Stelle ein Ausgang platziert werden soll. Am Ende könnte das Array also so aussehen:
Wenn an bestimmten Stellen im Array eine vorgegebene Anzahl von Einsen oder Nullen vorliegt, wird die Schleife beendet. Mit dem Array wird dann das resultierende Labyrinth gezeichnet:
Es ist leicht zu erkennen, dass die -1s im Array Wände darstellen und die 0s und 1s Korridore sind. Gegenstände werden zufällig im Labyrinth verteilt. Die rote Ellipse ist der "Spieler", den Sie steuern.
Das Labyrinth ist zur Vereinfachung in ein Bildlauffenster eingebettet. Wenn die Größe des Rahmens die maximale Größe überschreitet, können Sie einen Bildlauf durchführen, um den Rest des Labyrinths anzuzeigen.
Ich würde sagen, das einzige Problem dabei ist, wie der Spielende-Check durchgeführt wird. Ich dachte über mehrere Möglichkeiten nach, um das zu tun, aber schließlich habe ich alles hart programmiert. Ich bin offen für Vorschläge, wie es gemacht werden kann.
quelle
MazeMaker.java:168: error: cannot find symbol printArray(); ^ symbol: method printArray() location: class MazeMaker
printArray
, mit der ich das Array ausgegeben habe, habe es aber gelöscht und vergessen, den Methodenaufruf zu entfernen.Python
Mir ist klar, dass ich zu spät zur Party komme, aber hier ist meine Einstellung zu dieser Herausforderung. Ich ging textbasiert vor, da ich noch nicht dazu gekommen bin, Pygame zu lernen. Es ist Python 3. Ändern Sie die Eingabe in raw_input und es sollte auch in python2 funktionieren.
Der Haken (Ausgang) wird durch "J" dargestellt. "W" ist Kronen (50). "G" ist Goldnuggets (20). Der Spieler ist "O". Ich habe mit der Verwendung von "P" für den Player experimentiert, aber ich fand "O" leichter zu identifizieren.
Ich habe die erste Labyrinthgeneration mit Standardtiefe verwendet und dann Gold, Kronen, Haken und die aktuelle Spielerposition hinzugefügt. Ich habe die Kriterien, nach denen alle Schätze erhältlich sind, nicht umgesetzt.
quelle