Hi,
es mich interessiert schon lange, wie Browsergames funktionieren. Also habe ich beschlossen, mal ein paar Dinge nachzuprogrammieren. Ich will jetzt kein richtiges, vollständiges Browsergame programmieren, sondern nur mal ein paar Teile davon. Einfach um zu verstehen, wie das mit dem Gebäudeaufrüsten, den Rohstoffanzeigen etc. funktioniert.
Ich bin halt noch kein richtiger Profi in PHP. Beispielswesie fehlen mir alle Kenntnisse zu OOP (was ich aber jetzt lernen will). Und mir fehlen auch "Datenbank-Optimierungs-Kenntnisse". Aber mein Motto ist: learning-by-doing
Also hab ich mich mal drangesetzt und überlegt, wie man (in meinem Falle jetzt) diese Ressourcenanzeige da macht. Also wie man es schafft, das die immer steigt und steigt. Meine Idee ist, dass man in einer Datenbanktabelle die Anzahl der Rohstoffe und eine Zeit speichert. Dann kann man bei einem Reload die aktuelle Zeit mit der Zeit in der Datenbank subtrahieren und damit dann berechnen, wie viel Rohstoffe dazugekommen sind. Und dann die neuen Werte wieder in die Datenbank eintragen. Ob das jetzt die gängiste Methode ist, weiß ich nicht. Aber ich hab das Ganze mal versucht:
Ich hoffe, der Code ist nicht zu chaotisch. Ich hab immer noch Probleme damit, geeignete Variablennamen zu finden.
Meine Frage jetzt: Ist der Code grundsätzlich okay (abgesehen davon, dass er vllt umständlich programmiert ist oder so), oder wird das komplett anders geregelt?
Und noch was: Man hat ja nicht nur eine Ressource in einem Spiel, sondern mehrere. Schreibt man die dann in dieselbe Datenbanktabelle (z.B. eben in "ress")? Weil dann könnte man ja hier:
das
weglassen und per while-Schleife alle Ressourcen durch die Funktion jagen. Dann müsste man halt nur den Steigfaktor (in den Kommentaren vom Code erklärt) pro Ressource individuell einstellen.
Weil dieser Steigfaktor kann ja von z.B. ner Gebäudestufe abhängen. die Frage ist, wie man das dann macht. Sollte man dazu auch eine seperate Funktion erstellen, die dann den Steigfaktor berechnet, eben anhand von Gebäudestufen? Wenn ja, wo würde dann diese Funktion ausgeführt werden? Immer beim Reload der Seite, vor der berechnung der Ressoucen?
Danke schon mal für eure Hilfe.
Viele Grüße,
Dennis
es mich interessiert schon lange, wie Browsergames funktionieren. Also habe ich beschlossen, mal ein paar Dinge nachzuprogrammieren. Ich will jetzt kein richtiges, vollständiges Browsergame programmieren, sondern nur mal ein paar Teile davon. Einfach um zu verstehen, wie das mit dem Gebäudeaufrüsten, den Rohstoffanzeigen etc. funktioniert.
Ich bin halt noch kein richtiger Profi in PHP. Beispielswesie fehlen mir alle Kenntnisse zu OOP (was ich aber jetzt lernen will). Und mir fehlen auch "Datenbank-Optimierungs-Kenntnisse". Aber mein Motto ist: learning-by-doing

Also hab ich mich mal drangesetzt und überlegt, wie man (in meinem Falle jetzt) diese Ressourcenanzeige da macht. Also wie man es schafft, das die immer steigt und steigt. Meine Idee ist, dass man in einer Datenbanktabelle die Anzahl der Rohstoffe und eine Zeit speichert. Dann kann man bei einem Reload die aktuelle Zeit mit der Zeit in der Datenbank subtrahieren und damit dann berechnen, wie viel Rohstoffe dazugekommen sind. Und dann die neuen Werte wieder in die Datenbank eintragen. Ob das jetzt die gängiste Methode ist, weiß ich nicht. Aber ich hab das Ganze mal versucht:
PHP:
<?php
// Verbindung zur Datenbank herstellen
$db = @new MySQLi('localhost', 'root', '', 'browsergameTest');
if (mySQLi_connect_errno()) {
die('<fieldset>in index.php: Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error().'</fieldset>');
}
// Funktion zur Berechnung des neuen Ressourcenbestands
// Parameter sind name, alter Ressbestand und die alte Zeit aus der Datenbank
// Zusatzfunktion(geplant): Neuer Parameter: Steigfaktor
// -> Soll bestimmen, um wieviel die ress pro Stunde steigen sollen
// -> Ermöglicht das Ausbauen der Ressgebäude
function ressCalc($name,$ressOld,$timeOld) {
// Aktuelle Zeit bestimmen
$timeCurr = time();
// Zeitdifferenz bilden
$timeDiff = $timeCurr - $timeOld;
// Sekunden in Stunden umrechnen
$timeDiff = $timeDiff / 3600;
// Anzahl der Ressourcen, die Pro Stunde gutgeschrieben werden sollen
$ressAdd = $timeDiff * 10000;
// Alter Ressourcenbestand mit der hinzugekommenen Menge addieren
$ressNew = $ressOld + $ressAdd;
// Rückgabe per Array: Der Neue Bestand und die vorher bestimmte Zeit.
return array ($ressNew, $timeCurr);
}
// id, name, anzahl und zeit von Tabelle "ress" nehmen, bei id=1
$sqlQuery = $db->query("SELECT id,name,anzahl,zeit FROM `ress` WHERE `id`=1");
$value = $sqlQuery->fetch_assoc();
// Rückgabewerte der Funktion ressCalc in der Variable returns speichern
$returns = ressCalc($value['name'],$value['anzahl'],$value['zeit']);
// Den ersten Wert im Array, den Ressourcenbestand, in $ressNew speichern
$ressNew = $returns[0];
// Die Zeit in $timeCurr speichern
$timeCurr = $returns[1];
// Neue Werte in Datenbank eintragen
$sql= "
UPDATE ress
SET anzahl = $ressNew,
zeit = $timeCurr
WHERE id = 1
";
$insert = $db->query($sql);
// Aktuellen Ressourcenbestand ohne Komma ausgeben
echo "<b>".$value['name']."</b>: ";
echo (int) $ressNew;
?>
Ich hoffe, der Code ist nicht zu chaotisch. Ich hab immer noch Probleme damit, geeignete Variablennamen zu finden.
Meine Frage jetzt: Ist der Code grundsätzlich okay (abgesehen davon, dass er vllt umständlich programmiert ist oder so), oder wird das komplett anders geregelt?
Und noch was: Man hat ja nicht nur eine Ressource in einem Spiel, sondern mehrere. Schreibt man die dann in dieselbe Datenbanktabelle (z.B. eben in "ress")? Weil dann könnte man ja hier:
PHP:
$sqlQuery = $db->query("SELECT id,name,anzahl,zeit FROM `ress` WHERE `id`=1");
PHP:
WHERE id=1
Weil dieser Steigfaktor kann ja von z.B. ner Gebäudestufe abhängen. die Frage ist, wie man das dann macht. Sollte man dazu auch eine seperate Funktion erstellen, die dann den Steigfaktor berechnet, eben anhand von Gebäudestufen? Wenn ja, wo würde dann diese Funktion ausgeführt werden? Immer beim Reload der Seite, vor der berechnung der Ressoucen?
Danke schon mal für eure Hilfe.
Viele Grüße,
Dennis