出牌順序:Server → Client2 → Client1 → Server (循環)。使用 bool haveOrder 表示擁有出牌權,bool isBiggest 表示上輪出的牌為最大(無人能管)。
private bool _haveOrder;
public bool haveOrder { get { return _haveOrder; } set { _haveOrder = value; } }
private bool _isBiggest;
public bool isBiggest
{
get { return _isBiggest; }
set
{
if (value) // 設為 true 時廣播
{
if (DConsole.client != null) DConsole.client.SendDataForServer("IamIsBiggest");
if (DConsole.server != null)
{
DConsole.server.SendDataForClient("NoBiggest", 1);
DConsole.server.SendDataForClient("NoBiggest", 2);
}
}
_isBiggest = value;
}
}
public bool lead() // 出牌邏輯
{
DConsole.leadPokers = leadPokers;
leadPokers.Clear();
foreach (int idx in selectPokers) leadPokers.Add(pokers[idx]);
if (DConsole.IsRules(leadPokers)) // 符合規則
{
if (player1.isBiggest || leadPokers > DConsole.leadedPokerGroups.Last()) // 能管過上輪
{
if (leadPokers.type == PokerGroupType.炸彈) DConsole.multiple *= 2;
if (leadPokers.type == PokerGroupType.雙王) DConsole.multiple *= 3;
player1.isBiggest = true; // 假設自己最大
BakPoker(); // 備份
foreach (int idx in selectPokers) pokers.Remove(bakPokers[idx]);
selectPokers.Clear();
return true;
}
else { leadPokers.Clear(); return false; }
}
else { leadPokers.Clear(); return false; }
}
isBiggest 設為 true 時主動通知其他玩家重置其 isBiggest,確保同一時間只有一個最大牌。lead() 包含規則驗證、大小比較、炸彈/雙王加倍、移除已出牌、備份還原機制。Order 指令)。