Projekt „Hanse“
Da ich schon lange nichts mehr zum Thema „Hanse“ geschrieben habe, melde ich mich jetzt mal mit einem kurzen Rückblick der vergangenen Monate zurück. Zur Erinnerung: Das Ziel ist ein Browsergame, angelegt an das uralte Spiel für Amiga und prähistorische x86-Systeme. Das Ziel: Durch geschickten Ein- und Verkauf zu Ruhm und Ehre zu gelangen.
Der Weg ist das Ziel
Die ersten Versuche machte ich im Oktober/November 2005, da wir im Rahmen meiner Ausbildung Preisentwicklungen besprochen hatten. Technisch gesehen war es quick and dirty – von objektorientierter Programmierung hatte ich noch nicht viel gehört. Als der grobe Plan stand und man auch schon „klicken“ konnte, baute ich das Ganze auf Objekte um, was einige Zeit in Anspruch nahm.
Danach wurde das Relationelle Datenbankmodell auf InnoDB umgestellt, um Foreign Keys nutzen zu können. Zwar ist diese Engine langsamer als die Standardengine MyISAM, aber zahlt sich das aus meiner Sicht vorallem durch schlankeren Code aus. Denn: Mit Foreign Keys (oder auch Fremdschlüssel) hat man die Möglichkeit, dass MySQL automatisch abhängige Zeilen aus der Datenbank löscht. Verweiste Kontoren, zu denen es keinen Benutzer mehr gibt, fallen damit weg. Auch eine PHP-basierte Überprüfung ist dann nicht mehr notwendig. Ebenso wird von MySQL abgelehnt, wenn die Fremdschlüssel ungültig sind, z.B. der Verkauf eines Schiffes an einen User, der überhaupt nicht existiert, da keine Verknüpfung zwischen den Tabellen hergestellt werden kann, was sonst im Script überprüft werden müsste.
Der letzte große Schritt, der mit dem eigentlichen Spiel nicht viel zu tun hat, aber für den Hintergrund sehr interessant ist, war die Erstellung einer Komponente für Joomla! 1.5, was auf Grund der bereits vorliegenden Objektorientierung relativ unkompliziert war.
Warum Joomla! 1.5? Ganz einfach: Das wichtigste für mich ist und bleibt die Sicherheit der Anwendung. Grade ein Browsergame sollte frei von Sicherheitslöchern und Bugs sein, die anderen einen Vorteil verschaffen könnte. Das Joomla! 1.5-Framework als Grundlage zu nehmen verspricht mir eine stätige Verbesserung der Sicherheit, da es sich hierbei um eine starke Community handelt. Ich brauche mich nur grob um die Benutzerverwaltung, den sicheren Login, die Registrierung, usw. kümmern. Das Template lässt sich unkompliziert ändern und mit Hilfe der Module lassen sich viele Erweiterungen step by step erstellen.
Der Nachteil ist der Overhead, der manchmal für „Hanse“ uninteressant geladen wird.
So, und nun zur Sache…
Stand der Dinge
Bis lang sind folgende Handlungsschritte und Aktionen implementiert:
- Das Kaufen von Schiffen vom Schiffsbasar
- Das Versenden von Schiffen in andere Städte
- Abhängig von der Entfernung wird dem Schiff Rum abgezogen, ist keins mehr da, weigert sich die Mannschaft
- Die Integration in Joomla! 1.5 als Komponente
- zusätzlich ein Joomla-Modul zur Steuerung und Navigation
- komplett objektorientiert
- RDBM mit InnoDB wegen Foreign Keys
- AStar-Algorithmus zur Berechnung von Wegen (noch nicht komplett integriert)
- ein städteabhängiger Marktplatz zum Kaufen undVerkaufen von Waren
- 12 Warensorten (beliebig erweiterbar)
- Warentransfer ( Schiff <-> Kontor)
- Kontoren öffnen und schließen
- AJAX-Requests bei Eingaben für geringere Ladezeiten
Es steht noch aus:
- teilweise die Produktion der Waren mit städteabhängiger Produktivität
- Produktionsautomatisierung
- Preisentwicklung und deren Automatisierung
- Städtebedarfsentnahme und deren Automatisierung
Finde den richtigen Weg!
Eine interessante Teilaufgabe war die Verwirklichung des AStar-Algorithmuses in PHP speziell für meine Bedürfnisse. Bislang wurden die Strecken für die Wege mit Hilfe des Satz des Pythagoras‘ verwirklicht. Im Ostseeraum mag das vielleicht kein Problem sein, doch fährt man von Hamburg nach Lübeck, dann sollte die Strecke doch bitte um die Halbinsel herumgehen. Dazu habe ich mich belesen und bin auf den AStar oder auch A Stern gestoßen. Es gab einige Beispiele von anderen Programmiersprachen, aber keine für PHP. Eine gute Hilfe haben ich auf forum.php-einfach.de gefunden.
Wie sieht die weitere Strecke aus?
Als nächstes werden die noch ausstehenden Funktionen implementiert. Danach sollte ein beta-Start möglich sein. Ich hoffe, dass ich schnell die nötige Zeit finden werde. Wenn jemand mitarbeiten möchte, dann kann er sich gerne bei mir melden!