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); }
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; }
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); }
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); }
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; }
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); } } } }
private void GiveCardToPlayer(RoundPlayerInfo player) { var card = this.deck.GetNextCard(); player.AddCard(card); }