| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Neuer Benutzer Registriert seit: 04.07.2005
Beiträge: 24
![]() | Hallo, mein Ziel ist es ein Tool für mein Browsergame 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, ...) per drag and drop neue Objekte 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/for...otyping-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 Edit 1: link zum rapidprototyping richtig gestellt |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | ||||||
| Erfahrener Benutzer Registriert seit: 21.05.2008
Beiträge: 9.937
![]() | Hallo, eine sehr interessante Aufgabe! Deshalb hab ich ihn mal ins Fortgeschrittenen Forum hochverschoben. Zitat:
Ad-hoc, Active Record, Mapper (und integrierte Mapper). Ich zitiere hier aus dem Buch Professionelle PHP 5-Programmierung (Teil 3 Verteilte Anwendung, Kapitel 12 Mit Datenbanken interagieren). Amazon Vielleicht helfen dir diese Schlagworte bereits weiter, ein Fazit bzw. eine Empfehlung gab es zu keiner dieser Methoden (höchstens, das Ad-hoc nicht das wahre ist). Zitat:
Zitat:
Zitat:
Du stellst hier viele Tabellen gegenüber vielen Verknüpfungsberechnungen. Ich favorisiere eher die erste Ausführung, ich denke sie wird schneller sein. Zitat:
OOP hat ja das Ziel, die "Wirklichkeit" ersteinmal nachzubauen, mit all ihren Vor- und Nachteilen. Der Nachteil ist, das dass oft oversized ist, aber es trägt zumindest enorm zum Code-Verständnis bei. Zum Rest kann ich wenig sagen, da muss jeder selbst wissen, ob er lieber fertige Lösungen nimmt oder sich mit PEAR o.ä. selbst etwas baut. PEAR finde ich in Ordnung, da es für mich kein Framework ist, sondern mehr eine Klassensammlung. Da spreche ich aber nur für mich. | |||||
| | |
| | |
| Neuer Benutzer Registriert seit: 04.07.2005
Beiträge: 24
![]() | Erstmal vielen Dank für diese ausführlichen Antworten. Ich habe die selbe Frage schon in einem anderen PHP-Forum gepostet (http://phpforum.de/forum/showthread.php?t=208033) aber bis zum Ende der Diskussion nicht so viele hilfreiche Anstöße bekommen wie hier schon in den ersten 2 Posts! Um nochmal denn Sinn des ganzen deutlich zu machen, ich möchte das zunächst für mein aktuelles Browsergame nutzen, aber eigentlich zielt es darauf ab, dass dieses Tool die Grundlage für einen "Browsergamemaker" werden soll, mit dem es ohne Programmierkenntnisse möglich sein soll Browsergames zu erstellen. @Zergling Ich bin noch dabei nach den genannten Sichwörtern zu suchen, wenn ich so weit bin werden sicher noch Fragen folgen. Bei der Frage ob man für die Spielklassen auch oop Klassen bauen soll frgast du nach einem Beispiel: Also es soll möglich sein "Welten" zu erzeugen. Es gibt zum Beispiel die Klasse "(Spiel)Feld" mit den Attributen Typ(Wald, Grasland, ....), Höhe (327m), Fluss(ja/nein), xKoordinate, yKoordinate. Dann gibt es Spieler mit Attributen wie Stärke, Geschick, Ausdauer, FeldAufDemSieStehn, .... Dann gibt es Tiere, Schwerter, Gebäude, usw... In einem anderm Fall soll ein Fussballmanager gemacht werden, da gibt es dann vllt Regionen, Stadion(Sitzplätze, Stehplätze, Parkplätze,...) Das nächste Spiel soll vllt ein Weltraumspiel werden. Es geht also darum wie gespeichert wird, dass die Klasse Beispiel eben genau diese 3 BeispielAttribute hat (vllt wäre da ne XML Datei sinnvoll?) und dann muss die Spielwelt, wenn Sie auf Grundlage der Klassendefinitionen erschaffen ist, gespeichert werden. Um die Größenordnungen abzuschätzen, ich vermute mal das Spiel an dem ich konkret gerade "bastele" wir so 200-400 Objekte haben. Das wären also genausoviele Tabellen. Alternativ - in dem 4 Tabellen Modell - wären es unendlich viele Einträge in der Tabelle in der die Werte den Klassen zugewiesen werden. So habe ich ca 64.000 Felder mit je 5 Attributen, allein das wären 320.000 Einträge in die Tabelle und würde nur einen Objekttyp von 200 abdecken, also SEHR GROB geschätzt insgesamt 64.000.000 Einträge (320.000 * 200). Ich habe keine Erfahrung ob sowas noch völlig normal ist oder schon an die Grenzen stößt. @Slava Du zerlegst eine PHP-Klasse in kleine Elemente die man dann in einer DB speichern kann und sich mit einem guten Script dann wieder zusammenpuzzeln lassen kann. Das Problem (und das habe ich in meinem Eingangspost nicht richtig deutlich gemacht) ist, dass das tool für Leute sein soll die keine Programmiererfahrung haben und dementsprechend wissen die nicht, wozu die etwas "public, privat, protected,..." bestimmen sollen. Du bist aber auch für das 4 TabellenModell, ich denke Zergling hat den Konflikt mit "viele Tabellen gegenüber vielen Verknüpfungsberechnungen" sehr treffend beschrieben. Wo siehst du den Vorteil im 4 Tabellen Modell? Ich will noch weitergehen beschrieben was ich noch vor habe: Neben diesem "Spielwelterzeugungstool" soll ich dann noch ein Tool geben um Aktionen zu erzeugen. Der Spielautor legt dazu wie eine Aktion heißt (z.B. Holzfällen), unter welchen Umständen sie möglich ich (Spieler befindet sich auf Feld mit Typ=Wald + Spieler hat Axt im Invantar), welche Parameter muss der Spieler eingeben wenn er die aktion startet (Dauer in Minuten). Schließlich muss der Autor festlegen wie die Aktion ausgewertet wird. (Holzmenge x in Inventar des Spielers einfüge und x = (Dauer * QualitätDerAxt * Stärke * Holzfällskill * Zufallszahl(zwischen 0,8 und 1,2)) außerdem Holzfällskill erhöhen, Stärke erhöhen. Soviel als kurze Vorschau wonach ich euch in einem halben Jahr fragen werde, und vllt ist es ja auch dem jetzigen Problem dienlich wenn Ihr wisst was das ganze soll. |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| SQL Abfrage erzeugen/ string bearbeitung | easy | PHP Tipps 2007 | 20 | 28.03.2007 22:12 |
| UML / MDA suche Tool | Crypi | PHP-Fortgeschrittene | 13 | 21.01.2007 23:27 |
| Bild erzeugen | meisterigel | PHP Tipps 2006 | 5 | 28.03.2006 14:43 |
| Pulldown Menü dynamisch aus Datei erzeugen | PHP Tipps 2005-2 | 14 | 20.10.2005 11:18 | |
| Tool zur Ermittlung von Datenbankänderungen | Datenbanken | 2 | 14.03.2005 20:09 | |
| Gesucht wird php Forum oder php Tool für eine Community | Beitragsarchiv | 4 | 10.03.2005 03:17 | |
| Kopf bzw Fußzeilen erzeugen | Boennchen | HTML, Usability und Barrierefreiheit | 9 | 11.02.2005 16:35 |
| mit PHP ein Bild erzeugen | PHP Tipps 2004 | 2 | 19.10.2004 22:07 | |
| Datei mit php erzeugen | Stümper | PHP Tipps 2004 | 4 | 12.10.2004 12:51 |
| DB tool ähnlich mysqlFRONT für Linux ? | Server, Hosting und Workstations | 4 | 03.09.2004 23:38 | |
| [Erledigt] Suche Tool: Text in mehreren Dateien ersetzen | Off-Topic Diskussionen | 8 | 17.08.2004 22:00 | |
| Farben umkehren :: Tool ? | Off-Topic Diskussionen | 10 | 16.08.2004 11:10 | |
| Suche Tool oder Software | Beitragsarchiv | 4 | 12.08.2004 11:54 | |
| Sucha nach einem myPhpAdmin ähnlichem Tool | Datenbanken | 2 | 02.07.2004 10:29 | |
| [Erledigt] variable Tabellen erzeugen | PHP Tipps 2004 | 1 | 14.06.2004 09:33 | |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.