Gamux Game Entwicklung  
     

Left Nav Mit Facebook verbinden Registrieren Lexikon Lexikon Interessengemeinschaften Suchen Heutige Beiträge Alle Foren als gelesen markieren Right Nav

Left Container Right Container
 
Alt 23.03.2010, 15:54   #1 (permalink)
Erfahrener Benutzer
 

Standard [PHP Browsergame] Gebäude - Teil1

Hi

Wollte mal ein kleines Tutorial schreiben, welches sich mit dem Thema Gebäude in einem Browsergame befasst:
1. Vorraussetzungen
Man sollte schonmal mit phpMyAdmin gearbeitet haben und Tabellen, Spalten, Zeilen usw. sollten einem bekannt sein.
Man sollte innerhalb eines PHP Skripts eine Verbindung zu einer Datenbank aufbauen können.
2. Die Idee
Der Spieler hat ein Land/Gebiet/Planet usw. (hier nehmen wir mal Planet) auf dem er verschiedene Gebäude bauen kann. Diese Gebäude kann er stufenweise ausbauen.
Für den Ausbau werden Rohstoffe benötigt, die Kosten pro Stufe steigen an.
3. Die Datenbank
In der Datenbank werden verschiedene Tabelle benötigt. Ich verwende folgende Darstellung:
Code:
[Tabellenname]
1.Spalte=Typ (Zusatz) - Erklärung
2.Spalte=Typ - Erklärung
Fangen wir mit der Tabelle für die Gebäude an
Code:
[building]
buildingID=INT (AutoIncrement, PrimaryKey) - Damit kann jedes Gebäude eindeutig identifiziert werden
name=VARCHAR(50) - Der Name des Gebäudes
description=TEXT - Die Beschreibung des Gebäudes
In dieser Tabelle befinden sich keine Informationen über den Spieler, die Stufe oder die Kosten, da diese Informationen global gelten sollen.
Wir verknüpfen die Gebäude auch nicht direkt mit einem Spieler sondern mit einem Planet, welcher einem Spieler zugeordnet ist.
Code:
[building2planet]
buildingID=INT (PrimaryKey)
planetID=INT (PrimaryKey)
level=INT - Die Stufe des Gebäudes
Damit wir wissen, wieviel die Stufe eines Gebäudes kostet brauchen wir erstmal Rohstoffe
Code:
[ressource]
ressourceID=INT (AutoIncrement, PrimaryKey)
name=VARCHAR(50)
description=TEXT
Danach verknüpfen wir die Gebäude mit den Rohstoffen
[code][building2ressource]
buildingID=INT (PrimaryKey)
ressourceID=INT (PrimaryKey)
amount=INT - Die Menge von dieser Rohstoffart, die für den Ausbau benötigt wird[code]
Die Kosten pro Stufe rechnen wir dann im PHP Skript aus.
Nun brauchen wir noch Rohstoffe auf einem Planeten, damit wir später feststellen können, ob der Spieler genug Rohstoffe zum Ausbau eines Gebäudes hat oder nicht.
Code:
[planet2ressource]
planetID=INT (PrimaryKey)
ressourceID=INT (PrimaryKey)
amount=INT - Die Menge von dieser Rohstoffart, die auf dem Planeten vorhanden ist
Und natürlich den Planeten selber
Code:
[planet]
planetID=INT (AutoIncrement, PrimaryKey)
name=VARCHAR(50)
4. Erste Abfragen
Nun wollen wir unsere ersten PHP Skripte schreiben um ein paar Informationen aus der Datenbank auszulesen
PHP-Code:
<?php
//Verbindungsaufbau zur Datenbank
$link mysql_connect($server,$user,$password);
mysql_select_db($database,$link);
//Alle Gebäude abfragen und ausgeben
$sql "SELECT name,description FROM building";
$result mysql_query($sql,$link);
while(
$row=mysql_fetch_array($result)) {
    echo 
$row['name'].' '.$row['description'];
}
//Alle Gebäude abfragen und mit aktueller Stufe ausgeben
$sql "SELECT name,description,level FROM building INNER JOIN building2planet ON building.buildingID = building2planet.buildingID";
$result mysql_query($sql,$link);
while(
$row=mysql_fetch_array($result)) {
    echo 
$row['name'].' (Stufe '.$row['level'].' '.$row['description'];
}
//Alle Rohstoffe (und die Menge) vom Planeten mit der ID 1 abfragen
$sql "SELECT ressource.name AS name,amount FROM planet INNER JOIN planet2ressource ON planet.planetID = planet2ressource.planetID INNER JOIN ressource ON planet2ressource.ressourceID = ressource.ressoureID WHERE planet.planetID=1";
$result mysql_query($sql,$link);
while(
$row=mysql_fetch_array($result)) {
    echo 
$row['name'].' '.$row['amount'].'<br />';
}
So das war es erstmal mit dem ersten Teil, Fragen einfach hier im Thema stellen.
Ich möchte noch darauf hinweisen, dass ich alles komplett aus dem Kopf geschrieben habe und das Skript noch nicht getestet habe.
Außerdem werde ich es später sicherlich erweitern und anpassen, je nachdem welche Fragen auftauchen.

Geändert von Megger (24.03.2010 um 14:53 Uhr).
Megger ist offline   Mit Zitat antworten An Facebook senden
Werbung
Alt 04.08.2011, 14:42   #2 (permalink)
Neuer Benutzer
 

Standard

Der Programmierstil were noch verbesserung würdig. Wo bleibt eigentlich Teil 2?

Hier findet ihr auch noch weitere Browsergame Hilfe Anleitungen.
Gameseal - Play your Browsergame - Tutorials
splasch ist offline   Mit Zitat antworten An Facebook senden
Alt 09.08.2011, 12:33   #3 (permalink)
Erfahrener Benutzer
 

Standard

Jep, inzwischen habe ich auch einen anderen Programmierstil, aber konkreter wäre es, wenn du sagen würdest was man wie verbessern könnte.
Und da hier nicht mehr viel los ist, werde ich auch keinen weiteren Teil schreiben.

Bei dem verlinkten Tutorial fehlt mir irgendwie der Zusammenhang! Meiner Meinung nach wird alles ein bisschen erklärt, aber es wäre besser, wenn die einzelnen Tutorials aufeinander aufbauen würden
Megger ist offline   Mit Zitat antworten An Facebook senden
Alt 09.08.2011, 13:18   #4 (permalink)
Neuer Benutzer
 

Standard

Zitat:
Zitat von Megger Beitrag anzeigen
Jep, inzwischen habe ich auch einen anderen Programmierstil, aber konkreter wäre es, wenn du sagen würdest was man wie verbessern könnte.
Und da hier nicht mehr viel los ist, werde ich auch keinen weiteren Teil schreiben.

Bei dem verlinkten Tutorial fehlt mir irgendwie der Zusammenhang! Meiner Meinung nach wird alles ein bisschen erklärt, aber es wäre besser, wenn die einzelnen Tutorials aufeinander aufbauen würden
Das Tutorial hatt jemand anderes geschrieben in den Link wobei ich es eigentlich gut finde Theman aufzugreifen die oft benötig werden. Ein aufeinander folgendes Tutorial wird meistens zu einseitig und beschäftig sich dann nur mit einem Game sowie die Game baukastensystem wie Startseite - Litotex || OpenSource Browsergame-Engine

Zum Still:
Achten darauf das eine gewisse seiten Breite nicht überschritten wird.
Zuweisungen unterandere gleichmässig ausrichten erhöt die leserlichkeit enorm. unsw.

Entuell erstell ich später dafür ein Beispiel.
Ich hab mal schnell deine Code dafür hergenohmen dann sieht man auch gleich den direkten vergleich

PHP-Code:
<?php
//Verbindungsaufbau zur Datenbank 
$link mysql_connect($server,$user,$password);
mysql_select_db($database,$link);
//Alle Gebäude abfragen und ausgeben
$sql  "SELECT
           name,description
         FROM
           building"
;
$result    mysql_query($sql,$link);
while(
$row mysql_fetch_array($result))
{
  echo 
$row['name'].' '.$row['description'];
}
//Alle Gebäude abfragen und mit aktueller Stufe ausgeben
$sql "SELECT
          name,description,level
        FROM
          building
          INNER JOIN building2planet ON building.buildingID = building2planet.buildingID"
;
$result    mysql_query($sql,$link);
while(
$row mysql_fetch_array($result))
{
  echo 
$row['name'].' (Stufe '.$row['level'].' '.$row['description'];
}
//Alle Rohstoffe (und die Menge) vom Planeten mit der ID 1 abfragen
$sql "SELECT
          ressource.name AS name,amount
        FROM
          planet
          INNER JOIN planet2ressource ON planet.planetID = planet2ressource.planetID
          INNER JOIN ressource ON planet2ressource.ressourceID = ressource.ressoureID
        WHERE
          planet.planetID=1"
;
$result    mysql_query($sql,$link);
while(
$row mysql_fetch_array($result))
{
  echo 
$row['name'].' '.$row['amount'].'<br />';
}
?>

Geändert von splasch (09.08.2011 um 13:27 Uhr).
splasch ist offline   Mit Zitat antworten An Facebook senden
Alt 09.08.2011, 14:36   #5 (permalink)
Erfahrener Benutzer
 

Standard

Stimmt, dadurch entsteht sehr wahrscheinlich 1000x das gleiche Spiel, aber dem kann man vielleicht entgegenwirken indem man alles auf sehr einfacher Basis realisiert und dann vielleicht noch Tips gibt, was man verbessern bzw. anpassen könnte.

Für einen kleiner Überblick sind die Tutorials sicherlich nicht schlecht!

Mit Litotex habe ich mich auch mal auseinandergesetzt, einfach weil mich interessiert hat, wie die es realisieren und was man so alles einstellen kann, habe es aber schnell wieder aufgegeben dort etwas komplexes zu bauen

Inzwischen würde die SQL Statements folgendermaßen schreiben:
PHP-Code:
$sql "SELECT r.`name`,
               ptr.`amount`
        FROM `planet` AS p
        INNER JOIN `planet2ressource` AS ptr
          ON p.`planetID` = ptr.`planetID`
        INNER JOIN `ressource` AS r
          ON ptr.`ressourceID` = r.`ressoureID`
        WHERE
          p.`planetID` = 1"
;
$result mysql_query($sql$link);
while (
$row mysql_fetch_object($result)) {
    echo 
$row->name $row->amount;

Zuweisungen untereinander ausrichten mache ich allerdings eher nicht

Jeder hat so ein bisschen seine eigene Vorgehensweise, die einen nehmen den Standard als Grundlage, andere haben wiederum ganz andere Vorstellungen und folgen eher einem anderen Standard.

Für sinnvoll halte ich:
- Gewisse Breite nicht überschreiten (besonders wenn man mal mit Konsole gearbeitet hat lernt man es zu schätzen)
- bestimmte Schreibweise (entweder eineFunktion oder eine_funktion oder ..., aber nichts mischen)
Megger ist offline   Mit Zitat antworten An Facebook senden
Antwort

Themen-Optionen
Ansicht

Forumregeln
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:24 Uhr.


Style Copyright by Wrestling Forum
Content Relevant URLs by vBSEO 3.3.0