Tool um (Spiel)Klassen zu erzeugen

Martin13

Grünschnabel
Mein Ziel ist es ein Tool für mein Browsergame (es soll aber auch für weitere Browsergames mit ganz anderen Themen nutzbar sein) zu entwickeln mit dem ich neue Spielobjektklassen (Häuser, Waffen, Tiere, ...) entwickeln/hinzufügen kann. Es soll möglich sein aus einer beliebig erweiterbaren Liste von Attributen (Größe, Gewicht, Besitzer, ...) über Formular/ "drag and drop" zu erstellen.

Meine Frage lautet 1.: wie ich dazu am besten meine DB designe, 2.:in wie weit ich das mit oop lösen kann und 3.:welche Tools/Frameworks ich nutzen kann.

Zunächst noch ein paar Anforderungen die das tool welches ich programmieren will leisten soll. Es soll die Möglichkeit geben neue Klassen als Kind-Klassen zu erzeugen, einfach als Komfort für den Spiele-Autor, dass Attribute vererbt werden und Änderungen an der Elternklasse auch alle Kind-Klassen verändern. Außerdem sollen simple "Funktionen" zu den Klassen erzeugt werden können für weitere Attribute die sich aus den vorhadenen ableiten lassen (z.B: aus Volumen und Gewicht-> Dichte). Solche "Funktionen" die auch über Formulare zu erstellen seine sollen, sollen sich auch vererben lassen können. Schließlich soll man noch Attribut/Funktionspakete erstellen können, die man dann auch Objekten zuordnen kann.

Zu Frage 1: Hier geht es um die Fragestellung wie man die Arbeit des Autors am besten speichert (also die Definitionen der Klassen und Funktionen) aber vor allen wie dann die Spielwelt, wenn also tausende "Instanz" der Klassen existieren, gespeichert werden soll. Eine Möglichkeit wäre es für jede Klasse eine eigene Tabelle zu erzeugen, das könnten aber äußerst viele Tabellen werden. Außerdem würde mich für den Fall die Frage interessieren ob es dann sinnvoll wäre die Attribute von Kindklassen die geerbt werden in der Elternklassen Tabelle zu speichern und nur die übrigen Attribute in der Tabelle von der Kind-Klasse, oder lieber alle Attribute eines Objekts in einer Tabelle.
Die andere Möglichkeit die ich sehe und im Moment favorisiere ist ein Modell aus 4 Tabellen. Die erste Speichert alle möglichen Attribute mit Name und ID. Die zweite Tabelle Speichert alle in der Spielwelt vorhadenen Objekte mit ID und KlassenID. Die 3. Tabelle besteht aus laufender Nummer| ObjektID | AttributID | AttributWert. Ein Objekt mit x Attributen hat hier also x Einträge. Die 4 Tabelle speichert die Hierachie der Objekte in der Spielwelt mit ObjektIDx liegt in ObjektIDy, um zu speichern dass der Rucksack im Waldstück liegt und das Schwert im Rucksack.
Was sind Vor und Nachteile der beiden Möglichkeiten?

Zu Frage 2:
Urspünglich hatte ich vor alle Klassen in der Spielwelt auch als Klassen im Sinne von oop zu programmieren. Möglicherweise ist das aber überflüssig da es ja nur Ansammlungen von Daten sind und die zugehörigen Funktionen nur sehr simpel sind. Mein jetziger Ansatz ist es nur mit einer Klasse zu arbeiten die nur die CRUD Funktionen erfüllt.

Zu Frage 3:
Die Antwort auf die Frage nach Tools und Frameworks ist natürlich verzahnt mit den antworten auf die Fragen 1 und 2.
Zum einen würde sich wohl eine Sammlung aus den PEAR Packages anbieten, zusammengefasst hier: http://opensource.21st.de/static/formbuilder/rapidprototyping-kr.pdf
Enthalten:
DB (database API abstraction layer)
DB_DataObject (object-relational mapping)
HTML_QuickForm (building and validating of HTML forms)
DB_DataObject_FormBuilder (autogenerates forms from DataObjects)

Wobei diese Sammlung wohl nur Sinn macht wenn man jeden Objekttyp in einer eigenen Tabelle speichert und man dann sich zu jedem eine Klasse erzeugen lässt. Mir ist dann allerdings nicht klar wie man mit den durch DB_DataObject erzeugten Klassen noch von den Funktionsvererbungen im oop profitieren kann. Die Klassen sind doch wohl nur dazu da crud Funktionen für die Tabellen zu liefern.

Ein anderes Tool ist der PHP Objekt Generator http://www.phpobjectgenerator.com/ Er hat den Vorteil, dass er schon ein GUI liefert mit dem man Tabellen für Objekte erzeugen kann. Die zugehörigen Klassen liefern wohl auch nur crud Funktionen.


Ich denke es gibt durchaus mehrere Ansätze um mein Problem zu lösen. Ich habe jetzt die Grundzüge der Gedanken die ich zu den Fragen habe geschrieben. Ich hoffe, dass das alles mehr oder weniger Sinn macht (das meiste ist Neuland für mich) und dass ein Pro und Contra Argumentation zu den Fragen entsteht. Ich kann auch gerne noch mehr zu den Fragen schreiben oder konkretere Fragen stellen, erstmal würde ich aber gerne wissen ob ich auf dem richtigen Weg bin das Problem zu lösen.

Vielen Dank für alle Antworten
 
Zuletzt bearbeitet:
Zurück