Simples Online-Highscore System

    • GM 8

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Simples Online-Highscore System

      Hallo Community,

      dies ist mein erstes Tutorial hier.
      In diesen Tutorial werde ich nur Grundlagen eines Online-Highscores durchgehen, aber an geeigneter Stelle auch persönliche Kommentare niederschreiben.
      Die ganzen Daten, werde ich als Beispiel Datei zusammen packen

      Was ihr braucht:
      - Gamemaker 8 (mit Studio sollte es genauso gehen, welche Befehle darin nicht gehen, habe ich kommentiert)
      - Http-Extension Link
      - etwas Webspace mit einer dazugehörigen SQL-Datenbank (PHP 5 und MySQL-Server 4.1)
      - etwas PHP-Kenntisse

      Erste Schritte:
      Ich persönlich würde empfehlen ersteinmal zu überlegen was Ihr alles speichern wollt und dieses schriftlich festhalten.
      Hier in den Fall erstellen wir ein simples Highscore-System
      Wir werden vom Gamemaker folgende Infos erwarten und erhalten:
      - Name
      - Punkte

      Also erstellen wir als erstes in der Datenbank eine Tabelle(Highscore) mit 2 Spalten:
      - Name (String)
      - Punkte (String oder Interger) - Ich habe mich für String entschieden, da die Daten nur ausgegeben werden und nicht weiter verarbeitet werden

      So nun ist die Datenbank da, aber wie füllen wir diese?

      Nun fangen wir erstmal mit den php Dateien des Webservers an. Wir benutzen mMySQLi, dies ist eine object-orientierte Variante des
      Programmierens in PHP. Der Vorteil ist, das wir uns dabei keine Gedanken um SQL_Injection kümmern müssen, da diese automatisch verhindert werden.
      Achtung!!! Anders als im gml verzeiht php vergessene ";" Zeichen nicht

      db.php - Die Verbindung zu Datenbank
      Spoiler anzeigen

      PHP-Quellcode

      1. <?php
      2. //Verbindung zur Datenbank erstellen
      3. $mysqli = new mysqli("Host", "Benutzername", "Password","Datenbank-Name");
      4. if ($mysqli->connect_error) {
      5. //bei Fehler -> Fehlermeldung erstellen
      6. echo "Fehler bei der Verbindung:" .mysqli_connect_error();
      7. exit();
      8. }
      9. ?>

      Ja dies ist schon alles, wir werden später auf diese Datei per PHP zugreifen um einerseits Schreibarbeit zu sparen und andererseits Übersicht im PHP-Code zu erhalten!



      upload.php
      Spoiler anzeigen

      PHP-Quellcode

      1. <?php
      2. //"Post"daten die später vom Gamemaker gesendet werden
      3. //kann zur Sicherheit mit Sessions und Timestamps erweitert werden
      4. $name=$_POST["Benutzer"];
      5. $punkte=$_POST["points"];
      6. //Zugriff zur Datenbank erhalten
      7. require_once "db.php";
      8. //Daten werden vorbereitet, auch wird hier die o.g. SQL-Injection verhindert
      9. if($stmt =$mysqli->prepare("INSERT INTO Highscore (Name, Punkte) VALUES (?, ?)")){
      10. //hier werden die Daten entsprechend in ihrer Art Umgewandelt, s entspricht in diesen Fall s->String
      11. $stmt->bind_param("ss", $name, $punkte);
      12. //das execute, heißt einfach, das die Daten, wenn es keine Fehler gibt, nun an die Datenbank gesendet werden
      13. $stmt->execute();
      14. //da wir die "Objekte" nicht mehr brauchen, werden sie wieder entfernt
      15. $stmt->close();
      16. $mysqli->close();
      17. }
      18. ?>
      Alles anzeigen


      Das war es schon mit den Upload der Daten.
      Man könnte nun das ganze wie im Kommentar genannt noch mit Sessions und Timestamps absichern, aber das würde den Rahmen sprengen.
      Wer auf Nummer sicher gehen will kann nach Sessions und Timestamps googeln.

      So, um das ganze wieder aufzurufen brauchen wir eine Datenbank-Abfrage, natürlich auch in PHP

      highscore.php
      Spoiler anzeigen

      PHP-Quellcode

      1. <?php
      2. //Wieder mit Datenbank verbinden,
      3. require_once "db.php";
      4. //Anmerkung: da wir komplett in Php schreiben, brauchen wir die "echo". D.h. in PHP soviel wie: "Schreib in html das was bei mir steht"
      5. //Wir holen uns nun die Daten aus der Datenbank, allerdings habe ich hier in der Abfrage gleich eine Sortierung nach Punkten und ein Begrenzung auf die
      6. //ersten 10 Plätze drin
      7. $daten= $mysqli->query("SELECT * FROM Highscore ORDER BY Punkte DESC LIMIT 10 ");
      8. //Wir erstellen zuerst ein Tabelle,
      9. echo '<table border="1" align="center" >';
      10. echo ' <tr>';
      11. echo ' <th>Platz</th>';
      12. echo ' <th>Name</th>';
      13. echo ' <th>Punkte</th>';
      14. echo ' </tr>';
      15. //Die Variable $i wird auf 1 gesetzt, dies dient gleich der Anzeige der Platzierung
      16. $i=1;
      17. //Nun werden die ganzen Daten die wir erhalten haben in einen Array gespeichert
      18. while ($zeile= $daten->fetch_array()){
      19. //und das ganze in einer Schleife(soviel Einträge wie im Array stehen) ausgegeben
      20. echo ' <tr align="center">';
      21. echo ' <td>'.$i.'.</td>'; //Der Platz
      22. echo ' <td>'.$zeile[Name].'</td>'; //der Name
      23. echo ' <td>'.$zeile[Punkte].'</td>';// die Punkte
      24. echo ' </tr>';
      25. $i+=1; //Platzierung wird um 1 erhöht
      26. }
      27. echo '</table>';
      28. //Und wieder werden die "Objecte" entfernt
      29. $daten->close();
      30. $mysqli->close();
      31. ?>
      Alles anzeigen


      So das waren erstmal die Dateien die außerhalb vom Gamemaker erstellt werden. Diese müsste ihr natürlich auf euren Webspace uploaden!
      db.php
      upload.php
      highscore.php

      Nun kommen wir zur http-Extension, um die Daten an unsere upload.php zu schicken.

      Wir erstellen ein upload Objekt was im Create folgendes bekommt.

      GML-Quellcode

      1. //Hier im Beispiel habe ich mit get_string gearbeitet, dies geht im Studio NICHT.
      2. //Allerdings habt ihr an dieser Stelle den Namen und die Punkte bestimmt in andere Variablen gespeichert
      3. //Dies dient jetzt nur zur Veranschaulichung
      4. global.name=get_string("Dein Name?", "Name");
      5. global.punkte=get_string("Wieviele Punkte?", "9999");
      6. request = http_request_create();
      7. http_request_set_url(request,"http://eure upload.php");
      8. http_request_add_post_string(request,"Benutzer",Name); //Name -> Benutzername
      9. http_request_add_post_string(request,"points",Punkte); //Punkte -> Punkte die gesendet werden sollen
      10. http_request_perform(request);
      11. http_request_wait(request);
      12. if (http_request_get_successful(request)) {
      13. show_message("Daten gesendet") ////show_message nicht im GM-Studio benutzbar
      14. http_request_destroy(request);
      15. }else
      16. {
      17. show_message("Fehler, Hast du die Korrekten Links und Datenbank Daten angegeben?")//show_message nicht im GM-Studio benutzbar
      18. http_request_destroy(request);
      19. }
      Alles anzeigen


      Das war es auch schon.
      Ich hoffe es kann jemand für sein Projekt verwenden

      highscore_example.zip - die Beispiel-Datei ist so nicht nutzbar, ihr braucht noch Webspace und eine Datenbank

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Baruter ()