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

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

編輯:關於C語言

player1.areYouLandLord為true後,timer控件會檢測到,然後把叫地主和不叫按鈕顯示出來。

叫地主按鈕的click事件:

this.player1.isLandLord = true; //本地玩家為地主
this.player1.haveOrder = true; //獲得出牌權限,下篇文章講到出牌權限的傳遞
this.player1.isBiggest = true; //出的牌是否為最大的,主要用於當你出的牌其他兩家都不要時,你自己不能不要,只能出牌,下篇文章會講到的
this.player1.areYouLandLord = false; //設置該值為false
this.btnNeedLandLord.Visible = false;
this.btnNotLandLord.Visible = false; //隱藏叫地主和不叫按鈕

if (this.server != null) //當玩家為服務器時
{
 this.player1.SelectLandLordEnd(); //該方法在窗口中央顯示出地主牌,然後判斷自己是不是地主,如果是地主就將地主牌添加到自己的牌組.該方法的具體代碼請看下文
 this.server.SendDataForClient("LandLordPokers", DConsole.LandLordPokers, 1); //把地主的三張牌發送給clIEnt1,因為不管誰是地主,客戶端都需要獲得地主的牌並且顯示出來
 Thread.Sleep(100);
 this.server.SendDataForClient("LandLordPokers", DConsole.LandLordPokers, 2); //同上,把數據發送個clIEnt2
 Thread.Sleep(100);
 this.server.SendDataForClient("ServerIsLandLord", 1); //通知clIEnt1,服務器是地主
 Thread.Sleep(100);
 this.server.SendDataForClient("ServerIsLandLord", 2); //通知clIEnt2,服務器是地主
 Thread.Sleep(100);
}
if (this.clIEnt != null) //當玩家為客戶端時
{
 this.clIEnt.SendDataForServer("IamLandLord"); //發送信息給服務器,服務器可以識別是哪個客戶端叫了地主,服務器如何處理請看下文的server類代碼
 Thread.Sleep(300);
}

當玩家單擊“不叫”按鈕時。如果玩家是服務器,如第一張圖所示,程序會向他的下家發送選擇地主的權限,當LandLordNum為3時,服務器就是最後一個玩家,如果他也不叫地主的話,就只能重新發牌了。

如果玩家是客戶端的話,直接向server端發送"AreYouLandLord"來表明自己不要地主。

Server端會判斷是client1還是clIEnt2發送的消息,然後做出不同的響應

下面是"不叫"按鈕的click事件處理程序

在Player類中,player1.SelectLandLordEnd的具體代碼如下:

public void SelectLandLordEnd()
{
 DConsole.PaintLandLord(true); //傳遞true給該方法,在窗口中央顯示地主三張牌的具體點數
 if (this.isLandLord) //如果自己是地主的話
 {
  foreach (Poker poker in DConsole.LandLordPokers) //把這三張牌添加到自己的牌組中
  {
   this.pokers.Add(poker);
  }
  this.sort(); //重新排序
  this.Paint(); //重新顯示自己的牌
 }
}

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