Welche Logik erwartet der Spieler in einem Tick-basierten Spiel?
Hier die Ausgangssituation: ein Tick-basiertes Spiel; sagen wir ein Tick alle 60 Minuten. Das Interface ist komplett mit AJAX aehnlicher Technologie entwickelt, d.h. wenn der Spieler eine Aktion ausloest geht eine Anfrage an den Gameserver - der antwortet entsprechend der Spiellogik. Der Client kann dann mit der Antwort etwas anfangen und verarbeitet sie entsprechen. Wichtige Punkte zu beachten: die Seite wird nicht neu geladen wenn der Spieler eine Anfrage schickt. Die Aenderungen die ein Spieler taetigt (sagen wir eine Zahl in eine Textbox eintragen) gehen auch nicht verloren.
Das erste Problem das ich bereits geloest habe (glaube ich) ist folgendes: das Spiel berechnet grade einen Tick und der Spieler schickt eine Anfrage etwas zu aendern (Schiffe zu bauen z.B.). Die Tick-Routine ist grade mitten drin, darum schickt der Server die Antwort, dass das Spiel gerade tickt und er es in ein paar Sekunden nochmal probieren soll. Die Aenderungen die der Spieler vorgenommen hat werden nicht uebernommen, allerdings sind sie noch im User Interface weil die Seite nicht neu geladen wurde. Er muss also einfach in ein paar Sekunden nochmal "absenden" druecken und alles ist gut. Oder? ...
Beim zweiten Problem, und das geht direkt Hand in Hand mit dem Ersten ist mir nicht so ganz klar was die bessere Logik waere: der Spieler logt sich ein, seine Mama ruft ihn zum Abendessen. Er kommt 30 Minuten spaeter wieder an den PC (ist immer noch eingeloggt) und moechte jetzt eine Aenderung abschicken. In der Zwischenzeit hat das Spiel aber getickt. Der Spieler nimmt also seine Aenderungen auf Basis eines alten Spielstands vor. Er schickt also eine Anfrage zur Aenderung an den Server. Nun habe ich es so gemacht, dass der Server merkt wenn der Client einen alten Spielstand hat weil vom Client immer die Tick Nummer mitgeschickt wird. Was soll aber jetzt passieren: soll die Aenderung uebernommen werden oder soll sie verworfen werden mit dem Hinweis an den Benutzer, dass das Spiel getickt hat? Soll das Spiel den neuen Spielstand automatisch an den Benutzer schicken und damit seine Aenderung auch in der Benutzeroberflaeche loeschen?
Wie loest ihr sowas? Habt ihr aehnliche Situationen? Welche Spiellogik erwartet der Spieler?
Viele Gruesse,
cherry