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

C# 網路版鬥地主實戰(二):叫地主權限傳遞與地主確定流程

     編輯:關於C#

權限傳遞順序

叫地主權限流向

順序: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();
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved