Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

1

20.02.2015, 12:07

Suche gute Tutorials für PHP- Browsergames

Hallo,
ich suche schon seit einiger Zeit nach guten Tutorials zum Thema Browsergames.
Dabei soll die Realisierung mittels HTML, PHP, JavaScript und CSS geschehen. PHP steht dabei im Fokus, im Hintergrund läuft eine MySQL Datenbank die Tabellen von Nutzern, Ressourcen und Punkten verwaltet.
Probleme bereitet mir vor allem wie ich Datenbankzugriffe mit php in Funktionen verpacke, den php-Code zu strukturieren und welche kleinen Stilmerkmale ich im Auge behalten sollte.

Falls ihr ein kleines dokumentiertes Beispielprojekt habt, am besten kostenlos, bitte hier posten :)
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

20.02.2015, 13:01

Ich wüsste jetzt nicht, wo so etwas erklärt wird, aber allgemein für PHP fand ich früher immer dieses hier sehr gut: http://tut.php-quake.net/de/
Dort wird zur Genüge der Umgang mit MySQL erklärt.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Tobiking

1x Rätselkönig

  • Private Nachricht senden

3

20.02.2015, 13:08

Browsergames unterscheiden sich jetzt nicht so stark von dem was komplexere "normale" Webseiten machen. Hast du mal überlegt ein Webframework zu nutzen? Dann hast du für Datenbank üblicherweise schon eine brauchbare Lösung mit dabei. Symfony hat z.B. sogar einen ORM Mapper mit dabei, der dir die Datenbank fast komplett abstrahiert.

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

4

20.02.2015, 13:36

naja es gibt schon Unterschiede besonders durch den Umgang mit einer Datenbank und den Einsatz von php:
Ich meinte sowas http://gameseal.net/tutorials/86-die-dat…nen-browsergame
Architekt, dein Tutorial ist nicht schlecht, hab ich mir auch schon angesehen, aber ich meinte so ein richtiges Beispielprojekt. wie der Link über mir.
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

20.02.2015, 18:17

Da hast du doch anscheinend schon ein Tutorial in der Richtung. Ich wüsste nicht dass es dazu speziell besonders viele gute Quellen gibt. An sich ist das aber wirklich nicht groß anders als andere Webanwendungen. Der Benutzer tätigt auf einer Seite Eingaben und verändert dadurch den Spielzustand. Normalerweise von sich selbst, möglicherweise beeinflusst er dadurch aber auch andere Spieler. Ein Beispiel dafür wäre Handel oder ein Kampf.
Vergleichbar läuft das bei einer Webanwendung auch. Der Benutzer macht eingaben und beeinflusst dadurch den Zustand. Teilweise seinen aktuellen, aber möglicherweise auch den anderer Nutzer. Wenn das Problem bei der Strukturierung von deinem PHP Code liegt da hilft denke ich viel Learning by Doing weiter. Programmier viel und dann findest du irgendwann deinen Stil. Wenn du sonst schon programmieren kannst dann kannst du ja gucken ob du Wissen von dort übertragen kannst.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Frybird

Treue Seele

Beiträge: 97

Wohnort: Bonn

Beruf: Webprogrammierer

  • Private Nachricht senden

6

23.02.2015, 10:35

Als beruflicher Webseiten Programmierer wüsst ich jetzt auch nicht, in wie weit man (ausserhalb von HTML5 Spielen) bei einem "normalen" Browserspiel mit PHP und Datenbank speziell ein Tutorial braucht das auf Spiele abzieht.

Wenn du einzelne Funktionen und Spielelemente auf die grundsätzliche Verarbeitung runterbrichst, bist du im Endeffekt bei Anforderungen die auch sonst wo für Webanwendungen und Seiten relevant sind, und da hast du dann eine Fülle an Informationen.

Daher kann ich jetzt auch nicht viel mehr bieten als Links die schon oben genannt sind.

Aber vielleicht kannst du ja ein bisschen genauer auf Spielmechaniken eingehen, die du verwenden möchtest, dann können wir vielleicht mit spezielleren Tipps und Tutorials helfen.

Was ich zu Datenbankzugriffen in Funktionen packen sagen kann (ich nehm hier mysql als Beispiel):

Jedes Script sollte nur einmal mit der Datenbank connecten

Wenn die Datenbankverbindung nicht aus irgendeinem Grund geschlossen werden muss, sollte man nicht ständig mysqli_connect vor jede Abfrage schalten (btw. bitte auf mysql Funktionen verzichten und mysqli verwenden, die mysql Funktionen von PHP sind veraltert und werden vielleicht in Zukunft garnicht mehr unterstützt. Die mysqli Erweiterung ist in PHP5 integriert und wird weiter supported)
Stattdessen solltest du ein zentrales Skript fürs Datenbankhandling verwenden und mit einer Connect-Funktion sicher stellen, das neue Verbindungen nur gemacht werden, wenn es not tut.

Ein Beispiel

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function db_connect() {

        // Wenn du deine DB-Verbindung als statische Variable definierst, kannst du sichergehen, das sie nur einmal aufgerufen wird...
        static $connection;

        // ...in dem du vor dem Connect prüfst, ob die Variable nicht schon bereits gesetzt wurde
        if(!isset($connection)) {
             // Sachen wie Passwort etc. kannst du auch in einer ini Datei definieren.
            // Ansonsten habe ich hier keine Datenbank definiert. 
            // Wenn du mehrere Datenbanken verwendest, sollte jede Query im FROM Statement die Datenbank (am besten per globale Variable) nennen, um Fehler mit Default Werten zu vermeiden
           // Wenn nicht, kannst du den DB Namen als nächsten Parameter an die unten stehende mysqli_connect funktion haengen
            $config = array();
            $config['username'] = "mein_username";
            $config['password'] = "mein_passwort"
            $connection = mysqli_connect('localhost',$config['username'],$config['password'],);
        }

        // Falls keine Datenbankverbindung stattgefunden hat, solltest du den Fehler abfangen
        if($connection === false) {
            // Und hier irgendwie loggen
            return mysqli_connect_error();
        }
        return $connection;
    }


Ausserdem

Immer immer IMMER Variablen escapen und selbst in Anführungszeichen, die von Nutzern kommen

Damit vermeidest du nicht nur doofe Datenbankfehler, sondern gehst auch zumindest grundsätzlich sicher, das dir kein Nutzer mit einer SQL Injection deine DB versaut

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
   //Alle String Variablen in einem Query sollten damit vorher "saubergemacht" werden
   function quote($var="")
   {
       $var = preg_replace("/\\\'/","'",$var);
       $var = preg_replace('/\\\"/','"',$var);
       
       $var = preg_replace("/\\\+/","\\\\\\",$var);

       $var = preg_replace('/"/','\"',$var);
       $var = preg_replace("/'/","\'",$var);

       return "'".$var."'";
   }


Die beiden und weitere DB Funktionen am besten in einen zentralen Handler packen, das jedes Skript (achja, du solltest von vornherein sicher gehen, das PHP Skripte und HTML Seiten möglichst strikt voneinander getrennt sind) das mit Datenbanken zu tun hat dann inkludieren kann.


Das wäre jetzt was was mir spontan zu dem Thema einfällt, wenn du da noch Konkret fragen hast stell sie ^^

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

7

23.02.2015, 11:18

Ausserdem

Immer immer IMMER Variablen escapen und selbst in Anführungszeichen, die von Nutzern kommen

Damit vermeidest du nicht nur doofe Datenbankfehler, sondern gehst auch zumindest grundsätzlich sicher, das dir kein Nutzer mit einer SQL Injection deine DB versaut

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
   //Alle String Variablen in einem Query sollten damit vorher "saubergemacht" werden
   function quote($var="")
   {
       $var = preg_replace("/\\\'/","'",$var);
       $var = preg_replace('/\\\"/','"',$var);
       
       $var = preg_replace("/\\\+/","\\\\\\",$var);

       $var = preg_replace('/"/','\"',$var);
       $var = preg_replace("/'/","\'",$var);

       return "'".$var."'";
   }


Die beiden und weitere DB Funktionen am besten in einen zentralen Handler packen, das jedes Skript (achja, du solltest von vornherein sicher gehen, das PHP Skripte und HTML Seiten möglichst strikt voneinander getrennt sind) das mit Datenbanken zu tun hat dann inkludieren kann.


Das wäre jetzt was was mir spontan zu dem Thema einfällt, wenn du da noch Konkret fragen hast stell sie ^^


Ähm... dafür gibt es doch Prepared Statements !?

Frybird

Treue Seele

Beiträge: 97

Wohnort: Bonn

Beruf: Webprogrammierer

  • Private Nachricht senden

8

23.02.2015, 11:45


Ähm... dafür gibt es doch Prepared Statements !?


Ich persönlich spar mir lieber den zweiten Zugriff auf die Datenbank wenn ich das ganze recht unkompliziert über PHP selber machen kann, vorallem wenn ich vermutlich eh die Variablen in irgendeiner Weise nochmal anpacken und oder prüfen muss. Macht es auch einfacher Query Fehler zu Debuggen.

Aber ja, mit Prepared Statements kann man das auch über die DB machen und ist in Fällen von sehr oft wiederholten gleichen Statements auch schneller, auch wenn ich die letztere Aussage nicht grundsätzlich unterschreiben kann, hier sollte man am besten immer selber testen und ggf. optimieren.

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

9

26.02.2015, 14:46

Ok vielen dank für die zahlreichen Tipps, ich halt mich mal ran und versuche einfach auftauchende Fragen hier zu posten, danke für das Connect Beispiel , hat mir sehr weitergeholfen :)
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

phptroll

Frischling

Beiträge: 5

Beruf: FIAE

  • Private Nachricht senden

10

02.03.2015, 21:10

Interessant finde ich, dass hier der Begriff der Prepared Statements fällt, aber nicht über PDO nachgedacht wird. :P
Wäre sicherlich ein interessanter Ansatz, gerade auch wegen des Exception Handlings. PDO ist auch immer mein Freund, wenn es um große Projekte mit großer Reichweite geht (ein solches Projekt soll das Game doch bestimmt werden oder?). Oder gibt es da konkrete Probleme mit der php-version oder dem(n) Server(n), auf dem das ganze Laufen soll?

Werbeanzeige