Esempio n. 1
0
        private static PlayerAction GetPlayerAction(RoundPlayerInfo playerInfo, PlayerTurnContext context)
        {
            var action        = playerInfo.Player.GetTurn(context.DeepClone());
            var isActionValid = PlayerActionValidator.Instance.IsValid(action, context, playerInfo.Cards);

            if (!isActionValid)
            {
                throw new InternalGameException($"Invalid action played from {playerInfo.Player.Name}");
            }

            return(action);
        }
Esempio n. 2
0
 public Trick(
     RoundPlayerInfo firstToPlay,
     RoundPlayerInfo secondToPlay,
     IStateManager stateManager,
     IDeck deck,
     IGameRules gameRules)
 {
     this.firstToPlay  = firstToPlay;
     this.secondToPlay = secondToPlay;
     this.stateManager = stateManager;
     this.deck         = deck;
     this.gameRules    = gameRules;
 }
Esempio n. 3
0
        private void CallStartRoundAndDealCards(RoundPlayerInfo player, int playerTotalPoints, int opponentTotalPoints)
        {
            var cards = new List <Card>();

            for (var i = 0; i < GameRulesProvider.Santase.CardsAtStartOfTheRound; i++)
            {
                var card = this.deck.GetNextCard();
                cards.Add(card);
                player.Cards.Add(card);
            }

            player.Player.StartRound(cards, this.deck.TrumpCard, playerTotalPoints, opponentTotalPoints);
        }
Esempio n. 4
0
        private void CallStartRoundAndDealCards(RoundPlayerInfo player, int playerTotalPoints, int opponentTotalPoints)
        {
            var cards = new List <Card>();

            // TODO: 6 should be constant
            for (var i = 0; i < 6; i++)
            {
                var card = this.deck.GetNextCard();
                cards.Add(card);
                player.Cards.Add(card);
            }

            player.Player.StartRound(cards, this.deck.TrumpCard, playerTotalPoints, opponentTotalPoints);
        }
Esempio n. 5
0
        public Round(
            IPlayer firstPlayer,
            IPlayer secondPlayer,
            IGameRules gameRules,
            PlayerPosition firstToPlay = PlayerPosition.FirstPlayer)
        {
            this.gameRules    = gameRules;
            this.deck         = new Deck();
            this.stateManager = new StateManager();

            this.firstPlayer  = new RoundPlayerInfo(firstPlayer);
            this.secondPlayer = new RoundPlayerInfo(secondPlayer);

            this.firstToPlay = firstToPlay;
        }
Esempio n. 6
0
        private PlayerAction GetFirstPlayerAction(RoundPlayerInfo playerInfo, PlayerTurnContext context)
        {
            while (true)
            {
                var action = GetPlayerAction(playerInfo, context);
                switch (action.Type)
                {
                case PlayerActionType.ChangeTrump:
                {
                    var oldTrumpCard = this.deck.TrumpCard;
                    var nineOfTrump  = Card.GetCard(oldTrumpCard.Suit, CardType.Nine);

                    this.deck.ChangeTrumpCard(nineOfTrump);
                    context.TrumpCard = nineOfTrump;

                    // Only swap cards from the local cards list (player should swap its own cards)
                    playerInfo.Cards.Remove(nineOfTrump);
                    playerInfo.Cards.Add(oldTrumpCard);
                    continue;
                }

                case PlayerActionType.CloseGame:
                {
                    this.stateManager.State.Close();
                    context.State         = this.stateManager.State;
                    playerInfo.GameCloser = true;
                    continue;
                }

                case PlayerActionType.PlayCard:
                {
                    if (action.Announce != Announce.None)
                    {
                        playerInfo.Announces.Add(action.Announce);
                    }

                    return(action);
                }
                }
            }
        }
Esempio n. 7
0
        private void GiveCardToPlayer(RoundPlayerInfo player)
        {
            var card = this.deck.GetNextCard();

            player.AddCard(card);
        }