Beispiel #1
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();
        }
Beispiel #2
0
 // Создание колоды для игры в блот
 public CardsDeck()
 {
     list = new CardList();
     random = new Random();
     // Добавляем в список все возможные карты в колоде
     foreach (CardSuit s in Enum.GetValues(typeof(CardSuit)))
     {
         if (s == CardSuit.C_NONE)
             continue;
         foreach (CardType t in Enum.GetValues(typeof(CardType)))
         {
             if (t == CardType.C_UNDEFINED)
                 continue;
             list.Add(new Card(t, s));
         }
     }
 }
Beispiel #3
0
        // Функция возвращает список возможных к ходу карт, полученный из текущего списка карт, по взятке и месту хода
        public CardList PossibleCardsToMove(Bribe bribe, int Place)
        {
            #if DEBUG
            Debug.WriteLine("{0} Поиск повзможных карт для хода по текущей взятке ({1}) и номеру игрока - {2}", DateTime.Now, bribe, Place);
            #endif
            // В случае если взятка завершена, то игрок будет делать ход на следующей - соответственно он может использовать любую карту
            if ((bribe.IsEnded) || (bribe.IsEmpty))
                return this;
            CardList possibleCards = new CardList();
            // Если первый игрок пошел не с козырной масти... Случаи 1, 2, 3, 6
            if (!bribe.IsTrumpBribe)
            {
                // В случае если на взятке с запрашиваемой некозырной мастью не было сделано хода с козырной мастью... Случаи 1, 2, 3
                if (!bribe.BribeTrumped)
                {
                    // Если у игрока есть карты этой масти, то можно пойти ими... Случай 1
                    if (SuitExists(bribe.BribeSuit))
                    {
                        foreach (Card c in list)
                        {
                            if (c.Suit == bribe.BribeSuit)
                            {
                                possibleCards.Add(c);
                            }
                        }
                    }
                    else
                    // Если у игрока нет карт запрашиваемой масти, но есть козыри, то нужно пойти одним из них... Случай 2
                    if (TrumpExists())
                    {
                        // Если у игрока нет запрашиваемой масти, но в то же время первая карта старше
                        if (bribe.FulledCount == 2)
                        {
                            // Если второй игрок пошел некозырной картой другой масти, то можно ходить любой картой
                            if (bribe[0].Suit != bribe[1].Suit)
                                return this;
                            else
                            {
                                // Если первая карта больше второй, то можно пойти любой картой
                                if (bribe[0].ThisIsBiggerThen(bribe[1]))
                                    return this;
                            }
                        }

                        // Если у игрока нет запрашиваемой масти, но в то же время вторая карта старше
                        if (bribe.FulledCount == 3)
                        {
                            // Если второй игрок пошел некозырной картой той же масти что и первый - проверяем дальше
                            if (bribe[0].Suit == bribe[1].Suit)
                            {
                                // Если и третий игрок пошел той же мастью
                                if (bribe[2].Suit == bribe[0].Suit)
                                {
                                    // Если карта второго игрока больше чем карта первого и третьего - то можно пойти любой картой
                                    if ((bribe[1].ThisIsBiggerThen(bribe[0])) && (bribe[1].ThisIsBiggerThen(bribe[2])))
                                        return this;
                                }
                                else
                                {
                                    // Если первый игрок пошел картой младше - то можно ходить любой
                                    if (bribe[1].ThisIsBiggerThen(bribe[0]))
                                        return this;
                                }
                            }
                        }

                        foreach (Card c in list)
                        {
                            if (c.IsTrump)
                            {
                                possibleCards.Add(c);
                            }
                        }
                    }
                    // Если у игрока нет ни карт запрашиваемой масти, ни козырей, то он может пойти любой картой... Случай 3
                    else
                    {
                        return this;
                    }
                }
                // Если на вязтке с запрашиваемой некозырной мастью был совершен ход козырной мастью... Случай 6
                else
                {
                    // Если имеются карты запрашиваемой масти, то надо ходить ими
                    if (SuitExists(bribe.BribeSuit))
                    {
                        foreach (Card c in list)
                        {
                            if (c.Suit == bribe.BribeSuit)
                            {
                                possibleCards.Add(c);
                            }
                        }
                    }
                    else
                    {
                        // Если ходит 4 игрок, то он не обязан перебивать карту своего сокомандника (игрока №2), если она козырная, иначе необходимо перебить, если возможно
                        if (bribe.FulledCount == 3)
                        {
                            if (bribe[1].IsTrump)
                            {
                                // Если же и третий игрок пошел козырем, то нужно проверить, больше ли он чем козырь второго игрока
                                if ((bribe[2].IsTrump) && (bribe[2].Cost >= bribe[1].Cost) && (bribe[2].Type != CardType.C_7))
                                {
                                    // Необходимо попробовать перебить
                                    Card card1 = list.Find(c => (c.IsTrump) && (c.Cost >= bribe.SeniorTrump.Cost) && (c.Type != CardType.C_7));
                                    // В случае, если у игрока имеются козыри, старше чем использовались на раздаче, нужно использовать их
                                    if (card1 != null)
                                    {
                                        foreach (Card c in list)
                                        {
                                            if ((c.IsTrump) && (c.Cost > bribe.SeniorTrump.Cost))
                                                possibleCards.Add(c);
                                        }
                                        return possibleCards;
                                    }
                                    // Если и таких карт нет, то можно использовать любую карту из имеющихся
                                    else
                                    {
                                        return this;
                                    }
                                }
                                else
                                {
                                    return this;
                                }
                            }
                        }
                        Card card = list.Find(c => (c.IsTrump) && (c.Cost >= bribe.SeniorTrump.Cost) && (c.Type != CardType.C_7));
                        // В случае, если у игрока имеются козыри, старше чем использовались на раздаче, нужно использовать их
                        if (card != null)
                        {
                            foreach (Card c in list)
                            {
                                if ((c.IsTrump) && (c.Cost >= bribe.SeniorTrump.Cost))
                                    possibleCards.Add(c);
                            }
                        }
                        // Если и таких карт нет, то можно использовать любую карту из имеющихся
                        else
                        {
                            return this;
                        }
                    }
                }

            }
            // В случае если заказанная масть на взятке - козырная... Случаи 4, 5
            else
            {
                // Если у ходящего игрока имеются козыри... Случай 4
                if (TrumpExists())
                {
                    Card card = list.Find(c => (c.IsTrump) && (c.Cost >= bribe.SeniorTrump.Cost) && (c.Type != CardType.C_7));
                    // Если найдены козыри старше, чем использованы на взятке, то необходимо использовать их
                    if (card != null)
                    {
                        foreach (Card c in list)
                        {
                            if ((c.IsTrump) && (c.Cost >= bribe.SeniorTrump.Cost))
                                possibleCards.Add(c);
                        }
                    }
                    // Если козырей старше нет, то можно использовать любой
                    else
                    {
                        foreach (Card c in list)
                        {
                            if (c.IsTrump)
                                possibleCards.Add(c);
                        }
                    }
                }
                // Если козырей нет, то он может пойти любой картой... Случай 5
                else
                {
                    return this;
                }
            }
            return possibleCards;
        }