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; } } }
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); }