Example #1
0
        // Выбор карты для хода
        private Card GetMovingCard(CardList PossibleCards)
        {
            try
            {
                int movePlace = (usedCards.Count % 4) + 1;
                // Если игрок ходит первым
                if (movePlace == 1)
                {
                    // Если игра с козырем
                    if (botCards.CardListTrump != CardSuit.C_NONE)
                    {
                        Card higherTrump = PossibleCards.GetHigherCard(botCards.CardListTrump);
                        // Если какой-то козырь найден...
                        if (higherTrump != null)
                        {
                            Card higherTrumpInDeck = dontUsedCards.GetHigherCard(botCards.CardListTrump);
                            // Если в колоде есть еще козыри...
                            if (higherTrumpInDeck != null)
                            {
                                // Если у бота имеется самый старший из оставшихся козырей, то ходим им
                                if ((higherTrump.Cost >= higherTrumpInDeck.Cost) && (higherTrump.Type != CardType.C_7))
                                {
                                    return higherTrump;
                                }
                            }
                            // Иначе это самый старший, ходим им
                            else
                            {
                                return higherTrump;
                            }
                        }
                    }

                    // Если козырем пойти не удалось, то пытаемся найти такую карту, чтобы она была старше всех карт оставшихся в колоде данной масти
                    foreach (CardSuit s in Enum.GetValues(typeof(CardSuit)))
                    {
                        if ((s == CardSuit.C_NONE) || (s == botCards.CardListTrump))
                            continue;
                        Card possibleCard = PossibleCards.GetHigherCard(s);
                        Card higherCardInDeck = dontUsedCards.GetHigherCard(s);
                        if ((higherCardInDeck != null) && (possibleCard != null))
                        {
                            if (possibleCard.ThisIsBiggerThen(higherCardInDeck))
                                return possibleCard;
                        }
                    }

                    List<Card> lowCards = new List<Card>();
                    // Если не удалось найти старшую карту, то пытаемся найти самую младшую из некозырных
                    foreach (CardSuit s in Enum.GetValues(typeof(CardSuit)))
                    {
                        if ((s == CardSuit.C_NONE) || (s == botCards.CardListTrump))
                            continue;
                        Card lowCard = PossibleCards.GetLowerCard(s);
                        if (lowCard != null)
                            lowCards.Add(lowCard);
                    }
                    if (lowCards.Count > 0)
                    {
                        if (lowCards.Count == 1)
                            return lowCards[0];
                        Card tempCard = lowCards[0];
                        for (var i = 1; i < lowCards.Count - 1; i++)
                        {
                            if (tempCard.ThisIsBiggerThen(lowCards[i]))
                                tempCard = lowCards[i];
                        }
                        return tempCard;
                    }

                    // Если неудалось пойти ни одной картой, значит ходим минимальной козырной
                    Card lowTrump = PossibleCards.GetLowerCard(botCards.CardListTrump);
                    if (lowTrump != null)
                        return lowTrump;
                    else
                        return PossibleCards[0];
                }
                else
                {
                    // Если ходит бот не первым, то сначала пытается скинуть самую младшую карту из некозырных, потом самую младшую из козырных
                    /*List<Card> lowCards = new List<Card>();
                    foreach (CardSuit s in Enum.GetValues(typeof(CardSuit)))
                    {
                        if ((s == CardSuit.C_NONE) || (s == botCards.CardListTrump))
                            continue;
                        Card lowCard = PossibleCards.GetLowerCard(s);
                        if (lowCard != null)
                            lowCards.Add(lowCard);
                    }
                    if (lowCards.Count > 0)
                    {
                        if (lowCards.Count == 1)
                            return lowCards[0];
                        Card tempCard = lowCards[0];
                        for (var i = 1; i < lowCards.Count - 1; i++)
                        {
                            if (tempCard.ThisIsBiggerThen(lowCards[i]))
                                tempCard = lowCards[i];
                        }
                        return tempCard;
                    }

                    // Если неудалось пойти ни одной картой, значит ходим минимальной козырной
                    Card lowTrump = PossibleCards.GetLowerCard(botCards.CardListTrump);
                    if (lowTrump != null)
                        return lowTrump;
                    else
                        return PossibleCards[0];*/
                    PossibleCards.Sort();
                    return PossibleCards[PossibleCards.Count - 1];
                }
            }
            catch
            {
                return PossibleCards[0];
            }
        }
Example #2
0
        // Создание раздачи на четверых игроков
        /*public void Distribution(CardList p1, CardList p2, CardList p3, CardList p4)
        {
            // Если какой то из списков не предоставлен, то и колоду раздать не получится
            if ((p1 == null) || (p2 == null) || (p3 == null) || (p4 == null))
            {
                return;
            }
            // Раздаем по 8 карт каждому игроку
            for (var i = 0; i < 8; i++)
            {
                p1.Add(GetRandomCard());
                p2.Add(GetRandomCard());
                p3.Add(GetRandomCard());
                p4.Add(GetRandomCard());
            }
            // Сортируем карты для всех игроков
            p1.Sort();
            p2.Sort();
            p3.Sort();
            p4.Sort();
        }*/
        // Создание тестовой раздачи на четверых игроков
        public void Distribution(CardList p1, CardList p2, CardList p3, CardList p4)
        {
            // Если какой то из списков не предоставлен, то и колоду раздать не получится
            if ((p1 == null) || (p2 == null) || (p3 == null) || (p4 == null))
            {
                return;
            }
            p1.Add(new Card(CardType.C_K, CardSuit.C_SPADES));
            p1.Add(new Card(CardType.C_Q, CardSuit.C_SPADES));
            p1.Add(new Card(CardType.C_J, CardSuit.C_SPADES));
            p1.Add(new Card(CardType.C_J, CardSuit.C_HEARTS));
            p1.Add(new Card(CardType.C_10, CardSuit.C_HEARTS));
            p1.Add(new Card(CardType.C_9, CardSuit.C_HEARTS));
            p1.Add(new Card(CardType.C_8, CardSuit.C_HEARTS));
            p1.Add(new Card(CardType.C_7, CardSuit.C_HEARTS));

            p2.Add(new Card(CardType.C_K, CardSuit.C_CLUBS));
            p2.Add(new Card(CardType.C_Q, CardSuit.C_CLUBS));
            p2.Add(new Card(CardType.C_J, CardSuit.C_CLUBS));
            p2.Add(new Card(CardType.C_10, CardSuit.C_CLUBS));
            p3.Add(new Card(CardType.C_9, CardSuit.C_CLUBS));
            p3.Add(new Card(CardType.C_8, CardSuit.C_CLUBS));
            p2.Add(new Card(CardType.C_7, CardSuit.C_CLUBS));
            p2.Add(new Card(CardType.C_8, CardSuit.С_DIAMONDS));

            p3.Add(new Card(CardType.C_10, CardSuit.C_SPADES));
            p3.Add(new Card(CardType.C_9, CardSuit.C_SPADES));
            p3.Add(new Card(CardType.C_8, CardSuit.C_SPADES));
            p2.Add(new Card(CardType.C_7, CardSuit.C_SPADES));
            p3.Add(new Card(CardType.C_10, CardSuit.С_DIAMONDS));
            p2.Add(new Card(CardType.C_9, CardSuit.С_DIAMONDS));
            p3.Add(new Card(CardType.C_J, CardSuit.С_DIAMONDS));
            p3.Add(new Card(CardType.C_7, CardSuit.С_DIAMONDS));

            p4.Add(new Card(CardType.C_A, CardSuit.C_CLUBS));
            p4.Add(new Card(CardType.C_A, CardSuit.C_SPADES));
            p4.Add(new Card(CardType.C_A, CardSuit.C_HEARTS));
            p4.Add(new Card(CardType.C_A, CardSuit.С_DIAMONDS));
            p4.Add(new Card(CardType.C_K, CardSuit.C_HEARTS));
            p4.Add(new Card(CardType.C_Q, CardSuit.C_HEARTS));
            p4.Add(new Card(CardType.C_K, CardSuit.С_DIAMONDS));
            p4.Add(new Card(CardType.C_Q, CardSuit.С_DIAMONDS));

            // Сортируем карты для всех игроков
            p1.Sort();
            p2.Sort();
            p3.Sort();
            p4.Sort();
        }