public void TakeDiscardCardsTurn(IPandemicState state, IPandemicTurn turn)
        {
            if (!turn.CardsToDiscard.Any())
            {
                return;
            }

            _state           = state;
            _currentPlayerId = turn.CurrentPlayerId;
            var playerState = _state.PlayerStates[_currentPlayerId];

            foreach (var cardToDiscard in turn.CardsToDiscard)
            {
                var cardInPlayerDeck = playerState.PlayerHand
                                       .SingleOrDefault(c => c.PlayerCardType == cardToDiscard.PlayerCardType && c.Value == cardToDiscard.Value);
                if (cardInPlayerDeck != null)
                {
                    playerState.PlayerHand.Remove(cardInPlayerDeck);
                    state.PlayerDiscardPile.AddCard(cardInPlayerDeck);
                    _stateDeltas.Add(new CardIsDrawnOrDiscardedDelta {
                        PlayerId = _currentPlayerId, PandemicPlayerCard = cardInPlayerDeck, DrawnOrDiscarded = DrawnOrDiscarded.Discarded
                    });
                }
            }
        }
 public void TakeActionsTurn(IPandemicState state, IPandemicTurn turn)
 {
     _state           = state;
     _currentPlayerId = turn.CurrentPlayerId;
     ApplyPlayerAction(_state, turn.ActionTaken);
     _state.ActionsPlayed++;
 }
        public void TakePlayEventCardsTurn(IPandemicState state, IPandemicTurn turn)
        {
            if (turn.EventCardsPlayed == null || !turn.EventCardsPlayed.Any())
            {
                return;
            }

            _state           = state;
            _currentPlayerId = turn.CurrentPlayerId;
            var playerState = _state.PlayerStates[_currentPlayerId];

            foreach (var eventCardToPlay in turn.EventCardsPlayed)
            {
                if (eventCardToPlay.EventCard == EventCard.OneQuietNight)
                {
                    var card = playerState.PlayerHand.Single(c => c.PlayerCardType == PlayerCardType.Event && (EventCard)c.Value == EventCard.OneQuietNight);
                    _state.EventCardsQueue.AddCard(card);
                    playerState.PlayerHand.Remove(card);
                    state.PlayerDiscardPile.AddCard(card);
                    _stateDeltas.Add(new CardIsDrawnOrDiscardedDelta {
                        PlayerId = _currentPlayerId, PandemicPlayerCard = card, DrawnOrDiscarded = DrawnOrDiscarded.Discarded
                    });
                }

                if (eventCardToPlay.EventCard == EventCard.GovernmentGrant)
                {
                    var card = playerState.PlayerHand.Single(c => c.PlayerCardType == PlayerCardType.Event && (EventCard)c.Value == EventCard.GovernmentGrant);
                    BuildResearchStationWithGovernmentGrant(_state, eventCardToPlay.City.Value);
                    playerState.PlayerHand.Remove(card);
                    state.PlayerDiscardPile.AddCard(card);
                    _stateDeltas.Add(new CardIsDrawnOrDiscardedDelta {
                        PlayerId = _currentPlayerId, PandemicPlayerCard = card, DrawnOrDiscarded = DrawnOrDiscarded.Discarded
                    });
                }

                if (eventCardToPlay.EventCard == EventCard.Airlift)
                {
                    var card = playerState.PlayerHand.Single(c => c.PlayerCardType == PlayerCardType.Event && (EventCard)c.Value == EventCard.Airlift);
                    _state.PlayerStates[eventCardToPlay.PlayerId].Location = eventCardToPlay.City.Value;
                    playerState.PlayerHand.Remove(card);
                    state.PlayerDiscardPile.AddCard(card);
                    _stateDeltas.Add(new CardIsDrawnOrDiscardedDelta {
                        PlayerId = _currentPlayerId, PandemicPlayerCard = card, DrawnOrDiscarded = DrawnOrDiscarded.Discarded
                    });
                }
            }
        }
Ejemplo n.º 4
0
        public Tests()
        {
            _serviceProvider = ServiceProviderFactory.GetServiceProvider(new MessageSenderConfiguration());
            _stateEditor     = _serviceProvider.GetService <IPandemicStateEditor>();
            _playerFactory   = _serviceProvider.GetService <IPlayerFactory <IPandemicTurn> >();

            _sut = _playerFactory.CreatePlayers(new PlayerConfiguration {
                PlayerCount = 1
            }).SingleOrDefault();

            _state = _serviceProvider.GetService <IPandemicState>();
            _stateEditor.Clear(_state, 6);

            var turnValidator = A.Fake <IPandemicActionValidator>();

            _turn = new PandemicTurn(turnValidator);
        }
        public IEnumerable <IDelta> ApplyTurn(IPandemicState state, IPandemicTurn turn)
        {
            _stateDeltas = new List <IDelta>();

            switch (turn.TurnType)
            {
            case PandemicTurnType.TakeActions:
                TakeActionsTurn(state, turn);
                break;

            case PandemicTurnType.DiscardCards:
                TakeDiscardCardsTurn(state, turn);
                break;

            case PandemicTurnType.PlayEventCards:
                TakePlayEventCardsTurn(state, turn);
                break;
            }

            return(_stateDeltas);
        }