示例#1
0
 private static Card LowestCardSpade(Player player)
 {
     return(player.Hand.OrderBy(z => z.Rank).Where(z => z.Suit == GameView.Suit("spades")).FirstOrDefault());
 }
示例#2
0
        public static List <Card> CreateCardDeck()
        {
            var CardSymbols = new List <string> {
                "A", "K", "Q", "J", "10", "9"
            };
            var CardSuits = new List <string> {
                GameView.Suit("spades"), GameView.Suit("hearts"), GameView.Suit("clubs"), GameView.Suit("diamonds")
            };
            var DrawPile = new List <Card>();

            foreach (var symbol in CardSymbols)
            {
                foreach (var suit in CardSuits)
                {
                    var card = new Card(symbol, suit);
                    DrawPile.Add(card);
                }
            }
            return(DrawPile);
        }
示例#3
0
 private static bool AtLeastOneNotHeartInHand(Player player)
 {
     return(player.Hand.Where(z => z.Suit != GameView.Suit("hearts")).FirstOrDefault() != null);
 }
示例#4
0
 private static Card LowestCardNotHeart(Player player)
 {
     return(player.Hand.OrderBy(z => z.Rank).Where(z => z.Suit != GameView.Suit("hearts")).FirstOrDefault());
 }
示例#5
0
 private static bool AtLeastOneHeartWasPlayed()
 {
     return(Game.AllPlayedCards.Select(z => z).Where(z => z.Suit == GameView.Suit("hearts")).FirstOrDefault() != null);
 }
示例#6
0
 private static bool HaveHigherCardInMatchingSuitNotHeartsOrSpades(Trick trick, Player player, string currentSuit)
 {
     return(HaveMatchingSuit(player, currentSuit) && HighestCardInMatchingSuit(player, currentSuit).Rank > trick.FirstCard.Rank &&
            currentSuit != GameView.Suit("spades") && currentSuit != GameView.Suit("hearts") && (trick.Cards.Select(z => z.ValueInTrick).Sum() < 1));
 }
示例#7
0
 private static Card HighestValueCardSpade(Player player)
 {
     return(player.Hand.OrderByDescending(z => z.ValueInTrick).Where(z => z.Suit == GameView.Suit("spades") && z.ValueInTrick > 5).FirstOrDefault());
 }
示例#8
0
 private static Card HighestCardHeart(Player player)
 {
     return(player.Hand.OrderByDescending(z => z.Rank).Where(z => z.Suit == GameView.Suit("hearts")).FirstOrDefault());
 }
示例#9
0
        public static void ForComputer(Trick trick, Player player, Player currentPlayer)
        {
            Card chosenComputerCard;

            if (player == currentPlayer)        //rozpoczyna lewę
            {
                if (AtLeastOneHeartWasPlayed()) //rozpoczyna lewę i kiery zostały już zagrane w tej rundzie
                {
                    chosenComputerCard = LowestCard(player);
                    trick.FirstCard    = chosenComputerCard;
                }
                else
                {
                    if (AtLeastOneNotHeartInHand(player)) // rozpoczyna lewę, kiery nie zostały jeszcze zagrane i MA na ręce inne kolory niż kier
                    {
                        chosenComputerCard = LowestCardNotHeart(player);
                        trick.FirstCard    = chosenComputerCard;
                    }
                    else // rozpoczyna lewę, kiery nie zostały jeszcze zagrane, ale ma tylko kiery
                    {
                        chosenComputerCard = LowestCard(player);
                        trick.FirstCard    = chosenComputerCard;
                    }
                }
            }
            else // nie rozpoczyna lewy
            {
                trick.FirstCard = GameController.DetermineTrickWinningCard(trick);
                var currentSuit = trick.FirstCard.Suit;

                if (HaveHigherCardInMatchingSuitNotHeartsOrSpades(trick, player, currentSuit)) // nie rozpoczyna lewy i ma wyższą kartę w obowiązującym kolorze, (nie pik i nie kier!)
                {
                    chosenComputerCard = HighestCardInMatchingSuit(player, currentSuit);
                }
                else if (HaveMatchingSuit(player, currentSuit)) //nie rozpoczyna lewy, ma tylko niższe karty w obowiązującym kolorze
                {
                    chosenComputerCard = LowestCardInMatchingSuit(player, currentSuit);
                }
                else // nie rozpoczyna lewy, nie ma kart w obowiązującym kolorze
                {
                    if (HighestValueCardSpade(player) != null) //ma Asa, Króla lub Damę pik
                    {
                        chosenComputerCard = HighestValueCardSpade(player); //zagrywa w kolejności Damę, Króla lub Asa pik
                    }
                    else if (HighestCardHeart(player) != null)              // Ma kiery
                    {
                        chosenComputerCard = HighestCardHeart(player);      // zagrywa najwyższego kiera
                    }
                    else
                    {
                        chosenComputerCard = HighestCard(player); // zagrywa najwyższą kartę
                    }
                }
            }
            trick.Cards.Add(chosenComputerCard);
            player.Discard(chosenComputerCard);

            Game.AllPlayedCards.Add(chosenComputerCard);

            GameView.ChosenComputerCard(player, chosenComputerCard);
        }