
順序:Server → Client2 → Client1(循環)。隨機選首位叫地主者,依序傳遞「叫/不叫」權限。
public void SendOrder(int num) {
switch (num) {
case 1: player1.areYouLandLord = true; break; // 自己
case 2: Send("AreYouLandLord", 1); break; // Client1
case 3: Send("AreYouLandLord", 2); break; // Client2
}
}
// Client 接收循環
if (msg.StartsWith("AreYouLandLord")) player1.areYouLandLord = true; // 顯示叫/不叫按鈕
if (msg.StartsWith("LandLordPokers")) { // 收到底牌
LandLordPokers = Parse(msg);
SelectLandLordEnd(); // 顯示底牌、加入手牌
}
if (msg.StartsWith("ClientIsLandLord")) UpdateUI("Client2地主");
if (msg.StartsWith("ServerIsLandLord")) UpdateUI("Server地主");
// 叫地主
player1.isLandLord = true; haveOrder = true; isBiggest = true;
HideButtons();
if (isServer) {
SelectLandLordEnd();
Send("LandLordPokers", pokers, 1); Send("LandLordPokers", pokers, 2);
Send("ServerIsLandLord", 1); Send("ServerIsLandLord", 2);
}
if (isClient) Send("IamLandLord");
// 不叫
player1.areYouLandLord = false;
if (isServer) {
if (LandLordNum == 3) Restart(); // 最後一位也不叫 → 重發
else Send("AreYouLandLord", 2); // 傳給下家
}
if (isClient) Send("AreYouLandLord"); // 告訴伺服器我不叫
// 接收 Client1
if (msg.StartsWith("AreYouLandLord")) {
if (LandLordNum == 1) Restart(); // 我是首位且Client1不叫 → 我是最後 → 重發
else player1.areYouLandLord = true; // 輪到我
}
if (msg.StartsWith("IamLandLord")) { // Client1 叫地主
Send("ClientIsLandLord", 2);
Send("LandLordPokers", pokers, 1); Send("LandLordPokers", pokers, 2);
SelectLandLordEnd();
}
// 接收 Client2 類似,順序調整
public void SelectLandLordEnd() {
PaintLandLord(true); // 顯示底牌
if (isLandLord) {
foreach (var p in LandLordPokers) pokers.Add(p);
Sort(); Paint();
}
}