Wir hatten ja mal so ein Projekt hier im Forum; das ist zwar nach kurzer Zeit gescheitert, aber man kann's ja trotzdem anmerken.

Bei uns wurden Maps zu komplex erachtet, um sie in einer einzigen Datei anzugeben. Statt dessen war jede Map ein Zip-Archiv, das in etwa Folgendes beinhaltete:

- Eine Reihe von Tilesets
- Eine Reihe von Layern, die als PNG-Bilder gespeichert waren. Jedes Tile wurde als ein Pixel repräsentiert; der (8-bit-)Farbwert war dann der Index auf das entsprechende Tileset
- Eine Datei, die definiert, welche Layer in welcher Reihenfolge vorkommen, welche Eigenschaften die Layer haben, welches Tileset sie verwenden und wo die Events sind
- Events/Skripte jeweils als einzelne Dateien

PNG wurde gewählt, weil es ein geeignetes, effizientes Binärformat war, für das man vorgefertigte Bibliotheken verwenden konnte. Man könnte statt dessen natürlich auch ein einfaches Textformat benutzen, beispielsweise etwas in der Art von PGM.


Ein anderer Ansatz wäre vielleicht der, den DoomRL für Usermaps nimmt: Usermaps sind da einfach Lua-Skripte. Du definierst erst, welche Arten von Tiles durch welche Zeichen dargestellt werden und gibt dann den Level in ASCII art an. Das Ganze sieht dann in etwa so aus.

Der Vorteil ist, daß du so ein halbwegs menschenlesbares Format hast und auch noch die Skripte zusammen mit der Map gespeichert kriegst. Außerdem kannst du beliebiges Verhalten in die Map einbauen, sofern die API es zuläßt. Der Nachteil ist, daß die Datei mit mehreren Layern schnell unübersichtlich werden dürfte und daß die Anzahl der möglichen Tiles durch die Anzahl der druckbaren Zeichen beschränkt ist. Falls du auf Unicode setzt, kriegst du zwar mehr Zeichen, als du je brauchen wirst, aber die Datei wird auch entsprechend größer.


Menschenles- und editierbare Formate haben immer den Nachteil, anderswo suboptimal zu sein. Du mußt halt sehen, ob dir eine einfache Implementierung oder kleine Mapdateien wichtiger sind als Menschenlesbarkeit.

Auf jeden Fall solltest du von XML wegbleiben. Das Format ist wirklich grausam und du tust dir keinen Gefallen damit, wenn du es verwendest.


Oh, und was die Programmiersprache angeht: Ich würde es zumindest so drehen, daß du die Spielengine im Editor zur Anzeige verwenden kannst. Wenn du zwei verschiedene Engines benutzt, kriegst du nur lustige Bugs, wo die Engines die Map nicht identisch rendern und der User im Editor raten muß, wie es später im Spiel aussieht.