php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.02.2011, 03:50  
Neuer Benutzer
 
Registriert seit: 29.11.2010
Beiträge: 11
PHP-Kenntnisse:
Fortgeschritten
oneback befindet sich auf einem aufstrebenden Ast
Standard Game Architecture in PHP

Moin moin ihr Schurken.

Geplant ist ein Browsergame.
Software: CouchDB, PostgreSQL, Memcached, PHP 5.3 - FASTCGI + APC
Frontend: HTML 5 + Javascript

Bisherige Plattformen habe ich objektorientiert und als MVC umgesetzt.
Fraglich ist, ob das auch für Games die beste Möglichkeit ist.
Ich denke schon.

Viel mehr noch bereiten mir andere Sachen sorgen.
Es gibt Charaktere, Charaktere haben Skills, Charaktere haben Gegenstände welche die Skills beeinflussen und eigene Eigenschaften haben. Und natürlich verschiedene Umgebungseigenschaften.
Charaktere können natürlich Leveln und insgesamt wird es sicher einige größere Algorhythmen geben.

(An dieser Stelle möchte ich nicht hören, PHP sei zu langsam für Games, die Diskussion können wir uns sparen)

Absoluter Overkill wäre hier für jedes Level, jeden Charakter, jeden Gegenstand usw eine eigene Klasse anzulegen. Das wäre weder performant noch leicht zu warten und erweitern.
Eine Möglichkeit wäre hier zum Beispiel die Dinge in XML-Dateien auszulagern.
XML ist easy und einfach da!
Geladen werden diese Daten eh nur einmal und sind dann in Memcache.
Aber mal Caching Beiseite, wichtig ist eine rapide Spieleentwicklung und natürlich soll das Datenmodel einigermaßen elegant sein.

Für die Levels hatte ich auch schon eine Idee.
Hier könnte man es wirklich in einer Methode machen und per Switch abfragen was passieren soll:
switch ($level){
case 1:
$XP=0;
$level=1;
$skills=10;
$defense=0;
break;
case 2;
$XP *= 2
$level=2
$skills+=round($skills/2+($skills/10));
$defense=4;
break;
}

Ich bin mir aber unsicher.
Wie würdet ihr das Ganze angehen?
Kennt ihr gute Blogs und habt ihr Erfahrungswerte?

Beste Grüße,
Oneback
oneback ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.02.2011, 11:09  
Erfahrener Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse:
Anfänger
Trainmaster wird schon bald berühmt werden
Standard

Du willst nicht ernsthaft für alle Levels ein Switch-Case-Konstrukt verwenden? Ich stelle mir gerade vor, wie das bei 100 Levels aussieht. Außerdem ist dein Beispiel meiner Meinung nach nicht richtig. Das Level wird in aller Regel auf Basis der XP bestimmt, demnach switch($xp).

Für jeden Charakter, Gegenstand, Level etc. eine eigene Klasse zu erstellen ist nicht Sinn und Zweck von OOP. Überlege dir bspw. eine Basis-Gegenstandsklase. Dort sind alle möglichen Eigenschaften und Methoden für einen Gegenstand notiert. Die konkrete Konfiguration eines Gegenstandes, sprich welche Eigenschaften verfügbar sind, welche Werte etc. speicherst du in der Datenbank ab. Dasselbe Prinzip würde ich bei Charakteren und Skills anwenden. Du musst dir halt stets überlegen, wie du am geschicktesten eine Basis-Klasse erstellen kannst und gegebenenfalls du Vererberung deine Basis-Klassen spezifizierst. Dies könnte ich mir bei der Charakter-Klasse vorstellen.

Bzgl. des Levels würde ich mir zunächst Gedanken über die Level-Berechnung machen, sprich lineares oder exponentielles Wachstum. Meiner Erfahrung nach tendieren Spiele zu einer leicht exponentiellen Wachstumsrate. Zusätzlich definierst du mit einer Level-Klasse alle möglichen Ereignisse, welche beim Leveln eintreten können. Die konkreten Werte etc. legst du in der Datenbank ab und führst bei jedem Leveln eine Überprüfung durch. Jenachdem ob in der Datenbank etwas hinterlegt ist, werden die jeweiligen Aktionen ausgeführt oder eben nicht. Damit bleibst du sehr flexibel.
Trainmaster ist offline   Mit Zitat antworten
Alt 05.02.2011, 11:20  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Ich würde Actions wie Stufenanstiege, Skillverbesserungen ect. pp garnicht erst ins Script packen das nen Client aufruft, sondern per php einen Deamon bauen der die Datenbank- und Spiel-Logik bereitstellt. Das Clientscript die Darstellungs- und Interaktions-Logik. Wenn man will könnten diese Scripts auch lokal den Deamon per sockets joinen, was aber wiederum die realisierung einer server-internen Client-To-Deamon Architektur voraussetzt, die die sockets kontrolliert.

Ich hatte vor längerer Zeit mal ein Projekt betreut das einen Support-Chat via IRC realsiert hat, die ganz ähnlich gearbeitet haben. Der IRC-Deamon war ein PHP-CLI-Script das permanent auf dem Server lief. Die Client-Scripts die ebenfalls auf dem Server liefen betraten den IRC-Server per socket. IRC-Services die man Modular starten konnte, ebenfalls. Das IRC-Protokoll allerdings wäre - denke ich - da es ein Relay-Prinzip verfolgt, der Falsche Weg für einen Game-Deamon.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 05.02.2011, 14:12  
Neuer Benutzer
 
Registriert seit: 29.11.2010
Beiträge: 11
PHP-Kenntnisse:
Fortgeschritten
oneback befindet sich auf einem aufstrebenden Ast
Standard

Wenn ich Stufenanstiege und Skillverbesserungen als CLI implementiere dann habe ich wahrscheinlich mehr Rechenaufwand.
Denn ich muss ständig alle checken. Wenn der User aber nichts macht, bzw sich nichts getan hat, dann ist dieser Check praktisch umsonst.
Okay, sowas könnte man ja performant per Memcache klären. Bei einer Änderung wird dann ein Wert in die DB geschrieben, der Daemon checkt dann ob dieser vorhanden ist und führt ggf ne Überprüfung durch.

@Troy ich glaube aber dein Prinzip nicht _genau_ verstanden zu haben, könntest du das bitte noch einmal besser erläutern?

@Trainmaster, nein das war nur ein erster Gedanke, natürlich ist das später Schwachsinn.
Du hast Recht, die Dinger bekommen schon ihr Objekt. Es muss nur möglichst elegant gelöst sein was bei den Actions passieren kann.
ich bin da noch sehr "vorsichtig". Level-Berechnung sollte exponentiell sein, denke ich auch.


Ich dachte bezüglich des Frontends auch schon an WebGL, bin da aber noch etwas unschlüssig auf Grund fehlender Kompatibilitäten.
oneback ist offline   Mit Zitat antworten
Alt 05.02.2011, 15:12  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Stell dir mein vorgeschlagenes System als MySQL-Server vor. Die Verwaltung der Daten selbst übernimmt der mysql-deamon, dein client ( php -> mysql* ) erzeugt nur requests in form von querys und bekommt eine antwort.

Würde dein Spieler nun seine seite aufrufen, würde das loginhandling von diesem deamon gehandhabt werden und anhand der session wüsste der deamon wo die daten und der avatar von deinem spieler steht, welche stufe er hat und was für eine klasse er bspw. ist.

Will der spieler nun mit etwas interagieren, bspw. einem Item in seinem Inventory, frag das clientscript den deamon ob er das darf, führt diese Aktion für den client aus und sendet dem clientscript entsprechende anweisungen wie die darstellen zu ändern ist. das client-script leitet das weiter an den browser ( bspw. via Ajax-Reply )

Was ein Deamon ist weißt du ?
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 05.02.2011, 15:32  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
natürlich soll das Datenmodel einigermaßen elegant sein.
Das du dir denn darüber mal Gedanken gemacht? Die letzten beiden Datenmodelle, bei denen ich in die Diskussion mit eingebunden waren ausgedruckt nur noch auf einem A1-Papier unterzubringen.

Sofern du noch keine Überlegungen dazu angestellt hast, solltest du das nachholen. Gerade bei einem BG ist das Datenmodell das zentrale Element.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 05.02.2011, 15:46  
Neuer Benutzer
 
Registriert seit: 29.11.2010
Beiträge: 11
PHP-Kenntnisse:
Fortgeschritten
oneback befindet sich auf einem aufstrebenden Ast
Standard

@troy Na klar weiß ich was ein Daemon ist. Verstehe jetzt auch was du meinst.

@dre Genau deshalb diese Diskussion hier. Gedanken darüber gemacht habe ich mir, ich hätte aber gerne Erfahrungswerte und Vorschläge dazu.
oneback ist offline   Mit Zitat antworten
Alt 05.02.2011, 16:26  
Neuer Benutzer
 
Registriert seit: 29.11.2010
Beiträge: 11
PHP-Kenntnisse:
Fortgeschritten
oneback befindet sich auf einem aufstrebenden Ast
Standard

Es macht wahrscheinlich Sinn es über Comet laufen zu lassen um Requests zu sparen.
oneback ist offline   Mit Zitat antworten
Alt 05.02.2011, 17:25  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
@dre Genau deshalb diese Diskussion hier. Gedanken darüber gemacht habe ich mir, ich hätte aber gerne Erfahrungswerte und Vorschläge dazu.
Du erwartest aber nicht ernsthaft, dass ich dir nun einen Vorschlag zu deinem Datenmodell hinpinsel? Wenn doch, solltest du dich fragen, ob es wirklich eine gute Idee ist, ein BG selbst zu schreiben.

Erfahrungswerte: komplex, erfordert viel Erfahrung und Feingefühl für Datenmodellierung, dauert mehrere Wochen.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 05.02.2011, 17:28  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.631
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Was das Problem mit Gegenstand beeinflusst Skill, Skill beeinflusst Charakterwerte etc. bietet sich das Decorator Pattern an.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Verstärkung gesucht für ein Sci-Fi Space Multiplayer Game BlackOrbst Sonstige 0 08.12.2010 23:39
Verstärkung gesucht für ein Sci-Fi Space Multiplayer Game jastreb Sonstige 0 04.12.2010 12:58
Sci-Fi Space Multiplayer Game Programmierers gesucht jastreb Gewerblich 2 30.11.2010 23:52
[Erledigt] Sims Online Game danielottott Beitragsarchiv 0 06.09.2009 22:20
Einladung an die PHP-Community: Evolutions! Game SvenLittkowski Beitragsarchiv 7 17.04.2009 08:57
Browser game erstellen PHP Tipps 2007 9 30.01.2006 11:40
Game & Webhosting Project Beitragsarchiv 2 27.08.2005 16:52
Suche Game Coder für 10.000€ Beitragsarchiv 27 15.03.2005 17:38
Online Game Scripts Carrear Beitragsarchiv 10 17.02.2005 01:47
Suche Mitarbeiter für (innovatives) Game! Beitragsarchiv 10 12.02.2005 19:28
Browser Game Beitragsarchiv 37 29.12.2004 00:49
Suche Hilfe für eine Fanpage zum Game Gothic 3 !! Beitragsarchiv 5 03.09.2004 14:58
:!: Suche PHP-Programmierer für Online Game Beitragsarchiv 6 23.08.2004 00:54

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
browsergame couchdb, architecture browser game, browser game architecture, browsergame architektur php, php open source browsergame skill, game architecture, browser game architecture php, php multiplayer game, php browsergame charakter leveln, php game mvc, http://www.php.de/php-fortgeschrittene/76976-game-architecture-php.html, open source skill script

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum