public void NextTurn(Player player) { if (Waiting.Contains(player)) { return; } Waiting.Add(player); if (AllPlayersReadyForNextTurn()) { Waiting.Clear(); if (TurnPhase == TurnPhase.Initial) { TurnPhase = TurnPhase.Middle; } else if (TurnPhase == TurnPhase.Middle) { foreach (string image in ImageSelections) { Votes.Add(image, 0); } TurnPhase = TurnPhase.Final; } else if (TurnPhase == TurnPhase.Final) { foreach (string image in ImageSelections) { Image.DestroyInstances(image); } RpcDestroySelectedImages(); for (int i = 0; i < Players.Count; i++) { if (Players[i].Name == TurnStartPlayer) { TurnStartPlayer = Players[(i + 1) % Players.Count].Name; break; } } List <string> keys = Votes.Keys.ToList(); foreach (string i in keys) { Votes[i] = ImageSelections.Count(obj => obj == i) - 1; } if (Votes[PlayerSelections[TurnStartPlayer]] == Votes.Values.Sum()) { foreach (Player i in Players) { if (i.Name == TurnStartPlayer) { i.Score += 1; } else { foreach (Player j in Players) { j.Score += Votes[PlayerSelections[j.Name]]; } } } } string msg = "result#" + Concept; foreach (KeyValuePair <string, int> i in Votes) { msg += "#" + i.Key + "," + i.Value; } ServerSocket.Send(msg); if (Players.Any(obj => obj.Score >= 10)) { RpcGameWonBy(Players.Find(obj => obj.Score == Players.Max(obj1 => obj1.Score)).Name); msg = "scores"; foreach (Player i in Players) { msg += "#" + i.Name + "," + i.Score; } ServerSocket.Send(msg); } PlayerSelections.Clear(); ImageSelections.Clear(); Votes.Clear(); Turn++; TurnPhase = TurnPhase.Initial; } RpcChangePhase(TurnPhase, TurnStartPlayer); } WaitingPlayers = "( " + Waiting.Count + " / " + Players.Count + " )"; }