程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#網絡版斗地主——地主權限的傳遞(1)

C#網絡版斗地主——地主權限的傳遞(1)

編輯:關於C語言

本文是對C#網絡版斗地主的總結。

首先服務器使用一個隨機數來隨即選出默認地主。然後發送信息給選出來的玩家。玩家接收到信息後顯示兩個按鈕“叫地主”,“不叫”。如果選擇不叫,則把可以叫地主的權限發送給另外一個玩家,如果另外兩個玩家都不要的話,就執行Restart()方法重新發牌。

叫地主權限的傳遞順序如下圖所示:

具體實現方法:

服務器得到一個1-3的隨機數,1代表服務器是默認地主(默認地主就是隨機選擇的第一個有權限叫地主的玩家),2代表client1是默認地主,3代表clIEnt2是默認地主。只有服務器端能夠選擇地主,所以該方法在server類中

public void SendOrder(int Num)
{
 switch (Num)
 {
  case 1:
   DConsole.player1.areYouLandLord = true; //把叫地主權限給自己
   break;
  case 2:
   this.SendDataForClient("AreYouLandLord", 1); //傳遞叫地主權限給clIEnt1
   break;
  case 3:
   this.SendDataForClient("AreYouLandLord", 2); //傳遞叫地主權限給clIEnt2
   break;
 }
}

客戶端的循環接收數據程序會分析服務端發送過來的數據,在clIEnt類:

(代碼比較長,所以只貼出和地主權限傳遞有關的一部分)

public void AcceptServerData()
{
 NetworkStream Ns = clIEnt.GetStream();
 string str = "";
 while (true)
 {
  byte[] bytes = new byte[108];
  Ns.Read(bytes, 0, 108);
  str = Encoding.Default.GetString(bytes);
  (省略一部分)
  if (str.StartsWith("AreYouLandLord")) //如果服務器向客戶端發送該消息,則客戶端獲取叫地主權限
  {
   DConsole.player1.areYouLandLord = true; //timer控件檢測到該屬性值為true時顯示出叫地主和不叫按鈕
   continue;
  }
  if (str.StartsWith("LandLordPokers")) //獲取服務器發送給客戶端的地主的3張牌,收到這三張牌後地主權限的傳遞就結束了
  {
   PokerGroup pokers = new PokerGroup();
   str = str.Replace("LandLordPokers", "");
   byte[] bytePg = Encoding.Default.GetBytes(str);
   pokers.GetPokerGroup(bytePg);
   DConsole.LandLordPokers = pokers; //把接收到的地主牌保存起來
   DConsole.player1.SelectLandLordEnd(); //該方法在窗口中央顯示出地主牌,然後判斷自己是不是地主,如果是地主就將地主牌添加到自己的牌組.該方法的具體代碼請看下文
   continue;
  }
  if (str.StartsWith("ClIEntIsLandLord")) //另外一個客戶端是地主
  {
   DConsole.lblClIEnt2Name.Text += "(地主)";
   DConsole.lblClIEnt2Name.ForeColor = System.Drawing.Color.Red;
   DConsole.PaintClIEnt(20);
   continue;
  }
  if (str.StartsWith("ServerIsLandLord")) //服務器是地主
  {
   DConsole.lblClIEnt1Name.Text += "(地主)";
   DConsole.lblClIEnt1Name.ForeColor = System.Drawing.Color.Red;
   DConsole.PaintServer(20);
   continue;
  }
  (後面省略)
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved