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 }); } } }
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); }