WEB开发网
开发学院软件开发C语言 C#网络版斗地主——出牌权限的传递 阅读

C#网络版斗地主——出牌权限的传递

 2009-06-08 08:32:26 来源:WEB开发网   
核心提示: haveOrder(出牌权限)传递的具体实现:在服务器选择地主时,把出牌权限一并传给地主,C#网络版斗地主——出牌权限的传递(2),所以出牌是由地主开始的,这里我先假设地主为服务器,执行以下代码{this.btnLead.Visible=false;this.btnPass.Visible

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("[系统消息]:您出的牌不符合规则!");
            }
        }

上一页  1 2 3 4  下一页

Tags:网络 斗地主 权限

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接