本系列第一部分,建立地主權限傳遞的核心邏輯框架:隨機選定預設地主、權限傳遞順序圖、Server 啟動權限分發、Client 接收處理迴圈。

三種隨機起始順序 (LandLordNum):
若傳遞至最後一人仍「不叫」 → Restart() 重新發牌。
public void SendOrder(int num) {
switch (num) {
case 1: DConsole.Player1.AreYouLandLord = true; break; // 自己
case 2: SendDataForClient("AreYouLandLord", 1); break; // 給 Client1
case 3: SendDataForClient("AreYouLandLord", 2); break; // 給 Client2
}
}
此方法在發牌完成後呼叫,num 為 Random.Next(1,4) 結果。
public void AcceptServerData() {
var ns = _client.GetStream();
while (true) {
byte[] buffer = new byte[108];
ns.Read(buffer, 0, buffer.Length);
string msg = Encoding.Default.GetString(buffer);
if (msg.StartsWith("AreYouLandLord")) {
DConsole.Player1.AreYouLandLord = true; // Timer 偵測顯示按鈕
continue;
}
if (msg.StartsWith("LandLordPokers")) {
// 解析地主三張牌
DConsole.LandLordPokers = ParsePokers(msg.Replace("LandLordPokers", ""));
DConsole.Player1.SelectLandLordEnd(); // 顯示並加入手牌(若是地主)
continue;
}
if (msg.StartsWith("ClientIsLandLord")) { /* 標記另一 Client 為地主 */ }
if (msg.StartsWith("ServerIsLandLord")) { /* 標記 Server 為地主 */ }
}
}
| 變數 | 所在類別 | 用途 |
|---|---|---|
| LandLordNum | DConsole | 隨機決定起始權限者 (1/2/3) |
| AreYouLandLord | Player | 當前輪到該玩家決定叫/不叫 |
| IsLandLord | Player | 確認該玩家為地主 |
| HaveOrder | Player | 出牌權限標記 |
| IsBiggest | Player | 上一輪出牌最大,下家皆過 |