Für den vierten Meilenstein habe ich mit intensiv mit dem Referee für unser Game auseinandergesetzt. Da der Lebensstand eines Spielers eine wichtige Komponente der Gewinnerbestimmung ist, soll das Spiel fair ausgewertet und jegliche Cheatversuche unterbunden werden.
Auch wenn die Berechnung der Kollisionen zwischen Spielern und Blöcken auf der Clientseite stattfinden, musste man einen Weg finden, dem Server die relevanten Entscheidungen zu überlassen. Aber wie?
Jeder Client verfügt über alle Informationen aller anderen Clients, welche sich in der gleichen Lobby befinden. Anders gesagt: sammelt ein Spieler ein Herz auf, so sollten das alle anderen Clients auch gesehen haben.
Matthias kam mit der Idee, eine Art Voting auf der Serverseite zu machen. Realisiert ein Client x, dass es zu einer Veränderung des Lebensstands von Client y kam, verschickt dieser ein Paket an den Server mit der Clientid des betroffenen Spielers(y) und dem Lebenstatus, den Client y nun haben sollte. Der Server erstellt beim Eintreffen des ersten Pakets einen Referee, der die weiteren Pakete der anderen Clients bezüglich der Veränderung des Lebenstands von Client y aufsammelt. Hat der Referee genug Meinungen aufgesammelt und stimmen diese wiederum überein, erstellt der Server ein Antwortpaket mit dem neuen validierten Lebenstand von Client y und deren Clientid. Das Paket wird an die Lobby versendet, worauf jeder Client den Lebenstand des betroffenen Spielers updated.