public RoomState(int roomID) { RoomID = roomID; CurrentGameState = new GameState(); CurrentHandState = new CurrentHandState(this.CurrentGameState); CurrentTrickState = new CurrentTrickState(); roomSetting = new RoomSetting(); }
/// <summary> /// </summary> /// <param name="handState"></param> /// <param name="lastTrickState">扣抵的牌</param> /// <returns></returns> public PlayerEntity NextRank(CurrentHandState handState, CurrentTrickState lastTrickState) { if (!Players.Exists(p => p.PlayerId == handState.Starter)) { //log return(null); } if (handState.Rank != 9) { return(NextRank(handState.Starter, handState.Score)); } if (handState.Score >= 80) { //主J勾到底 var cardscp = new CurrentPoker(lastTrickState.ShowedCards[lastTrickState.LatestPlayerShowedCard()], handState.Trump, handState.Rank); if (cardscp.MasterRank > 0) { foreach (PlayerEntity player in Players) { if (ArePlayersInSameTeam(handState.Starter, player.PlayerId)) { player.Rank = 0; } } } //副J勾一半 else if (cardscp.SubRank > 0) { foreach (PlayerEntity player in Players) { if (ArePlayersInSameTeam(handState.Starter, player.PlayerId)) { player.Rank = handState.Rank / 2; } } } return(GetNextPlayerAfterThePlayer(false, handState.Starter)); } return(null); }
//确定谁的牌最大,支持部分玩家出了牌 public static string GetWinnerWithoutAllShowedCards(CurrentTrickState trickState) { var cp = new CurrentPoker[4]; Suit trump = trickState.Trump; var trumpInt = (int)trickState.Trump; int rank = trickState.Rank; cp[0] = new CurrentPoker(trickState.ShowedCards[trickState.Learder], trumpInt, rank); string nextPlayer1 = trickState.NextPlayer(trickState.Learder); cp[1] = new CurrentPoker(trickState.ShowedCards[nextPlayer1], trumpInt, rank); string nextPlayer2 = trickState.NextPlayer(nextPlayer1); cp[2] = new CurrentPoker(trickState.ShowedCards[nextPlayer2], trumpInt, rank); string nextPlayer3 = trickState.NextPlayer(nextPlayer2); cp[3] = new CurrentPoker(trickState.ShowedCards[nextPlayer3], trumpInt, rank); //cp[0].Sort(); //cp[1].Sort(); //cp[2].Sort(); //cp[3].Sort(); int leadingCardsCount = trickState.ShowedCards[trickState.Learder].Count; int winderNumber = 0; var leadingSuit = (int)trickState.LeadingSuit; List <int> leadingTractor = cp[0].GetTractorOfAnySuit(); //甩牌 拖拉机 if ((leadingTractor.Count > 1) && (cp[0].Count > leadingTractor.Count * 2)) //甩拖拉机 { int maxCard = leadingTractor[0]; if (trickState.ShowedCards[nextPlayer1].Count > 0) { List <int> tractor1 = cp[1].GetTractor(trump); if (tractor1.Count >= leadingTractor.Count && (!cp[1].IsMixed() && cp[1].GetPairs().Count >= cp[0].GetPairs().Count)) { int tmpMax = tractor1[0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 1; maxCard = tmpMax; } } } if (trickState.ShowedCards[nextPlayer2].Count > 0) { List <int> tractor2 = cp[2].GetTractor(trump); if (tractor2.Count >= leadingTractor.Count && (!cp[2].IsMixed() && cp[2].GetPairs().Count >= cp[0].GetPairs().Count)) { int tmpMax = tractor2[0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 2; maxCard = tmpMax; } } } if (trickState.ShowedCards[nextPlayer3].Count > 0) { List <int> tractor3 = cp[3].GetTractor(trump); if (tractor3.Count >= leadingTractor.Count && (!cp[3].IsMixed() && cp[3].GetPairs().Count >= cp[0].GetPairs().Count)) { int tmpMax = tractor3[0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 3; } } } } //甩牌 对 else if ((2 < leadingCardsCount) && (cp[0].GetPairs().Count > 0) && leadingTractor.Count < 2) { int maxCard = CommonMethods.GetMaxCard(cp[0].GetPairs(), trump, rank); if (trickState.ShowedCards[nextPlayer1].Count > 0) { if (cp[1].GetPairs().Count >= cp[0].GetPairs().Count&& (!cp[1].IsMixed())) { int tmpMax = CommonMethods.GetMaxCard(cp[1].GetPairs(), trump, rank); if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 1; maxCard = tmpMax; } } } if (trickState.ShowedCards[nextPlayer2].Count > 0) { if (cp[2].GetPairs().Count >= cp[0].GetPairs().Count&& (!cp[2].IsMixed())) { int tmpMax = CommonMethods.GetMaxCard(cp[2].GetPairs(), trump, rank); if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 2; maxCard = tmpMax; } } } if (trickState.ShowedCards[nextPlayer3].Count > 0) { if (cp[3].GetPairs().Count >= cp[0].GetPairs().Count&& (!cp[3].IsMixed())) { int tmpMax = CommonMethods.GetMaxCard(cp[3].GetPairs(), trump, rank); if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 3; } } } } //甩多个单张牌 else if ((leadingCardsCount > 1) && (cp[0].GetPairs().Count == 0)) { int maxCard = CommonMethods.GetMaxCard(trickState.ShowedCards[trickState.Learder], trump, rank); int tmpMax = 0; if (trickState.ShowedCards[nextPlayer1].Count > 0) { tmpMax = CommonMethods.GetMaxCard(trickState.ShowedCards[nextPlayer1], trump, rank); if (cp[1].GetSuitCardsWithJokerAndRank(trumpInt).Count() == trickState.ShowedCards[trickState.Learder].Count) { if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 1; maxCard = tmpMax; } } } if (trickState.ShowedCards[nextPlayer2].Count > 0) { if (cp[2].GetSuitCardsWithJokerAndRank(trumpInt).Count() == trickState.ShowedCards[trickState.Learder].Count) { tmpMax = CommonMethods.GetMaxCard(trickState.ShowedCards[nextPlayer2], trump, rank); if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 2; maxCard = tmpMax; } } } if (trickState.ShowedCards[nextPlayer3].Count > 0) { if (cp[3].GetSuitCardsWithJokerAndRank(trumpInt).Count() == trickState.ShowedCards[trickState.Learder].Count) { tmpMax = CommonMethods.GetMaxCard(trickState.ShowedCards[nextPlayer3], trump, rank); if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 3; } } } } //拖拉机 else if (leadingTractor.Count > 1) { //如果有拖拉机 List <int> tractor0 = cp[0].GetTractorOfAnySuit(); List <int> tractor1 = null; List <int> tractor2 = null; List <int> tractor3 = null; if (trickState.ShowedCards[nextPlayer1].Count > 0) { tractor1 = cp[1].GetTractorOfAnySuit(); } if (trickState.ShowedCards[nextPlayer2].Count > 0) { tractor2 = cp[2].GetTractorOfAnySuit(); } if (trickState.ShowedCards[nextPlayer3].Count > 0) { tractor3 = cp[3].GetTractorOfAnySuit(); } int maxCard = tractor0[0]; if (trickState.ShowedCards[nextPlayer1].Count > 0) { if (tractor1.Count >= tractor0.Count) { int tmpMax = tractor1[0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 1; maxCard = tmpMax; } } } if (trickState.ShowedCards[nextPlayer2].Count > 0) { if (tractor2.Count >= tractor0.Count) { int tmpMax = tractor2[0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 2; maxCard = tmpMax; } } } if (trickState.ShowedCards[nextPlayer3].Count > 0) { if (tractor3.Count >= tractor0.Count) { int tmpMax = tractor3[0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 3; } } } } else if (cp[0].GetPairs().Count == 1 && (leadingCardsCount == 2)) //如果有一个对 { var maxCard = (int)cp[0].GetPairs()[0]; if (trickState.ShowedCards[nextPlayer1].Count > 0) { if (cp[1].GetPairs().Count > 0) { var tmpMax = (int)cp[1].GetPairs()[0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 1; maxCard = tmpMax; } } } if (trickState.ShowedCards[nextPlayer2].Count > 0) { if (cp[2].GetPairs().Count > 0) { var tmpMax = (int)cp[2].GetPairs()[0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 2; maxCard = tmpMax; } } } if (trickState.ShowedCards[nextPlayer3].Count > 0) { if (cp[3].GetPairs().Count > 0) { var tmpMax = (int)cp[3].GetPairs()[0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 3; } } } } else if (leadingCardsCount == 1) //如果是单张牌 { int maxCard = trickState.ShowedCards[trickState.Learder][0]; int tmpMax = 0; if (trickState.ShowedCards[nextPlayer1].Count > 0) { tmpMax = trickState.ShowedCards[nextPlayer1][0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 1; maxCard = tmpMax; } } if (trickState.ShowedCards[nextPlayer2].Count > 0) { tmpMax = trickState.ShowedCards[nextPlayer2][0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 2; maxCard = tmpMax; } } if (trickState.ShowedCards[nextPlayer3].Count > 0) { tmpMax = trickState.ShowedCards[nextPlayer3][0]; if (!CommonMethods.CompareTo(maxCard, tmpMax, trumpInt, rank, leadingSuit)) { winderNumber = 3; } } } string winner = ""; switch (winderNumber) { case 0: winner = trickState.Learder; break; case 1: winner = nextPlayer1; break; case 2: winner = nextPlayer2; break; case 3: winner = nextPlayer3; break; } return(winner); }
/// <summary> /// 判断玩家出的牌是否合法 /// 不能检查甩牌是否成功 /// </summary> /// <param name="currentTrickState">这回和出牌的状态</param> /// <param name="selectedCards">玩家选择的牌</param> /// <param name="currentCards">玩家的牌(包括选择的)</param> /// <returns></returns> public static ShowingCardsValidationResult IsValid(CurrentTrickState currentTrickState, List <int> selectedCards, CurrentPoker currentCards) { //玩家选择牌之后剩下的牌 var leftCardsCp = (CurrentPoker)currentCards.Clone(); foreach (int card in selectedCards) { leftCardsCp.RemoveCard(card); } var showingCardsCp = new CurrentPoker(); showingCardsCp.TrumpInt = (int)currentCards.Trump; showingCardsCp.Rank = currentCards.Rank; foreach (int showingCard in selectedCards) { showingCardsCp.AddCard(showingCard); } //showingCardsCp.Sort(); var leadingCardsCp = new CurrentPoker(); leadingCardsCp.TrumpInt = (int)currentCards.Trump; leadingCardsCp.Rank = currentCards.Rank; foreach (int card in currentTrickState.LeadingCards) { leadingCardsCp.AddCard(card); } // leadingCardsCp.Sort(); //the first player to show cards if (!currentTrickState.IsStarted()) { if (showingCardsCp.Count > 0 && !showingCardsCp.IsMixed()) { if (selectedCards.Count == 1) //如果是单张牌 { return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Valid }); } if (selectedCards.Count == 2 && (showingCardsCp.GetPairs().Count == 1)) //如果是一对 { return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Valid }); } if ((showingCardsCp.GetTractorOfAnySuit().Count > 1) && selectedCards.Count == showingCardsCp.GetTractorOfAnySuit().Count *2) //如果是拖拉机 { return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Valid }); } return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.TryToDump }); } } //牌的数量 if (currentTrickState.LeadingCards.Count != selectedCards.Count) { return new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Invalid } } ; //得到第一个家伙出的花色 Suit leadingSuit = currentTrickState.LeadingSuit; bool isTrump = PokerHelper.IsTrump(currentTrickState.LeadingCards[0], currentCards.Trump, currentCards.Rank); if (isTrump) { leadingSuit = currentCards.Trump; } //如果出的牌混合的,则判断手中是否还剩出的花色,如果剩,false;如果不剩;true if (showingCardsCp.IsMixed()) { if (leftCardsCp.HasSomeCards((int)leadingSuit)) { return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Invalid }); } return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Valid }); } //出的牌的花色 Suit mysuit = PokerHelper.GetSuit(selectedCards[0]); isTrump = PokerHelper.IsTrump(selectedCards[0], currentCards.Trump, currentCards.Rank); if (isTrump) { mysuit = currentCards.Trump; } //花色是否一致 if (mysuit != leadingSuit) { //而且确实没有此花色 if (leftCardsCp.HasSomeCards((int)leadingSuit)) { return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Invalid }); } return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Valid }); } //别人如果出对,我也应该出对 int leadingCardsPairs = leadingCardsCp.GetPairs().Count; int selectedCardsPairs = showingCardsCp.GetPairs().Count; int holdingCardsPairs = currentCards.GetPairs((int)leadingSuit).Count; //2.如果别人出拖拉机,我如果有,也应该出拖拉机 if (leadingCardsCp.HasTractors()) { if ((!showingCardsCp.HasTractors()) && (currentCards.GetTractor((int)leadingSuit) > -1)) { return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Invalid }); } if ((selectedCardsPairs < leadingCardsPairs) && (holdingCardsPairs > selectedCardsPairs)) //出的对比第一个玩家少,而且没有出所有的对 { return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Invalid }); } return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Valid }); } if (leadingCardsPairs > 0) { //如果对出的不够多,而且没有出所有的对 if ((holdingCardsPairs > selectedCardsPairs) && (selectedCardsPairs < leadingCardsPairs)) { return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Invalid }); } return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Valid }); } return(new ShowingCardsValidationResult { ResultType = ShowingCardsValidationResultType.Valid }); }
//先手 public static void ShouldSelectedCards(List <int> selectedCards, CurrentTrickState currentTrickState, CurrentPoker currentPoker) { var currentCards = (CurrentPoker)currentPoker.Clone(); var allSuitCardsCp = (CurrentPoker)currentPoker.Clone(); var allSuitCards = allSuitCardsCp.Cards; var maxValue = currentPoker.Rank == 12 ? 11 : 12; //先出A foreach (Suit st in Enum.GetValues(typeof(Suit))) { if (st == Suit.None || st == Suit.Joker || st == currentCards.Trump) { continue; } int maxCards = currentCards.GetMaxCards((int)st); if (maxCards % 13 == maxValue && allSuitCards[maxCards] == 1) { selectedCards.Add(maxCards); return; } //dumping causing concurrency issue, TODO: use timer tick //if (maxCards % 13 == maxValue) //{ // while (maxCards % 13 > 0 && allSuitCards[maxCards] == 2 || maxCards == currentTrickState.Rank) // { // if(maxCards != currentTrickState.Rank){ // selectedCards.Add(maxCards); // selectedCards.Add(maxCards); // } // maxCards--; // } // selectedCards.Add(maxCards); // if (allSuitCards[maxCards] == 2) selectedCards.Add(maxCards); // return; //} } //再出对子 foreach (Suit st in Enum.GetValues(typeof(Suit))) { if (st == Suit.None || st == Suit.Joker || st == currentCards.Trump) { continue; } List <int> currentTractors = currentCards.GetTractor(st); if (currentTractors.Count > 1) { foreach (int tr in currentTractors) { selectedCards.Add(tr); selectedCards.Add(tr); } return; } var currentPairs = currentCards.GetPairs((int)st); if (currentPairs.Count > 0) { selectedCards.Add((int)currentPairs[currentPairs.Count - 1]); selectedCards.Add((int)currentPairs[currentPairs.Count - 1]); return; } } List <int> masterTractors = currentCards.GetTractor(currentTrickState.Trump); if (masterTractors.Count > 1) { foreach (int tr in masterTractors) { selectedCards.Add(tr); selectedCards.Add(tr); } return; } var masterPair = currentCards.GetPairs((int)currentTrickState.Trump); if (masterPair.Count > 0) { selectedCards.Add((int)masterPair[masterPair.Count - 1]); selectedCards.Add((int)masterPair[masterPair.Count - 1]); return; } int minMaster = currentCards.GetMinMasterCards((int)currentTrickState.Trump); if (minMaster >= 0) { selectedCards.Add(minMaster); return; } //其他花色的牌 for (int i = 0; i < allSuitCards.Length; i++) { if (allSuitCards[i] > 0) { selectedCards.Add(i); return; } } }
//跟选:在有必选牌的情况下自动选择必选牌,方便玩家快捷出牌 public static void MustSelectedCardsNoShow(List <int> selectedCards, CurrentTrickState currentTrickState, CurrentPoker currentPoker) { var currentCards = (CurrentPoker)currentPoker.Clone(); var leadingCardsCp = new CurrentPoker(); leadingCardsCp.TrumpInt = (int)currentTrickState.Trump; leadingCardsCp.Rank = currentTrickState.Rank; foreach (int card in currentTrickState.LeadingCards) { leadingCardsCp.AddCard(card); } Suit leadingSuit = currentTrickState.LeadingSuit; bool isTrump = PokerHelper.IsTrump(currentTrickState.LeadingCards[0], currentCards.Trump, currentCards.Rank); if (isTrump) { leadingSuit = currentCards.Trump; } selectedCards.Clear(); List <int> currentSuitCards = currentCards.GetSuitCardsWithJokerAndRank((int)leadingSuit).ToList <int>(); List <int> leadingTractors = leadingCardsCp.GetTractor(leadingSuit); var leadingPairs = leadingCardsCp.GetPairs((int)leadingSuit); //如果别人出拖拉机,则选择我手中相同花色的拖拉机 List <int> currentTractors = currentCards.GetTractor(leadingSuit); if (currentTractors.Count <= leadingTractors.Count) { for (int i = 0; i < leadingTractors.Count && i < currentTractors.Count && selectedCards.Count < leadingCardsCp.Count; i++) { selectedCards.Add(currentTractors[i]); selectedCards.Add(currentTractors[i]); currentSuitCards.Remove(currentTractors[i]); currentSuitCards.Remove(currentTractors[i]); leadingPairs.Remove(currentTractors[i]); } } //如果别人出对子,则选择我手中相同花色的对子 var currentPairs = currentCards.GetPairs((int)leadingSuit); if (currentPairs.Count <= leadingPairs.Count) { for (int i = 0; i < leadingPairs.Count && i < currentPairs.Count && selectedCards.Count < leadingCardsCp.Count; i++) { if (selectedCards.Contains((int)currentPairs[i])) { continue; } selectedCards.Add((int)currentPairs[i]); selectedCards.Add((int)currentPairs[i]); currentSuitCards.Remove((int)currentPairs[i]); currentSuitCards.Remove((int)currentPairs[i]); } } //如果别人出单张,则选择我手中相同花色的单张 if (currentSuitCards.Count() <= leadingCardsCp.Count - selectedCards.Count) { selectedCards.AddRange(currentSuitCards); } }
//跟出 public static void MustSelectedCards(List <int> selectedCards, CurrentTrickState currentTrickState, CurrentPoker currentPoker) { var currentCards = (CurrentPoker)currentPoker.Clone(); var leadingCardsCp = new CurrentPoker(); leadingCardsCp.TrumpInt = (int)currentTrickState.Trump; leadingCardsCp.Rank = currentTrickState.Rank; foreach (int card in currentTrickState.LeadingCards) { leadingCardsCp.AddCard(card); } Suit leadingSuit = currentTrickState.LeadingSuit; bool isTrump = PokerHelper.IsTrump(currentTrickState.LeadingCards[0], currentCards.Trump, currentCards.Rank); if (isTrump) { leadingSuit = currentCards.Trump; } selectedCards.Clear(); var allSuitCardsCp = (CurrentPoker)currentPoker.Clone(); var allSuitCards = allSuitCardsCp.Cards; List <int> leadingTractors = leadingCardsCp.GetTractor(leadingSuit); var leadingPairs = leadingCardsCp.GetPairs((int)leadingSuit); //如果别人出拖拉机,我如果有,也应该出拖拉机 List <int> currentTractors = currentCards.GetTractor(leadingSuit); for (int i = 0; i < leadingTractors.Count && i < currentTractors.Count && selectedCards.Count < leadingCardsCp.Count; i++) { selectedCards.Add(currentTractors[i]); selectedCards.Add(currentTractors[i]); allSuitCards[currentTractors[i]] -= 2; leadingPairs.Remove(currentTractors[i]); } //对子 var currentPairs = currentCards.GetPairs((int)leadingSuit); for (int i = 0; i < leadingPairs.Count && i < currentPairs.Count && selectedCards.Count < leadingCardsCp.Count; i++) { if (selectedCards.Contains((int)currentPairs[i])) { continue; } selectedCards.Add((int)currentPairs[i]); selectedCards.Add((int)currentPairs[i]); allSuitCards[(int)currentPairs[i]] -= 2; } //单张先跳过对子 var currentSuitCards = currentCards.GetSuitCardsWithJokerAndRank((int)leadingSuit); for (int i = 0; i < currentSuitCards.Length && selectedCards.Count < leadingCardsCp.Count; i++) { if (currentPairs.Contains(currentSuitCards[i]) || allSuitCards[(int)currentSuitCards[i]] <= 0) { continue; } selectedCards.Add(currentSuitCards[i]); allSuitCards[(int)currentSuitCards[i]]--; } //单张 for (int i = 0; i < currentSuitCards.Length && selectedCards.Count < leadingCardsCp.Count; i++) { if (allSuitCards[currentSuitCards[i]] <= 0) { continue; } selectedCards.Add(currentSuitCards[i]); allSuitCards[(int)currentSuitCards[i]]--; } //其他花色的牌先跳过所有主牌,和副牌对子,即副牌单张 for (int i = 0; i < allSuitCards.Length && selectedCards.Count < leadingCardsCp.Count; i++) { bool isITrump = PokerHelper.IsTrump(i, currentCards.Trump, currentCards.Rank); if (isITrump || allSuitCards[i] <= 0 || allSuitCards[i] == 2) { continue; } selectedCards.Add(i); allSuitCards[i]--; } //其他花色的牌跳过所有主牌 for (int i = 0; i < allSuitCards.Length && selectedCards.Count < leadingCardsCp.Count; i++) { bool isITrump = PokerHelper.IsTrump(i, currentCards.Trump, currentCards.Rank); if (isITrump || allSuitCards[i] <= 0) { continue; } while (allSuitCards[i] > 0 && selectedCards.Count < leadingCardsCp.Count) { selectedCards.Add(i); allSuitCards[i]--; } } //其他花色的牌先跳过对子 for (int i = 0; i < allSuitCards.Length && selectedCards.Count < leadingCardsCp.Count; i++) { if (allSuitCards[i] <= 0 || allSuitCards[i] == 2) { continue; } selectedCards.Add(i); allSuitCards[i]--; } //其他花色的牌 for (int i = 0; i < allSuitCards.Length && selectedCards.Count < leadingCardsCp.Count; i++) { while (allSuitCards[i] > 0 && selectedCards.Count < leadingCardsCp.Count) { selectedCards.Add(i); allSuitCards[i]--; } } }