public virtual ICard ChooseLeadCard(IGameState gameState) { var allMyTrump = CardHelper.GetAllTrump(gameState.Trump, gameState.CurrentPlayer.Cards); //if I ordered up, lead a strong trump if (gameState.OrderingUpPlayer == gameState.CurrentPlayer && allMyTrump.Any()) { if (allMyTrump.FirstOrDefault(x => x.IsTheRight(gameState.Trump)) != null) { return(allMyTrump.First(x => x.IsTheRight(gameState.Trump))); } if (allMyTrump.FirstOrDefault(x => x.IsTheLeft(gameState.Trump)) != null) { return(allMyTrump.First(x => x.IsTheLeft(gameState.Trump))); } return(allMyTrump.OrderByDescending(x => x.Rank.Value).First()); } var nonTrump = CardHelper.GetAllNonTrump(gameState.Trump, gameState.CurrentPlayer.Cards); if (nonTrump.Any()) { return(nonTrump.OrderByDescending(x => x.Rank.Value).First()); } return(allMyTrump.First()); }
public virtual ICard ChooseNonLeadCard(IGameState gameState) { //get valid indexes var validCards = CardHelper.GetValidCards(gameState.LeadSuit, gameState.Trump, gameState.CurrentPlayer.Cards).ToList(); var nonTrumpCards = CardHelper.GetAllNonTrump(gameState.Trump, validCards).ToList(); var trumpCards = CardHelper.GetAllTrump(gameState.Trump, validCards).ToList(); //if partner is winning, consider throwing low var currentWinner = TrickHelper.PlayerWinningTrick(gameState); var ourTeamIsWinningTheTrick = currentWinner.TeamNumber == gameState.CurrentPlayer.TeamNumber; if (ourTeamIsWinningTheTrick) { return(_throwJunk(nonTrumpCards, trumpCards)); } else { if (trumpCards.Any()) { //do we have any trump that out ranks the highest played? var highestTrumpPlayed = CardHelper.GetHighestTrump(gameState.Trump, gameState.CurrentHand.Select(x => x.Card).ToList()); var higherTrumpInMyHand = validCards.FirstOrDefault(x => x.IsGreaterThan(highestTrumpPlayed, gameState.Trump)); if (higherTrumpInMyHand != null) { return(higherTrumpInMyHand); } return(_throwJunk(nonTrumpCards, trumpCards)); } else { return(nonTrumpCards.OrderByDescending(x => x.Rank.Value).FirstOrDefault()); } } }