首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 網路版鬥地主實戰(四):牌型識別與大小比較算法詳解

     編輯:關於C#

牌型枚舉定義

public enum PokerGroupType {
    Single = 1, Pair = 2, DoubleJoker = 3, Triplet = 4, TripletWithOne = 5,
    Bomb = 6, Straight5 = 7, Straight6 = 8, TripleStraight2 = 9, FourWithTwo = 10,
    Plane2 = 11, Straight7 = 12, DoubleStraight4 = 13, Straight8 = 14, PlaneWithWings = 15,
    Straight9 = 16, TripleStraight3 = 17, DoubleStraight5 = 18, Straight10 = 19,
    Straight11 = 20, Straight12 = 21, Plane4 = 22, TripleStraight3Wings = 23, DoubleStraight6 = 24,
    DoubleStraight7 = 25, Plane5 = 26, DoubleStraight8 = 27, Plane4Wings = 28,
    DoubleStraight9 = 29, Plane6 = 30, DoubleStraight10 = 31, Plane5Wings = 32
}

識別策略:按張數分流

  • 1 張 → Single
  • 2 張 → Pair / DoubleJoker
  • 3 張 → Triplet
  • 4 張 → Bomb / TripletWithOne
  • 5+ 張 → 可能為順子、連對、飛機,需進一步判斷

複雜牌型判斷輔助方法

  • IsStraight():檢查點數連續
  • IsDoubleStraight():檢查連續對子
  • IsPlane():檢查連續三張(飛機)
  • SortPlaneWings():飛機帶翅膀排序,將翅膀移至主體後,便於比較

大小比較運算符重載

public static bool operator >(PokerGroup L, PokerGroup R) {
    if (L.Type != R.Type && L.Type != Bomb && L.Type != DoubleJoker) return false;
    if (L.Type == Bomb && R.Type == Bomb) return L[0] > R[0];
    if (L.Type == Bomb) return true; // 炸彈大於非炸彈
    if (L.Type == DoubleJoker) return true; // 雙王最大
    return L[0] > R[0]; // 同類型比主牌點數
}

流程整合

  1. 接收牌組 → IsRules() 識別類型並排序
  2. 出牌時比較 myGroup > lastGroup
  3. 合法則廣播,更新 lastGroup

完整識別代碼較長,文末提供下載連結。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved