Eventhandler (Miniversion)

S

shinobi89

Hi Leute,
ich hab folgendes Problem.
Der Hintergrund:
Ich möchte einen Eventhandler für ein Browsergame schreiben. Jetzt bitte keine Kommentare wie "oh nee nicht schon wieder einer mit nem BG" oder "gibt schon genug BGs" und so weiter.
Jetzt hab ich schon länger nach einem Tutorial für einen Eventhandler gesucht und bin hier auch fündig geworden, doch irgendwie hab ich nach einigen Stunden OOP-Einarbeitung immernoch dumm aus der Wäsche geguckt, da es sich doch ganz anders aufbaut und verhält als normales Skripting.

Meine Frage:
Ich habe jetzt 3 php-Dateien, welche ein super kleines mini Ausbauskript wiederspiegeln sollen. Die erste für den Button zum Ausbauen, die zweite um das ganze in eine DB einzutragen und die dritte (der EH) liest nun im Sekundentakt die Daten aus und erhöht die Stufe wenn die Bedingung zutrifft.
Ist es nun theoretisch möglich, die Idee bzw. das Konzept des Mini-EHs weiter auszubauen und mittels Funktionen einen EH ganz ohne Funktionen zu schreiben?

Hier die Quelltexte:
Button:
PHP:
<?php include 'inc.php'; //Included die Datenbankdaten und verbindet sich
$result = mysql_query('SELECT * FROM gebaeude');
$geb = mysql_fetch_array($result, MYSQL_BOTH);
$stufe = $geb[1];


echo '<form action="geb_eintragen.php" method="post">';
echo '<input type="hidden" value="'.$stufe.'" name="stufe">';
echo 'Geb&auml;ude (Stufe '.$stufe.') ';
echo '<input type="submit" value="Ausbauen">';
echo '</form>';
?>
Schreiben in die Datenbank:
PHP:
<?php include 'inc.php';
$fertig = time() + 30;
$result = mysql_query('INSERT INTO bauliste (id, fertigstellung) VALUES ("1", "'.$fertig.'")');
header('Location: index.php');
?>
EH:
PHP:
<?php include 'inc.php';
$result = mysql_query('SELECT * FROM bauliste');
$erg = mysql_fetch_array($result, MYSQL_BOTH);
$fertig_am = $erg[1];
$result2 = mysql_query('SELECT * FROM gebaeude');
$erg2 = mysql_fetch_array($result2, MYSQL_BOTH);
$stufe = $erg2[1] + 1;
$bed = true;

while($bed)
{
	if(time() == $fertig_am)
	{
		mysql_query('UPDATE gebaeude SET stufe = "'.$stufe.'" WHERE id="1"');
		mysql_query('DELETE FROM bauliste WHERE id = "1"');
		$bed = false;
		header('Location: index.php');
	}
	else
	{
		
	}
       sleep(1);
}
?>
 
Nur so eine Zwischenfrage: was hat das Ganze jetzt mit Objektorientierter Programmierung zu tun?

Da ich mir das vorerst ersparen wollte, gehts darum, ob sich das alles umgehen lässt und ob das Sinn macht, oder es einfacher ist, direkt alles in OOP zu machen.
Und meine Frage, ob es halt Sinn macht, den EH den ich da gepostet hab, weiter zu verfolgen oder lieber einen anderen Weg einzuschlagen
 
Ich frage mich die ganze Zeit, ob bei dir nicht eher AJAX gefragt sei. Außerdem ist es doch recht Performancelastig, wie du es lösen willst.
 
Ich kann crack nur zustimmen.

Allein der "Sekundentakt" dürfte relativ schwierig zu realisieren sein - unabhängig davon ob er rein in PHP oder per Cronjob realisiert wird.
Entweder ist es ein Performancekiller oder aber unzuverlässig, was die Genauigkeit angeht.

Es wäre viel sinnvoller lediglich beim Aktualisieren der Seite die zeitliche Differenz zwischen "jetzt" und dem vorherigen Aufruf zu errechen und anhand dieser alle notwendigen Berechnungen nachzuholen.
Denn ob man jetzt jede Sekunde 1 Mengeneinheit bei User A abzieht, ober aber ob man erst beim laden der Seite die Differenz - bei 10 Sekunden also 10 x 1 Einheit abzieht, ist vollkommen irrelevant.

Damit verteilt sich auch die Last auf die einzelnen Ladevorgänge und es müssen nicht im Sekundentakt die Daten aller User berechnet werden.

Mit AJAX hat das bis hier hin - meiner Meinung nach - sehr wenig am Hut. :)
 
Mit AJAX meinte ich, dass er es ja scheinbar auch sekündlich aktualisiert angezeigt haben will und somit AJAX praktisch wäre :)
 
Auch dann macht AJAX nur in Ausnahmefällen Sinn.

Man greife nur auf das erst gestern hier im Forum erwähnte Browsergame "Pennergame" zurück.
Alleine in diesem waren zum gestrigen Zeitpunkt mehr als 25.000 User online.
Wenn nun jeder einzelne Client im Sekundentakt auf den Server einhämmert, wie soll das bitte noch performant bleiben?

Man muss dynamische Anzeigen einfach in JavaScript auslagern. Ob der User nun tatsächlich x Einheiten pro Sekunde in der Datenbank auf dem Server bekommt darf ihm doch "Schnurz Piep egal" sein, hauptsache er bekommt sie.

Es reicht vollkommen aus, wenn er das Gefühl hat es würde alles "jetzt und sofort" ausgeführt werden. ;)
 
Zuletzt bearbeitet:
mhh ja okay das mit der Performance ist natürlich n Schlagwort, welches man berücksichtigen muss. Dann muss ich mir wohl noch das eine oder andere Tut für AJAX reinpfeifen und das mit dem Berechnen auch umbauen. Allerdings stellt sich mir dann die Frage wie das mit Kämpfen aussehen soll. Nicht das diese überwiegend häuig am Anfang auftreten werden, aber...
dabei ist es doch so, dass wie im Beispiel Ogame (bestimmt auch n beliebtes Beispiel hier :) ) die Zeiten der Kämpfe in der Datenbank abgelegt werden und per EH ausgelesen und an ein Kampfskript geschickt werden. Oder wie soll das erreicht werden. Denn wenn ichs richtig verstehe kommt es bei der Möglichkeit von Deluxe darauf an, dass der User einen Klick macht und dann die Berechnungen ausgeführt werden. Doch was ist wenn User1 offline ist und von User2 angegriffen wird, User2 geht allerdings für die Zeit in der der Kampf stattfinden soll offline. Damit würde die Berechnung ja erst ausgeführt werden wenn User2 wieder online geht. Wenn jetzt aber User1 in der Zwischenzeit online geht und sieht er wird angegriffen, aknn er ja in aller Ruhe saven.
Oder lieg ich da jetzt falsch?
 
Ich habe selber vor Jahren OGame gespielt und weiß deshalb, dass man, wenn man sieht, dass man angegriffen wird, seine Rohstoffe sichern kann. Das würde also deine Frage in der Hinsicht lösen oder sollte ich mich täuschen?
 

Neue Beiträge

Zurück