Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Do 22.09.16 22:06 
Hallo,
eine Umsetzung von Sokoban gab es hier in der EE schon einmal, d.h., es ist nicht Neues.
In den Weihnachtskalendern war es jedes Jahr vorhanden, und wer weiß, vielleicht will der eine oder andere ja trainieren ... :wink:

Im Anhang befindet sich eine einfache Variante von Sokoban mit 200 Spielstufen.
sokoban
Ziel ist es, die Kisten mit der Spielfigur auf die Felder zu verschieben, die mit einem Kreuz markiert sind.
Dabei kann eine Kiste nur bewegt werden, wenn das unmittelbar dahinter liegende Feld frei ist. Zwei oder mehr Kisten können nicht gleichzeitig verschoben werden. Die Spielfigur wird mit den Pfeiltasten bewegt.

Während die ersten Spielstufen noch sehr einfach zu lösen sind, steigt der Schwierigkeitsgrad von Stufe zu Stufe an. Als kleiner Hinweis sei erwähnt, dass Kisten, die in Ecken verschoben werden, nicht mehr bewegt werden können und es teilweise darauf ankommt, die Felder mit den Kreuzen in der richtigen Reihenfolge zu belegen. Ist die jeweilige Aufgabe nicht mehr lösbar, wird durch Zurücksetzen die Ausgangssituation wiederhergestellt.

Viel Spaß
Mathematiker

Edit 1/2: Fehler in Demo korrigiert

Nachtrag: Das ZIP-File sokoban_mit_aufzeichnung enthält eine Variante, bei der während des Spielens die Züge aufgezeichnet werden. (siehe auch weiter unten)

Edit 1: Spielstufen ergänzt, neue Demonstrationen und "Zug zurücknehmen"-Schalter
Einloggen, um Attachments anzusehen!
_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein


Zuletzt bearbeitet von Mathematiker am Fr 30.09.16 19:52, insgesamt 4-mal bearbeitet

Für diesen Beitrag haben gedankt: Delphi-Laie, Fiete, Ralf Jansen
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 23.09.16 00:11 
Kistenschieben und Kipplabyrinth sind in jedem Deiner Weihnachts- oder vielleicht besser Adventskalender meine Lieblingsspiele.
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 24.09.16 12:03 
Schön, daß die Quelltexte dabeiliegen, danke dafür! Das hat meine Neugier geweckt.

Mit geringfügigem Änderungsaufwand, der sich nach meiner ersten Beobachtung nicht auf das Compilat auswirkt, läßt sich das Projekt auch noch mit Delphi 2 compilieren. Das verringert die Größe der Exe-Datei auf "339 KB (347.136 Bytes)" (Ergänzung: Also eine Größenreduktion um fast 40%!). Ich weiß schon, warum mir bei den Klagen über die erheblichen Compilatsgrößen (von der hier noch keine Rede sein kann) immer als erstes die Wahl einer möglichst geringen / niedrigen Delphi-Version einfällt. Ergänzung: Das Problem rührt schon seit den Turbo-Pascal-Zeiten her, auch dessen Compilate wurden immer fetter und redundanter.

Eine Frage habe ich aber noch, Mathematiker: Mit welchem Zaubertrick erreichst Du, daß man beim Einladen im Quelltext des Projektes landet und eben nicht sofort im Quelltext der Unit?
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 24.09.16 13:37 
Hallo,
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Eine Frage habe ich aber noch, Mathematiker: Mit welchem Zaubertrick erreichst Du, daß man beim Einladen im Quelltext des Projektes landet und eben nicht sofort im Quelltext der Unit?

Keine Ahnung. Das passiert bei mir manchmal, warum weiß ich nicht. Irgendwie ist das komisch.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: Delphi-Laie
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 24.09.16 15:20 
Das ließ meinem Forscherdrang natürlich keine Ruhe....

Die Lösung scheint einfach zu sein: Das Formular muß nur wieder den Namen Form1 bekommen (inkl. entsprechender Anpassungen auch in der Projektdatei: "Application.CreateForm(TForm1, Form1)"), und schon öffnet das Projekt wunschgemäß (?) bei diesem Formular und seiner entsprechenden Unit (die nicht notwendigerweise auch zu "Unit1" zurückbenannt werden muß).

Ob das ein Delphi-Fehler ist? Oder ein sog. "Feature"? (Letzteres ist bekanntermaßen Winzigweichs Standardausrede).
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 24.09.16 16:36 
Und gleich noch etwas: Bis zur Spielstufe 118 kann man sich die Lösung demonstrieren lassen (entsprechende Bedienelemente sind aktiv). Bei der 118. Spielstufe bleibt diese Demonstration allerdings auf halbem Wege stehen ("hängen").

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 24.09.16 17:02 
Hallo,
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Bei der 118. Spielstufe bleibt diese Demonstration allerdings auf halbem Wege stehen ("hängen").

Dank für den Hinweis.
Beim Kontrollieren habe ich festgestellt, dass der Lösungsstring in der Listbox abgeschnitten wurde.
Daher musste ich zu meiner Originalvariante zurückkehren und die zwei Datenlisten in die Ressource packen. Jetzt geht es, hoffe ich.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: Delphi-Laie
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 24.09.16 17:08 
Und schon "flutscht" die Demonstration sogar bis zur 175. Spielstufe!
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 24.09.16 17:44 
Hallo,
im Moment werden nur die ersten 175 Stufen der 203 demonstriert.
Ich gebe zu, dass ich einfach zu faul :cry: war, auch noch die letzten Spielstufen so oft zu spielen, bis eine einigermaßen vorzeigbare Demonstration möglich war.

Vielleicht möchte ja der eine oder andere aus der EE helfen.
Markiert ihr in der Version sokoban_mit_aufzeichnung (1.Post) vor dem Spielen einer Stufe das Feld "Aufzeichnen", so wird im Programmverzeichnis beim erfolgreichen Lösen der Spielstufe eine Datei verlauf.xxx abgelegt. Diese enthält die Lösung.
Solltet ihr tatsächlich so viel Zeit haben, eine der Stufen 176 bis 203 zu spielen, so wäre es nett, wenn ihr die Dateien verlauf.xxx an mich per PN senden würdet.
Den erfolgreichsten Spieler werde ich natürlich würdigen. :zustimm:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 24.09.16 18:56 
Jetzt sag bloß noch, daß die Lösungen aufgrund Deines Spielfleißes und Lösungsspürsinnes entstand?! Es liest sich so. Programmieren tust Du dann noch "nebenbei" - oder bist Du ein Mensch ohne Schlafbedürfnis? ;-) Oder hat Sachsen deutlich mehr Stunden pro Tag? :?:

Und die Spielfelder - woher stammen die? Etwa auch noch ausgedacht? Das wäre umwerfend.

Bisher vermutete ich, daß Du sowohl die Aufgaben als auch deren Lösung von "irgendwelchen" Vorlagen - woher auch immer - fleißig übernahmst.
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 24.09.16 21:44 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht möchte ja der eine oder andere aus der EE helfen.


Gern. Testspieler und Testesser sind doch so ungemein angenehme Aufgaben.

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Solltet ihr tatsächlich so viel Zeit haben, eine der Stufen 176 bis 203 zu spielen


Nun, Nr. 177 ist nach meinem Empfinden unlösbar, denn dort befindet sich (oben links der Mitte) eine Kiste in einer Ecke. Da die Kisten nicht gezogen, sondern nur verschoben werden können, kann sie aus dieser Ecke m.E. nimmer befreit / heraugeholt, demnach auch nie auf eine Placierstelle verschoben werden.

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: So 25.09.16 08:09 
Hallo,
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Nun, Nr. 177 ist nach meinem Empfinden unlösbar, denn dort befindet sich (oben links der Mitte) eine Kiste in einer Ecke.

Oops, da ist wohl ein Fehler drin. :autsch:
Werde ich wohl ändern müssen.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 27.09.16 22:25 
Wie schon per PN geschrieben, durch "Rückwärtsspielen", indem man die Kisten von ihren Zielplätzen wegzieht, sind beliebige und ausnahmslos lösbare Ausgangskonstellationen kreier-/generierbar.

Noch zwei Dinge fände ich ganz lässig:

1. Eine "Undo"-Taste wenistens für den letzten Zug. Versehentliches und vor allem "unheilbares" Verschieben ist, sofern man kurz vor dem Ziele ist, zum Haareraufen.
2. Wenn die Kisten auf einem Stell-/Zielplatz sich befinden, daß dann das darunterliegende Muster dezent durchschimmert, damit man eben diese wichtige Information trotzdem hat.

Nur als vorsichtige Anregungen....

Für diesen Beitrag haben gedankt: Mathematiker
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1321
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 28.09.16 10:29 
Herauszufinden ob ein Level spielbar ist, oder nicht, lässt sich doch auch durch probieren herausfinden. Also ich mein jetzt programmiertes probieren. Wir haben sowas im Studium mal in Prolog gemacht. Aber mit Delphi geht das auch. So kann man auch den optimalen Lösungsweg finden... und dann als Lösung mitliefern.

Um Ressourcen mit ins Programm einbetten zu können habe ich mir ne Klasse geschrieben mit der ich beliebige Daten komprimiert in ein const array schreiben kann das in einer eigenen Unit gespeichert wird. Ich binde die Unit dann mit ein und entpacke einfach die Daten aus der Konstante wenn ich sie brauche.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mi 28.09.16 13:34 
user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
Herauszufinden ob ein Level spielbar ist, oder nicht, lässt sich doch auch durch probieren herausfinden. Also ich mein jetzt programmiertes probieren.


Oder, ohne Computer, allgemeiner durch systematisches Probieren (Backtracking), nicht wahr? Ist allerdings ohne Computer eine fehleranfällige Qual.
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 30.09.16 19:55 
Hallo,
Dank der großen Hilfe von user profile iconDelphi-Laie enthält jetzt die Variante "mit Aufzeichnung" fünf neue Spielstufen, für die eine Demonstration möglich ist.
user profile iconDelphi-Laie hat 5 Stufen gelöst, die ich jetzt als Nr. 176 bis 180 eingeordnet habe.

Die fehlerhafte Spielstufe ist korrigiert und jetzt die Nr.203.
Außerdem habe ich einen Schalter eingebaut, mit dem man den letzten Zug zurücknehmen kann.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: Delphi-Laie, ub60
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 01.10.16 16:39 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Außerdem habe ich einen Schalter eingebaut, mit dem man den letzten Zug zurücknehmen kann.


"Lässig", den habe ich mir schon lang gewünscht.

Es geht nicht darum, sich die Lösung per "Backtracking" zu erschummeln, auch wenn sich eine solche Funktion dafür ein wenig mißbrauchen läßt. Dafür ist ein Zug zurück auch etwas zu spartanisch. Vielmehr geht es darum, daß eine kleine Unaufmerksamkeit, ein kleines Versehen nicht gleich mit der "Maximalstrafe" vergolten wird.