public void AskEachPlayerAboutTrump(IGameState gameState, Func <ISuit> humanChooseSuit) { for (var i = 0; i < gameState.Players.Count(); i++) { gameState.AdvanceToNextPlayer(); ISuit trumpSelected = null; if (gameState.CurrentPlayer.IsHuman) { trumpSelected = humanChooseSuit(); } else { trumpSelected = gameState.CurrentPlayer.PlayerStrategy.SecondRoundTrumpChoice(gameState); } if (trumpSelected != null) { gameState.Trump = trumpSelected; gameState.OrderingUpPlayer = gameState.CurrentPlayer; OnAiChoseTrump?.Invoke(this, new AiChoseTrumpEventArgs(gameState.CurrentPlayer, trumpSelected)); break; } } }
public virtual void Deal(IGameState gameState) { var deck = gameState.Deck; for (var i = 0; i < 100; i++) { deck.Shuffle(); } gameState.CurrentPlayer = gameState.Dealer; //keep track of three vs two cards var isThreeCards = true; for (var i = 0; i < 8; i++) { gameState.AdvanceToNextPlayer(); //flip the 3/2 pattern on the 4th handout if (i == 4) { isThreeCards = !isThreeCards; } if (isThreeCards) { gameState.CurrentPlayer.Cards.Add(deck.Cards.Pop()); gameState.CurrentPlayer.Cards.Add(deck.Cards.Pop()); gameState.CurrentPlayer.Cards.Add(deck.Cards.Pop()); isThreeCards = false; } else { gameState.CurrentPlayer.Cards.Add(deck.Cards.Pop()); gameState.CurrentPlayer.Cards.Add(deck.Cards.Pop()); isThreeCards = true; } } //add rest to kitty gameState.Kitty = deck.Cards; //turn up top card of kitty gameState.TurnedUpCard = gameState.Kitty.Pop(); //order each players cards foreach (var player in gameState.Players) { player.Cards = player.Cards.OrderBySuitsAndRanks(); } }
public void AskEachPlayerAboutTheTopCard( IGameState gameState, Func <bool> shouldHumanOrderUp, Func <ICard> humanChooseDiscard ) { for (var i = 0; i < gameState.Players.Count(); i++) { gameState.AdvanceToNextPlayer(); var shouldOrderUp = false; if (gameState.CurrentPlayer.IsHuman) { shouldOrderUp = shouldHumanOrderUp(); } else { shouldOrderUp = gameState.CurrentPlayer.PlayerStrategy.ShouldOrderUpDealerInFirstRound(gameState); OnAiOrderedUpDealer?.Invoke(this, new AiOrderedUpDealerEventArgs(gameState.CurrentPlayer, shouldOrderUp)); } if (shouldOrderUp) { //order up the dealer if (gameState.Dealer.IsHuman) { var cardToRemove = humanChooseDiscard(); gameState.CurrentPlayer.Cards.Remove(cardToRemove); gameState.Kitty.Push(cardToRemove); } else { gameState.Dealer.DiscardWhenOrderedUp(gameState); } gameState.Dealer.Cards.Add(gameState.TurnedUpCard); gameState.Dealer.Cards = gameState.Dealer.Cards.OrderBySuitsAndRanks(); gameState.Trump = gameState.TurnedUpCard.Suit; gameState.OrderingUpPlayer = gameState.CurrentPlayer; break; } } }
public void PlayHand(IGameState gameState, Func <ICard> chooseHumanCard) { //play a hand //ignoring loners for now for (var i = 0; i < 5; i++) { //play a trick for (var j = 0; j < 4; j++) { ICard chosenCard = null; if (gameState.CurrentPlayer.IsHuman) { chosenCard = chooseHumanCard(); gameState.CurrentHand.Add(new PlayedCard { Player = gameState.CurrentPlayer, Card = chosenCard }); gameState.CurrentPlayer.Cards.Remove(chosenCard); } else { chosenCard = gameState.CurrentPlayer.ChooseCardToPlay(gameState); gameState.CurrentHand.Add(new PlayedCard { Player = gameState.CurrentPlayer, Card = chosenCard }); OnAiPlayedCard?.Invoke(this, new AiPlayedCardEventArgs(chosenCard)); gameState.CurrentPlayer.Cards = gameState.CurrentPlayer.Cards.ToList().Except(new List <ICard> { chosenCard }).ToList(); } if (gameState.LeadSuit == null) { if (chosenCard.IsTheLeft(gameState.Trump)) { gameState.LeadSuit = CardHelper.GetOppositeSuit(chosenCard.Suit); } else { gameState.LeadSuit = chosenCard.Suit; } } gameState.AdvanceToNextPlayer(); } _evaluateTrick(gameState); gameState.CurrentHand.Clear(); gameState.LeadSuit = null; } _evaluateHand(gameState); foreach (var player in gameState.Players) { player.TricksTaken = 0; } }