Dienstag, 1. April 2014

Realisierung - Multiplayer

Der Singleplayer-Modus von Sechzehn war inzwischen fertig. Man konnte bereits ein Spiel erzeugen, drei Minuten lang Wörter raten, und nach Spielende die Auswertung und die Lösung begutachten. Das Layout des Spiels entsprach zu diesem Zeitpunkt schon dem, was man heute sehen kann. Nun galt es also, Sechzehn zum Multiplayer Spiel zu machen.

Multiplayer


Das Ruby on Rails Framework wartet auf Browseranfragen, führt dann eine Funktion aus, und liefert das Ergebnis - meistens HTML - an den anfragenden Browser zurück. Danach wartet Ruby on Rails auf die nächste Browseranfrage. Es gibt also keinen Spieleserver der kontinuierlich im Hintergrund alle paar Minuten ein neues Spiel erzeugt. Vielmehr muss die Erzeugung des nächsten Spieles von außen angestoßen werden.

Meine Lösung besteht darin, dass ich mir für jedes Spiel merke, wann es erzeugt wurde. Wenn ein Spieler Sechzehn spielen möchte, schau ich erst nach, wie alt das letzte Spiel ist. Ist es jünger als drei Minuten, kann der Spieler sofort für die Restdauer des Spieles mitspielen. Ist das letzte Spiel aber älter als drei Minuten, dann wird ein neues Spiel berechnet. Sollte in der Zeitspanne, in der ein neues Spiel errechnet wird, ein zweiter Spieler ebenfalls feststellen, dass das letzte Spiel älter als drei Minuten ist, wird dieser gebeten, in einer Sekunde noch einmal nachzufragen, ob das neue Spiel bereits fertiggestellt ist.

Auf diese Weise ist immer ein Spiel vorhanden, an dem alle gerade aktiven Spieler gemeinsam teilnehmen können. Das Multiplayer-Modus Problem war gelöst.