Exemple #1
0
        public void predictTrickWinner()
        {
            Trick currentTrick    = tricks[tricks.Count - 1];
            int   winningCard     = currentTrick.GetCurrentWinningCard();
            int   winningPlayerId = currentTrick.GetCurrentWinningPlayer();
            int   remainingPlays  = 4 - currentTrick.GetCurrentTrickSize();
            int   leadSuit        = currentTrick.LeadSuit;

            if (winningCard == -1)
            {
                Console.WriteLine("PIG::predictTrickWinner >> Impossible winningCard");
            }

            //if (Card.GetSuit(winningCard) != leadSuit)
            //{
            //    predictableTrickCut = true;
            //}
            predictableTrickCut = false;

            for (int i = 0, pid = currentTrick.GetNextPlayerId(); i < remainingPlays; i++, pid = (pid + 1) % 4)
            {
                int bestCard = players[pid].GetHighestRankFromSuit(leadSuit, trump);
                if (bestCard == -1)
                {
                    //the player does not have the leadsuit neigher the trump
                    continue;
                }

                if (Card.GetSuit(bestCard) != leadSuit)
                {
                    if (Card.GetSuit(winningCard) == leadSuit || Card.GetRank(bestCard) > Card.GetRank(winningCard))
                    {
                        predictableTrickCut    = true;
                        winningCard            = bestCard;
                        predictableTrickWinner = pid;
                    }
                }
                else if (Card.GetRank(bestCard) > Card.GetRank(winningCard) && !predictableTrickCut)
                {
                    winningCard            = bestCard;
                    predictableTrickWinner = pid;
                }
            }
        }
Exemple #2
0
        public List <int> orderPossibleMoves(List <int> moves, int playerID)
        {
            Trick currentTrick     = tricks[tricks.Count - 1];
            int   leadSuit         = currentTrick.LeadSuit;
            int   currentTrickSize = currentTrick.GetCurrentTrickSize();

            if (moves.Count == 1)
            {
                return(moves);
            }

            if (currentTrickSize == 0)
            {
                AscendingComparer ac = new AscendingComparer();
                moves.Sort(ac);
                return(moves);
            }

            if (predictableTrickWinner == -1)
            {
                predictTrickWinner();
            }

            if (!predictableTrickCut && (predictableTrickWinner == playerID || predictableTrickWinner == (playerID + 2) % 4))
            {
                AscendingComparer ac = new AscendingComparer();
                moves.Sort(ac);
            }
            else if (predictableTrickCut && (predictableTrickWinner == playerID || predictableTrickWinner == (playerID + 2) % 4))
            {
                AscendingCutComparer acc = new AscendingCutComparer(trump);
                moves.Sort(acc);
            }
            else
            {
                DescendingComparer dc = new DescendingComparer();
                moves.Sort(dc);
            }

            return(moves);
        }