Wie man ein Client / Server-Spiel mit Google App Engine erstellt (Tutorial suchen.)

11

(HINWEIS: Dies ist ein Duplikat einer Frage, die ich auf SO gestellt habe, nachdem ich GameDev vorübergehend vergessen habe. Wenn einer beantwortet wird, werde ich ihn wieder mit dem anderen verknüpfen.)

Ich versuche, mein erstes Client / Server-Spiel mit Google Apps Engine als Back-End zu erstellen (Spezifikationsanforderung). Ich habe die Tutorials (Java) durchgeführt, aber das scheint alles sehr browserorientiert zu sein.

Grundsätzlich möchte ich, dass meine (mobile, nicht dass es wichtig ist) App:

  • Erlaube dem Nutzer, ein Spielkonto zu erstellen (NICHT sein Google-Konto!)
  • Melden Sie sich mit diesem Konto an.
  • Drücken Sie die Taste "MARCO", um eine vom Konto identifizierte Anfrage an den Server zu senden.
  • Erhalten Sie eine "POLO" -Antwort vom Server.
    • Als Daten (wie ein JSON-Objekt, XML-DOM oder ähnliches), nicht als Webseite.

Kann mich jemand auf ein gutes Tutorial / Beispielprojekt / eine ausführliche Lektüre verweisen, um dies zu erreichen? Ich bin mir ziemlich sicher, dass ich, sobald ich das zum Laufen gebracht habe, den ganzen Rest erledigen kann - aber ich habe das Problem "am Start hängen geblieben", weil ich nicht in der Lage bin, die grundlegende Kontoanmeldung zu bearbeiten, und Nicht-HTML-Datenaustausch.

Vielen Dank!

Olie
quelle
Wird die Serverseite in Java oder Python geschrieben? Wird eine einfache Datenbank auf dem Server ausreichen oder müssen Sie viel Spielelogik ausführen?
Alex Schearer
@ Alex: Ich schreibe in Java. Es wird sowohl eine einfache Datenbank als auch eine Spielelogik geben, obwohl ich nicht sicher bin, warum das für meine Frage wichtig ist. Der Teil, in dem ich stecken bleibe, ist das Einrichten der Benutzerauthentifizierung. Das Marco / Polo-Beispiel war nur ein trivialer Austausch von Spieldaten, aber der Hauptteil, mit dem ich Probleme habe, ist die Benutzerauthentifizierung.
Olie

Antworten:

3

Ich habe ein funktionierendes Beispiel für ein Client / Server-Spiel, das auf App Engine basiert. Sie können es auf GitHub teilen und die Live-Demo ausprobieren .

Ich habe noch nicht darüber geschrieben oder so, aber der Code ist relativ gut kommentiert. Habe Spaß!

richtaur
quelle
0

Für etwas so Einfaches würde ich die Verwendung von Python empfehlen (und im Allgemeinen ist die Erfahrung mit Python GAE ziemlich gut.)

Ich bin mir ziemlich sicher, dass für das, was Sie tun möchten, das einfache Tutorial und die Dokumentation der App-Engine ausreichen würden. Sie möchten eine Anwendung mit 3 Controllern erstellen (Anmeldeinformationen überprüfen, Anmeldeinformationen erstellen und marco-polo beantworten).

Es gibt eine Reihe von Open-Source-Beispielen für Python-Code für die App-Engine in Github und eine Menge Dokumentation auf der offiziellen Website. Ich würde sagen, probieren Sie es aus und wenn Sie auf eine Wand stoßen, stellen Sie eine bestimmte Frage = D.

Ich hoffe, das hilft!

DFectuoso
quelle
Das Erlernen einer neuen Sprache (Python) ist nicht in der Client-Spezifikation enthalten. Ich kenne Java und bin pünktlich. Die Objekthierarchie sollte alle ähnlich sein, nein? Ich verstehe, dass das, was ich frage, sehr, sehr einfach ist. Aber ich habe die Tutorials gemacht und es klickt einfach nicht für mich. Außerdem zeigen die Tutorials nicht ganz, was ich verlange, und ich kann nicht genau herausfinden, wie man in "Nicht-Google-Konten" konvertiert.
Olie
0

Der Teil, der für mich nicht geklickt hat - und, wie ich vermutete, sehr, sehr einfach war - war, dass es nur darum geht, die Routine doPost () (oder doGet () zu implementieren, aber ich verwende die POST-Routine) und schreibe zurück zum Antwortenden.

Es gab auch einige Punkte, die ich beim ersten Einrichten der Responder-Klassennamen und -URLs in der Datei web.xml (im War-Ordner) nicht ganz richtig befolgt habe.

Sobald ich das (web.xml) richtig eingerichtet hatte, war die doPost () - Routine einfach etwas in der Art von:

public void doPost(HttpServletRequest req, HttpServletResponse resp)
  throws IOException {
    String reqTypeStr = req.getParameter("reqType");
    if (reqTypeStr.equalsIgnoreCase("marco")
        resp.getWriter().println("Polo!");
    else
            resp.getWriter().println("huh?");
}

Es gibt unzählige andere Details, aber diese beiden haben mich am meisten aufgehängt. Sobald ich diese einfache Barriere durchbrochen hatte, floss alles andere sehr schnell zusammen.

Olie
quelle
HINWEIS: Dies weist mich immer noch nicht auf ein anständiges Tutorial / eine exemplarische Vorgehensweise hin, was ich ursprünglich gefragt habe. Wenn mich jemand auf ein brillantes davon verweist, werde ich dies als die richtige Antwort markieren.
Olie