Solution format
From Sokoban Wiki
Contents |
Abspeicherung der Lösung eines Sokobanlevels
Im Sokobanspiel ist es bei komfortablen Programmen möglich, eine gefundene Lösung auch abzuspeichern und diese zu einem späteren Zeitpunkt erneut abzuspielen. Da dient vor allem als Nachweis der Lösbarkeit eines Levels, aber natürlich auch als Nachweis einer besonders guten Lösung.
Im Allgemeinen werden in einer Lösung die Schritte des Sokobanmannes dokumentiert, die er von seinem Ausgangspunkt bei Levelstart bis zur endgültigen Lösung, wenn alle Kisten auf den Zielfeldern stehen, zurücklegt.
Als Standard-Format für Sokobanlösungen hat sich das sogenannte LURD-Format durchgesetzt. In diesem Format werden die Schritte unverschlüsselt, also im Klartext, aufgezeichnet. Jeder Schritt wird als ein neues Zeichen abgespeichert und entspricht der Richtung, in die sich der Sokobanmann bewegt. Es werden zunächst diese vier Zeichen verwendet:
- "l" für links,
- "u" für hoch,
- "r" für rechts und
- "d" für runter.
Wird bei einem Schritt gleichzeitig eine Kiste bewegt, so werden die Schritte als Großbuchstaben dargestellt: L, U, R, D.
Primary values
Moves
Moves sind alle Schritte des Sokobanmannes, vom Beginn eines Levels bis zur endgültigen Lösung, bei der alle Kisten auf den Zielfeldern stehen. Dabei werden alle einfachen Schritte und alle Schritte, bei denen zugleich eine Kiste bewegt wird, gleichsam gezählt.
Pushes
Pushes sind alle Schritte des Sokobanmannes, bei denen eine Kiste bewegt wird.
Secondary values
BoxLines
Eine BoxLine bezeichnet die Bewegung, in der eine Kiste ununterbrochen in einer Linie geschoben wird. Sie beginnt mit dem ersten Push und endet entweder vor einem Move oder vor dem Push einer anderen Kiste.
eine Kiste wird ununterbrochen geschoben (Linie) -> KLAR ZÄHLBAR!
BoxChanges
Jede neue Zuwendung zu einer Kiste wird als BoxChange bezeichnet. In der Phase zwischen zwei BoxChanges wird also immer nur eine Kiste bewegt. Es bezeichnet also aneinander gereihte BoxLines einer Kiste, auch mit einfachen Moves zwischen den BoxLines, mit denen sich der Sokobanmann eine neue Position verschafft.
Achtung Programmierer! Schon der erste Push innerhalb einer Lösung, also die erste Zuwendung zu einer Kiste, gilt als BoxChange!
mehrere BoxLines EINER Kiste hintereinander, bevor eine andere angefasst wird (auch Moves dazwischen), also z.B. um die Ecke rum, auch mit Umwegen des Players -> Konzentration auf die BOX
PushingSessions
PushingSessions sind - genau betrachtet - aneinander gereihte BoxLines, die nicht durch einfache Schritte unterbrochen sind. Eine PushingSession ist also beendet, sobald ein einfacher Move folgt, bzw. am Ende einer Lösung.
Wechsel von PUSH in move, also weniger, wenn zwischen BoxLines unterschiedlicher Kisten keine Moves sind (eigentlich also auch nur BoxLines, die zusammengezählt werden, wenn eine weiter Kiste gleich anschließend geschoben wird (ohne Moves dazwischen) (also relativ unwichtig) -> Konzentration auf die PUSHES (ununterbrochen)
Bewertung der Sekundärwerte einer Lösung
Die Gewichtung bei der Bewertung der Sekundärwerte einer Lösung gestaltet sich entsprechend der üblichen Reihenfolge, also wie folgt:
BoxLines >= BoxChanges >= PushingSessions
Jede Verringerung der Boxlines ist höher zu bewerten als jede Veränderung der nachfolgenden Werte, jede Verringerung der Boxchanges wiederum höher als die der PushingSessions.
Grundlage dieser Festlegung ist der physikalische Hintergrund in der Realität.
Berechnung der Sekundärwerte einer Lösung
wenn der aktuelle Schritt ein Push war
{
- wenn der vorige und der aktuelle Schritt ungleich sind
- ( voriger Schritt entweder kein Push oder in andere Richtung )
{- BoxLines = BoxLines + 1;
- wenn aktuelle Spielerposition != mit voriger Position der aktuell verschobenen Kiste
- ( kein Kistenwechsel! )
{- BoxChanges = BoxChanges + 1;
- }
- wenn der vorige Schritt kein Push war
{- PushingSessions = PushingSessions + 1;
- }
- }
}