// Выбор карты для хода 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]; } }
// Создание раздачи на четверых игроков /*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(); }