예제 #1
0
    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 + " )";
    }