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("Order")) //收到這條消息即表示自己有出牌權限了
{
DConsole.player1.haveOrder = true;
continue;
}
if (str.StartsWith("ClIEntPass")) //另一個客戶端pass後,在窗體中表示出來
{
DConsole.gPlayer3LeadPoker.Clear(DConsole.backColor);
DConsole.gPlayer3LeadPoker.DrawString("不要", new System.Drawing.Font("宋體", 20), System.Drawing.Brushes.Red, 5, 5);
continue;
}
if (str.StartsWith("ServerPass"))//服務器pass後,在窗體中表示出來
{
DConsole.gPlayer2LeadPoker.Clear(DConsole.backColor);
DConsole.gPlayer2LeadPoker.DrawString("不要", new System.Drawing.Font("宋體", 20), System.Drawing.Brushes.Red, 5, 5);
continue;
}
if (str.StartsWith("NoBiggest")) //當自己的牌被別人打了後,別人會發送該消息給自己,這時設置自己的Isbiggest為false
{
DConsole.player1.isBiggest = false;
continue;
}
}
以上就是出牌權限傳遞的具體實現,這些代碼之間是相互關聯的,形成一個回路。除非有人的牌出完了,否則就會一直傳遞下去。代碼比較多,如果哪裡有錯誤的話歡迎留言反饋,謝謝!