Exemple #1
0
        /// <summary>
        /// Place the specified card by the specified player in the current trick.
        /// And evaluate the trick to determine the winner
        /// </summary>
        public void PlaceCard(Player player, Card card)
        {
            PlayerPosition position = gameSession.GetPlayerPosition(player);

            if (position == CurrentTurn)
            {
                Card tempCard;
                if (!CurrentTrick.TryGetValue(position, out tempCard))
                {
                    if (ValidatePlay(position, card))
                    {
                        CurrentTrick[position] = card;
                        PlayerCards[position].Remove(card);
                        if (CurrentTrick.Values.Count == 1)
                        {
                            //First card in the trick
                            CurrentTrickBaseSuit = card.Suit;
                        }

                        if (CurrentTrick.Values.Count >= 4)
                        {
                            //Trick is complete -> evalueate
                            PlayerPosition trickWinner = EvaluateCurrentTrick();
                            CurrentTurn = trickWinner;

                            switch (trickWinner)
                            {
                            case PlayerPosition.North:
                            case PlayerPosition.South:
                                TricksWon[TeamPosition.NorthSouth]++;
                                break;

                            case PlayerPosition.East:
                            case PlayerPosition.West:
                                TricksWon[TeamPosition.EastWest]++;
                                break;
                            }
                            CleanCurrentTrick();
                            currentNumberOfTricks++;

                            if (IsComplete)
                            {
                                gameSession.GameComplete();
                            }
                        }
                        else
                        {
                            NextTurn();
                        }
                    }
                    else
                    {
                        throw new ArgumentException("The played card is invalid");
                    }
                }
                else
                {
                    throw new InvalidOperationException("The player already placed card for the current trick");
                }
            }
            else
            {
                throw new InvalidOperationException("The player has played not in the right turn");
            }
        }