Fehler beim Erstellen des Browsergames von CookieBuster

maxi-koch-de

Mitglied
Hallo liebe Tutorialjaner,
Ich habe folgendes Problem mit dem Tutorial:
Ich habe wie es im Tutorial Teil 1 die PHP codes in Einer datei erstellt der Erste fehler war schnell behoben da in zeile 43 (Login in die Datenbank) ein Passwort vorhanden sein muss! So danach kamm leider eine lehre zeile habe alles mit XAMPP auf meinem PC (Also imprinziep Home server) hoch geladen.
Jetzt kommt aber eine leere seite im quell text steht leider NIX drin:
PHP:
<?php
class Game {
    /**
     * Id des Nutzers
     */
    private $Id = NULL;

    /**
     * Name des Nutzers
     */
    private $Name = NULL;

    /**
     * Die aktuelle Goldmenge im Besitz des Nutzers
     */
    private $CurGold = NULL;

    /**
     * Die neu hinzugekommene Goldmenge
     */
    private $NewGold = NULL;

    /**
     * Die Erfahrung des Nutzers
     */
    private $Xp = NULL;

    /**
     * Das Level des Nutzers
     */
    private $Level = NULL;

    /**
     * Die benötigte Erfahrung bis zum jeweils nächsten Level
     */
    private $XpToNextLevel = array(1 => 3000,2 => 10000,3 => 25000,4 => 55000,5 => 87000,6 => 125000,7 => 200000,8 => 250000,9 => 500000);

    /**
     * Konstruktor der Klasse, Initialisiert die nötigen Variablen und stellt eine Verbindung zur Datenbank her
     * @param $Name Der Name des Nutzers
     */
    public function __construct($Name) {
@mysql_connect(localhost, root, **********) OR die('Verbindungsaufbau zu MySQL Fehlgeschlagen!');
    @mysql_select_db(bg) OR die('Verbindungsaufbau zur Datenbank Fehlgeschlagen!');
        $this->GetUserByName($Name);
    }

    /**
     * Ließt einen Nutzer anhand seines Namens aus der Datenbank aus
     *  @param $Name Der Name des Nutzers
     */
    private function GetUserByName($Name) {
        // Leerzeichen entfernen am Anfang und Ende
        $Name = trim($Name);
        // Sollte ein leerer String übergeben worden sein, FALSE zurückgeben
        if(empty($Name))
            return FALSE;
        // Den Nutzer in der Datenbank suchen, per name
        $MySQLResult = @mysql_query('SELECT * FROM user_data WHERE name = "'.mysql_real_escape_string($Name).'" LIMIT 1');
        // Wenn der Nutzer nicht vorhanden ist, FALSE zurückgeben
        if(!mysql_num_rows($MySQLResult))
            return FALSE;
        // Die Daten in eine Variable speichern
        $Entry = mysql_fetch_object($MySQLResult);
        // Die Daten der Speicherfunktion übergeben
        $this->SaveData($Entry);
        return TRUE;
    }

    /**
     * Speichert die Daten eines Nutzers aus der Datenbank in das Objekt
     * @param $Data Die zu speichernden Daten
     */
    private function SaveData($Data) {
        $this->Id = $Data->id;
        $this->Name = $Data->name;
        $this->CurGold = $Data->gold;
        $this->Xp = $Data->xp;
        $this->Level = $Data->level;
        return TRUE;
    }

    /**
     * Die Hauptfunktion, durch diese werden alle nötigen Funktionen für das Spiel aufgerufen
     */
    public function Game() {
        if($this->CheckIp(86400)) { // Wird nur ausgeführt wenn die Ip nicht gebannt ist (Zeitsperre)
            // Das neue Gold wird errrechnet (Zufall)
            $this->SetGold(1, 100);
            // Die neue Xp wird errechnet (PLUS Zufall)
            $this->SetXp(300, 1500);
            // Prüfen ob Level erhöht werden muss, ggf erhöhen
            $this->SetLevel(10);
            // Alle Daten speichern
            $this->SaveDataToDB();
            return TRUE;
        } else {
            return FALSE;
        }
        return FALSE;
    }

    /**
     * Errechnet ein zufälligen Wert abhängig vom Level des Nutzers, das zusätzliche Gold des Nutzers
     * @param $Min Der Mindestwert an erhaltenem Gold
     * @param $Max Der Maximalwert an erhaltenem Gold
     */
    private function SetGold($Min, $Max) {
        // Einen zufälligen Wert generieren
        $this->NewGold = mt_rand($Min, $Max) * $this->Level;
        // Die Goldmenge erhöhen
        $this->CurGold += $this->NewGold;
        return TRUE;
    }

    /**
     * Setzt die Xp des Nutzers um einen zufälligen Wert nach oben
     * @param $Min Der Mindestwert an erhalterner Erfahrung
     * @param $Max Der Maximalwert an erhaltener Erfahrung
     */
    private function SetXp($Min, $Max) {
        $this->Xp += mt_rand($Min, $Max);
        return TRUE;
    }

    /**
     * Setzt das Level des Nutzers fest, anhand eines vorher initialisierten arrays
     * @param $MaxLevel Das höchste erreichbare Level
     */
    private function SetLevel($MaxLevel) {
        if(($this->Level < $MaxLevel) && ($this->Xp >= $this->XpToNextLevel[$this->Level]))
            $this->Level++;
        return TRUE;
    }

    /**
     * Prüft ob die Ip des aktuellen Besuchers bereits in der Datenbank gespeichert ist, ggf wird sie vorher gelöscht
     * @para $DeleteAfter Nach wie vielen Sekunden die Ips gelöscht werden
     */
    private function CheckIp($DeleteAfter) {
        if($this->GetIps($DeleteAfter))
            return FALSE; // Wenn GetIps TRUE zurück gibt, ist die Ip vorhanden
        else
            return TRUE; // Wenn GetIps FALSE zurück gibt, ist die Ip nicht vorhanden
    }

    /**
     * Sucht die Ips des aktuellen Besuchers in der Datenbank
     * @param $DeleteAfter Nach wie viele Sekunden die Ips gelöscht werden
     */
    private function GetIps($DeleteAfter) {
        // Die alten Ips zurerst löschen
        $this->DeleteOldIps($DeleteAfter);
        // Zeile(n) mit der Ip des aktuellen Besuchers auslesen
        $MySQLResult = @mysql_query('SELECT * FROM ip_ban WHERE ip_adress = "'.mysql_real_escape_string($_SERVER['REMOTE_ADDR']).'"');
        if(mysql_num_rows($MySQLResult))
            return TRUE; // Wenn mindestens 1 Zeile vorhanden ist, TRUE zurückgeben
        else
            return FALSE; // Wenn keine Zeile vorhanden ist (0) FALSE zurückgeben
    }

    /**
     * Löscht Ips die länger als die vorgegebene Zeit in der Datenbank stehen
     * @param $DeleteAfter Nach wie viele Sekunden die Ips gelöscht werden
     */
    private function DeleteOldIps($DeleteAfter) {
        $MySQLResult = @mysql_query('DELETE FROM ip_ban WHERE ((update_time + '.(int)$DeleteAfter.') < NOW());');
        return TRUE;
    }

    /**
     * Bannt eine Ip, dh speichert sie in die Datenbank
     */
    private function BanIp() {
        $MySQLResult = @mysql_query('INSERT INTO ip_ban (ip_adress) VALUE ("'.mysql_real_escape_string($_SERVER['REMOTE_ADDR']).'")');
        return TRUE;
    }

    /**
     * Speichert alle Daten in die Datenbank
     */
    private function SaveDataToDB() {
        // Die Ip des aktuellen Besuchers bannen (in die Datenbank speichern)
        $this->BanIp();
        // Die Daten in der Klasse speichern
        $MySQLResult = @mysql_query('UPDATE user_data SET gold = '.(int)$this->CurGold.', xp = '.(int)$this->Xp.', level = '.(int)$this->Level.' WHERE id = '.(int)$this->Id);
        return TRUE;
    }

    /**
     * Zum ausgeben der Privaten Variablen, magische Methode, wird nicht direkt aufgerufen
     * @param $Name der Name der auszugebenen Variablen
     */
    public function __get($Name) {
        return $this->$Name;
    }
}
 ?>

Vielen dank Schon mal in voraus!
SRY wegen den schreib fehlern musste es sehr schnell tippen da ich eine ganze seite noch fertigen muss mfg
maxi-koch-de
maxi-koch.de
 
Und wo ist das Problem?
Das ganze Skript ist eine PHP Klasse und wenn man die Klasse nicht aufruft, passiert dementsprechend auch nichts.
 
Ich vermute mal durch instanzieren der Klasse mit new und dann der Methode Game().
Aber wenn du da bereits scheiterst, vermute ich, dass dir dieses Spiel nicht viel bringen wird, da es nur als Grundstein anzusehen ist, nicht als vollwertig funktionierendes Browsergame.

Achte bitte mehr auf deine Groß- und Kleinschreibung.
 
Mhhh
1. Leider habe ich es nicht so mit php also wenn ich z.b das in die Webseite einbinde und als Code einfach einfüg so wie es ist klappt es dann oder?
2. Ok aber es muss doch wenigstens das Grundspiel aufrufbar sein!
3. Ja versuche es mit Groß und Klein Schreibung .
 
Zuletzt bearbeitet:
Deshalb hat CookieBuster es ausdrücklich als DoItYourSelf Tutorial ausgezeichnet.

Und nein, den Code einfach irgendwo einfügen, klappt nicht.

Man könnte die Klasse so aufrufen:

PHP:
$game = new Game;

$game->Game();

Ob das dann einfach so funktioniert, kann ich dir nicht sagen.
 
So habe das nun gamacht:
1. Code Zeile 1-9
PHP:
<?php
$game = new Game;

$game->Game(); {
    /**
     * Id des Nutzers
     */
    private $Id = NULL;
2. Jetzt kommt folgen der Fehler Parse error: syntax error, unexpected T_PRIVATE in C:\xampp\htdocs\browsergame\Game.class.php on line 9
was kann ich nun machen?


PS: Sonst müsste es jetzt klappen also das Grundgerüst!
 
Ich habe nirgendwo gesagt, dass du den bestehenden Quelltext ändern sollst!

Das ganze sollte unter den Quelltext der Klasse eingefügt werden.

Und selbst wenn das Spiel funktioniert, wird es KEINE Ausgabe geben, denn das Spiel hat an keiner Stelle eine Ausgabe.
 
Zurück