Das Logelium besteht aus einer Ansammlung von Programmen, Skripten und grafischen Elementen, welche mehr oder weniger schlau miteinander wirken. Diese Modularisierung soll zum einen redundante Funktionen vermeiden zum anderen den kritischen algorithmischen Kern, der die Lösungen berechnet, so klein wie möglich halten. Noch wichtiger ist dabei die Erweiterbarkeit einfach und konfliktfrei zu gestalten. Durch Hinzufügen entsprechender Definitionsdateien werden weitere Typen von Puzzeln in das Logelium aufgenommen, ohne dass der Kern-Algorithmus angepasst werden muß.

Dies Kapitel gibt eine ganz kurze Übersicht über die Komponenten des Logeliums, die natürlich nicht ausreicht, um die Funktionsweise vollständig zu verstehen. Eine ausführliche Beschreibung ist ein Buch für sich. Es geht mir auch mehr darum, einige Ergebnisse zu zeigen, als eine für viele doch langweilige Vorlesung über Programmiertechnik zu halten.

Die Logelium Architektur ist extrem modular aufgebaut und unterstützt z.Zt. etwa einhundert verschiedene Puzzel Definitionen. Zunächt gibt es einen statischen Teil, welcher die Definitionen eines Puzzels mit den Definitionen der Gitter und Figuren ausmacht. Für die so erzeugten Puzzel kann man dann Formen entwerfen, welche dann mit dem eigentlichen Kern-Algorithmus gelöst werden. Die resultierenden Lösungen sind in einer Textliste gespeichert und können dann mit dem Grafik-Generator anschaulich gemacht werden.

Architektur

Beschreibung der Module und deren Beziehungen:

Gitter Definition

Für jede Logelium Puzzel Familie gibt es eine gemeinsame Gitterdefinition, die i.A. manuell erstellt wird. Das Pentomino und alle anderen Figurensätze aus Quadraten bilden z.B. die Familie Mino. Die Gitterdefinition enthält alle gemeinsamen Eigenschaften dieser Familie.

Figuren Generator

Hier liegt die meiste Arbeit, wenn ein neuer Puzzeltyp konfiguriert werden soll. Neben der Figuren Definition werden auch ein oder mehrere Visio-Master mit den Vorlagen für die Figurenstempel erzeugt. Der Figurengenerator ist ein wichtiges Hilfsmittel zum Erzeugen der Figurendefinition.

Figuren Definition

Die Figurendefinition verweist auf genau eine Gitterdefinition und beschreibt alle weiteren Eigenschaften eines Figurensatzes, z.B. Pentomino. Für jede Art von Puzzle wird eine Figurendefinition einmalig erstellt. Das ist nur für sehr einfache Figurensätze manuell möglich. In der Regel müssen die Figuren durch eine Anzahl ad-hoc Perl-Programme generiert werden.
Die Figuren werden auch oft Kacheln genannt.

Form Definition

Die Formdefininition verweist auf genau eine Figurendefinition mit einem Satz von Figuren. Die zu lösende Form wird in einer Textdatei beschrieben und parametrisiert. Die Syntax ist sehr einfach. (Beispiel)
Die Anzahl und Auswahl der Figuren kann dabei modifiziert werden. Weitere Angaben für den Grafikgenerator sind auch möglich.
Trotzdem ist dies natürlich sehr wenig komfortabel, denn ein Programm mit grafischer Eingabe fehlt. Hier gäbe es noch einiges zu tun, wenn Langeweile herrscht.

Lösungskern

Dies ein Konsolenprogramm, welches die Form-, Figuren- und Gitter-Definition einliest und eine Liste aller Lösungen erstellt. Es arbeitet ausschließlich mit Textdateien und ist daher völlig unabhängig von der Systemumgebung. Als Ergebnis liefert es eine Lösungsliste und ein Logfile.
Eine wichtige Funktion ist die Begrenzung der Rekursionstiefe. Dabei wird eine Liste von Zwischenergebnissen erzeugt, auf der weitere Programmläufe aufgesetzt werden können. Somit ist eine Parallelisierung des Gesamtablaufs möglich.

Lösungsliste

Die Lösungsliste ist eine Textdatei, welche die abstakte Beschreibung aller Lösungen und des Umrisses der Form enthält. (Beispiel)

Grafik Generator

Um aus der textuellen Liste der gefundenen Lösungen Grafiken zu zeichnen, dient ein weiteres Perl-Programm. Dieses wandelt die Lösungen in eine Visio-Grafik um, wobei einer der zur Figurendefinition passende Stempelsätze verwendet wird (ein Beispiel als PDF). Optional kann auch SVG Quelltext erzeugt werden.
Durch die Trennung von Lösung und Darstellung sind verschiedene Arten und Stile von Grafiken möglich.

 

Impressum