private static int checkHandSameRank(AIHand playerCards2, DiscardPile discardPile, Suit?changedSuit) { int[] sameSuits = playerCards2.FindAllIndex(c => c.CardSuit == changedSuit); foreach (int cards in sameSuits) { int value = playerCards2.FindCount(c => c.Rank == playerCards2[cards].Rank); if (value > 1) { return(cards); } } return(-1); }
private static int computerVersion3(AIHand playerCards2, DiscardPile discardPile, Suit?changedSuit) { int card = -1; if (discardPile.Count > 0 && discardPile[discardPile.Count - 1].Rank == RankValue.Deuce) { card = playerCards2.Find(c => c.Rank == RankValue.Deuce); if (card != -1) { return(card); } } card = playerCards2.Find(c => c.Rank == RankValue.Three && c.CardSuit == changedSuit); if (card != -1) { int count = playerCards2.FindCount(c => changedSuit == c.CardSuit); if (count > 2) { return(card); } count = playerCards2.FindCount(c => c.Rank == RankValue.Three); if (count > 1) { int[] indexes = playerCards2.FindAllIndex(c => c.Rank == RankValue.Three && c.CardSuit != changedSuit); foreach (int found in indexes) { count = playerCards2.FindCount(c => c.CardSuit == playerCards2[found].CardSuit); if (count > 2) { return(card); } } } } card = playerCards2.Find(c => c.Rank == RankValue.Four && c.CardSuit == changedSuit); if (card != -1) { int counts = playerCards2.FindCount(c => changedSuit == c.CardSuit && c.Rank != RankValue.Three); if (counts > 1 && discardPile.Count > 0 && discardPile[discardPile.Count - 1].Rank != RankValue.Three) { return(card); } counts = playerCards2.FindCount(c => c.Rank == RankValue.Four); if (counts > 1) { int[] indexes = playerCards2.FindAllIndex(c => c.Rank == RankValue.Four && c.CardSuit != changedSuit); foreach (int found in indexes) { counts = playerCards2.FindCount(c => c.CardSuit == playerCards2[found].CardSuit && c.Rank != RankValue.Three); if (counts > 1) { return(card); } } } } card = playerCards2.Find(c => c.Rank == RankValue.Deuce && c.CardSuit == changedSuit && discardPile.Count > 0 && discardPile[discardPile.Count - 1].Rank != RankValue.Three); if (card != -1) { return(card); } card = checkHandHasThirdRank(playerCards2, discardPile, changedSuit); if (card != -1) { return(card); } card = checkHandSameRank(playerCards2, discardPile, changedSuit); if (card != -1) { return(card); } card = playerCards2.Find(c => c.CardSuit == changedSuit && c.Rank != RankValue.Three && c.Rank != RankValue.Four); if (card != -1) { return(card); } card = checkHandDiscardRank(playerCards2, discardPile, changedSuit); if (card != -1) { return(card); } card = playerCards2.Find(c => c.Rank == RankValue.Eight); if (card != -1) { return(card); } return(-1); }
private static int computerVersion5(AIHand playerCards2, DiscardPile discardPile, Suit?changedSuit) { int count = 0; int index = 0; if (discardPile.Count > 0 && discardPile[discardPile.Count - 1] == SSEngine.DeckSprites["QueenSpades"]) { index = playerCards2.Find(c => c == SSEngine.DeckSprites["DeuceSpades"]); if (index != -1) { return(index); } } if (discardPile.Count > 0 && discardPile[discardPile.Count - 1].Rank == RankValue.Deuce) { count = playerCards2.FindCount(c => c.Rank == RankValue.Deuce); if (count == 1) { return(playerCards2.Find(c => c.Rank == RankValue.Deuce)); } else if (count > 1) { List <byte> sortCount = playerCards2.GetSelectSuitCounts(c => c.Rank == RankValue.Deuce); byte[] suitCount = new byte[sortCount.Count]; sortCount.CopyTo(suitCount); sortCount.Sort(); int[] indexes = playerCards2.FindAllIndex(c => c.Rank == RankValue.Deuce); for (int i = 0; i < count; i++) { if (suitCount[i] == sortCount[sortCount.Count - 1]) { return(indexes[i]); } } } } index = playerCards2.Find(c => c.Rank == RankValue.Three && c.CardSuit == changedSuit); if (index != -1) { count = playerCards2.FindCount(c => (changedSuit == c.CardSuit && c.Rank != RankValue.Four) || c.Rank == RankValue.Eight); if (count > 2) { return(index); } count = playerCards2.FindCount(c => c.Rank == RankValue.Three); if (count > 1) { int[] indexes = playerCards2.FindAllIndex(c => c.Rank == RankValue.Three && c.CardSuit != changedSuit); foreach (int found in indexes) { count = playerCards2.FindCount(c => c.CardSuit == playerCards2[found].CardSuit && c.Rank != RankValue.Four); if (count > 2) { return(index); } } } } index = playerCards2.Find(c => c.Rank == RankValue.Four && c.CardSuit == changedSuit); if (index != -1) { count = playerCards2.FindCount(c => changedSuit == c.CardSuit && (c.Rank != RankValue.Three || c.Rank == RankValue.Eight)); if (count > 1 && discardPile.Count > 0 && discardPile[discardPile.Count - 1].Rank != RankValue.Three) { return(index); } count = playerCards2.FindCount(c => c.Rank == RankValue.Four); if (count > 1) { int[] indexes = playerCards2.FindAllIndex(c => c.Rank == RankValue.Four && c.CardSuit != changedSuit); foreach (int found in indexes) { count = playerCards2.FindCount(c => c.CardSuit == playerCards2[found].CardSuit && c.Rank != RankValue.Three); if (count > 1) { return(index); } } } } if (discardPile.Count > 0 && discardPile[discardPile.Count - 1] != SSEngine.DeckSprites["ThreeSpades"] && changedSuit == Suit.Spades) { index = playerCards2.Find(c => c == SSEngine.DeckSprites["QueenSpades"]); if (index != -1) { return(index); } } if (discardPile.Count > 0 && discardPile[discardPile.Count - 1].Rank != RankValue.Three) { index = playerCards2.Find(c => c.Rank == RankValue.Deuce && c.CardSuit == changedSuit); if (index != -1) { return(index); } } index = checkHandHasThirdRank(playerCards2, discardPile, changedSuit); if (index != -1) { return(index); } index = checkHandSameRank(playerCards2, discardPile, changedSuit); if (index != -1) { return(index); } index = playerCards2.Find(c => c.Rank == RankValue.Ace && c.CardSuit == changedSuit); if (index != -1) { Suit suit = Suit.Club; switch (changedSuit) { case Suit.Club: suit = Suit.Spades; break; case Suit.Spades: suit = Suit.Club; break; case Suit.Hearts: suit = Suit.Diamond; break; case Suit.Diamond: suit = Suit.Hearts; break; } int suitCount = playerCards2.FindCount(c => c.CardSuit == changedSuit); int flippedSuitCount = playerCards2.FindCount(c => c.CardSuit == suit); if (flippedSuitCount > suitCount || suitCount == 1) { return(index); } } index = playerCards2.Find(c => c.CardSuit == changedSuit && c.Rank != RankValue.Ace && c.Rank != RankValue.Deuce && c.Rank != RankValue.Three && c.Rank != RankValue.Four && c.Rank != RankValue.Eight); if (index != -1) { return(index); } if (discardPile.Count > 0) { count = playerCards2.FindCount(c => c.Rank == discardPile[discardPile.Count - 1].Rank); if (count > 1) { List <byte> sortCount = playerCards2.GetSelectSuitCounts(c => c.Rank == discardPile[discardPile.Count - 1].Rank); byte[] suitCount = new byte[sortCount.Count]; sortCount.CopyTo(suitCount); sortCount.Sort(); int[] indexes = playerCards2.FindAllIndex(c => c.Rank == discardPile[discardPile.Count - 1].Rank); for (int i = 0; i < count; i++) { if (suitCount[i] == sortCount[sortCount.Count - 1]) { return(indexes[i]); } } } } index = playerCards2.Find(c => c.Rank == RankValue.Eight); if (index != -1) { return(index); } index = checkHandDiscardRank(playerCards2, discardPile, changedSuit); if (index != -1) { return(index); } return(-1); }