C#网络版斗地主——出牌权限的传递
2009-06-08 08:32:26 来源:WEB开发网haveOrder(出牌权限)传递的具体实现:
在服务器选择地主时,把出牌权限一并传给地主,所以出牌是由地主开始的。这里我先假设地主为服务器。
服务器在叫地主后,出了本局第一组牌,下面看一下出牌按钮的处理程序:
private void btnLead_Click(object sender, EventArgs e) //出牌按钮的事件处理程序
{
if (player1.lead())//尝试出牌,该方法的代码见上文,如果出牌成功,执行以下代码
{
this.btnLead.Visible = false;
this.btnPass.Visible = false;//隐藏出牌和不要按钮
if (this.server != null) //当玩家为服务器时
{
server.SendDataForClient("SPokerCount" + Convert.ToString(this.player1.pokers.Count), 1); //发送自己牌的剩余张数给client1
Thread.Sleep(100);//延迟100毫秒
server.SendDataForClient("SPokerCount" + Convert.ToString(this.player1.pokers.Count), 2);发送自己牌的剩余张数给client2
Thread.Sleep(100);
server.SendDataForClient("server", DConsole.leadPokers, 1);//发送自己出的牌组给client1
Thread.Sleep(100);
server.SendDataForClient("server", DConsole.leadPokers, 2);//发送自己出的牌组给client2
Thread.Sleep(100);
if (this.player1.pokers.Count == 0 && DConsole.IsStart) //当server端牌的张数为0并且游戏已经开始时
{
DConsole.Winer = 1; //胜利者为1,即server,这里是计分系统,很简单,不赘述
DConsole.Restart();//重新开始游戏
}
else
{
server.SendDataForClient("Order", 2); //这里就是传递权限的关键代码,当server端出牌并且牌没有出完时,传递出牌权限给server端的下家,根据权限传递顺序,server-client2-clinet1,所以这里把出牌权限传递给client2
}
DConsole.player1.haveOrder = false; //自己的出牌权限已经消失
}
if (this.client != null) //当玩家为客户端时
{
client.SendDataForServer("PokerCount" + Convert.ToString(this.player1.pokers.Count)); //发送客户端牌的剩余张数给服务器,服务器会处理并转发给另一个客户端
Thread.Sleep(500);
client.SendDataForServer("client", DConsole.leadPokers);//发送客户端出牌牌组给服务器,服务接收到该消息后,就知道客户端1或者客户端2已出牌,如果该消息是客户端1发出的,根据权限传递顺序client2-clinet1-server,服务器会获得出牌权限,如果该消息是客户端2发出的,服务器会发送消息给客户端1使客户端1拥有出牌权限
Thread.Sleep(100);
this.player1.haveOrder = false; //自己的出牌权限消失
}
player1.g.Clear(this.BackColor);
player1.Paint();
DConsole.PaintPlayer1LeadPoker();
}
else
{
DConsole.Write("[系统消息]:您出的牌不符合规则!");
}
}
更多精彩
赞助商链接