示例#1
0
 private static int checkHandHasThirdRank(AIHand playerCards2, DiscardPile discardPile, Suit?changedSuit)
 {
     if (discardPile.Count > 1 && discardPile[discardPile.Count - 1].Rank == discardPile[discardPile.Count - 2].Rank)
     {
         return(playerCards2.Find(c => c.Rank == discardPile[discardPile.Count - 1].Rank));
     }
     else
     {
         return(-1);
     }
 }
示例#2
0
 private static int checkHandDiscardRank(AIHand playerCards2, DiscardPile discardPile, Suit?changedSuit)
 {
     if (discardPile.Count > 0)
     {
         return(playerCards2.Find(c => c.Rank == discardPile[discardPile.Count - 1].Rank &&
                                  c.Rank != RankValue.Three && c.Rank != RankValue.Four));
     }
     else
     {
         return(-1);
     }
 }
示例#3
0
        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);
        }
示例#4
0
        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);
        }