·建站首页 ·钻石 ·繁體
您的位置: 中国建站之家 -> 工具应用 -> Flash -> Flash MX 编程深层次应用-网络连线游戏(2)

Flash MX 编程深层次应用-网络连线游戏(2)

作者:未知  来源:http://edu.chinaz.com  发布时间:2005-7-18 22:59:28  发布人:acx

7.2 游戏区(1)

    

游戏区其实就相当于一个游戏棋室的功能,从图7-4中可以看出屏幕上放了一些游戏桌,桌的形状如图7-5所示,用简单的线条与不同色的棋子来标志一个棋盘。在棋盘的下面有一个编号,用来区别不同的棋局。


7-5

7.2.1  棋手的坐下与起立

既然有棋桌,那么棋手就可以坐下与起立,而且把左边与右边分开处理,左边的变量名叫player_left,右边的变量名叫player_right。如果有人坐在左边就在左边显示一个小人,表示已经有人坐了,同理如果有人坐在右边就显示另一个小人。两个小人的样式如图7-6所示。

7-6

1.检测玩家

首先先让这两个小人全部隐藏,然后在检查到名字变量不为空时就显示小人。

左边小人的程序

onClipEvent (enterFrame) {

if(_parent.trim(_parent.player_left)!=""&&_parent.trim(_parent.player_left)!=null) {

    this.gotoAndStop (2);

} else {

    this.gotoAndStop (1);

}

}

右边小人的程序

onClipEvent (enterFrame) {

if (_parent.trim(_parent.player_right)!=""&& _parent.trim(_parent.player_right)!=null) {

    this.gotoAndStop (2);

} else {

    this.gotoAndStop (1);

}

}

一张棋盘在源文件中的排列如图7-7所示。

7-7

左边的那个文本框是player_left,右边的是player_right,中间的是table_no。虽然两个小人平时并不显示出来,但是却得让它们在相应的位置有按钮可以按,这样才可以保证玩家可以方便地坐在棋盘边。于是制作了一个仅有激活区域的空白按钮,也就是读者所看到的浅色的小方块,这个小方块仅仅显示出激活区域,在实际运行时不会显示。当然,这两个按钮还得有它们的程序。

左侧按钮

左边按钮的代码:

on (release) {

    if (player_left ==_root.nickname || trim(player_left) == "" || player_left == null) {

             var chatXML;

             var m_Message;

             chatXML = new XML();

       //求出我在100盘棋中正处于哪一盘

             var place = Number(this._name.substring(6));

             place += _parent.table_begin-1;

             sit_table = "Table_"+place;

       //向后台发出一个坐下指令

             m_Message = chatXML.createElement("CMD");

             m_Message.attributes.VALUE = "SIT";

             if (player_left == _root.nickname) {

                      // 如果已经坐在该位置的话,就意味着自己要起立

                      _root.player_left[place] = player_left="";

                      _root.myself.PlayStatus = "StandUp";

           //起立用stand_up表示

                      m_Message.attributes.PARAM = place+" stand_up "+_root.nickname;

             } else if ((trim(player_left) == "" || player_left == null) && _root.myself.PlayStatus != "SitDown") {

                      _root.player_left[place] = player_left=_root.nickname;

                      _root.myself.PlayStatus = "SitDown";

                      _root.now_sit_table = place;

          //如果是坐下就用left表示坐在左边,right坐在右边

                      m_Message.attributes.PARAM = place+" left "+player_left;

             }

             //不管自己是坐下还是起立,都要发条信息给后台,并由后台进行广播

             chatXML.appendChild(m_Message);

             trace (chatXML.toString());

             // send it!!!

             if (_root.now_sit_table == place && player_right != _root.nickname ) {

                      // 表示就坐在当前台

                      _root.chatSocket.send(chatXML);

          //先清空对家

                      _root.rival = "";

                      if (trim(player_left) != "" && player_left != null && trim(player_right) != "" && player_right != null) {

              //如果对家也坐了人就开始下棋了,然后初始化变量

              //对手名

                                _root.rival = player_right;

              //谁先下,左边的红棋先下

                                _root.i_run = true;

              //谁拿什么棋,我现在在左边是拿红棋,对手拿右边的蓝棋

                                _root.my_logo = _root.First_play;

                                _root.your_logo = _root.Second_play;

              //表示玩家正坐在哪张台

                                _root.now_play_table = place;

              //开始与对家下棋

                                _root.begin_play(_root.nickname,_root.rival);

                                _root.gotoAndPlay("begin_play");

                      }

             } else {

                      // 表示自己已经坐在其他台,提示玩家要在其他台先起立

                      disp_left.gotoAndPlay("display");

             }

    }

}

右侧按钮

右边按钮的程序与左边理论上是一样的,只是把left换成了right,然后把布尔变量对换。为了大家看得更加清楚,特列出程序如下:

on (release){

    if (player_right == _root.nickname || trim(player_right) == "" || player_right == null) {

             var chatXML;

             var m_Message;

             var place = Number(this._name.substring(6));

             place += _parent.table_begin-1;

             sit_table = "Table_"+place;

             chatXML = new XML();

             m_Message = chatXML.createElement("CMD");

             m_Message.attributes.VALUE = "SIT";

             if (player_right == _root.nickname) {

                      _root.player_right[place] = player_right="";

                      _root.myself.PlayStatus = "StandUp";

                      m_Message.attributes.PARAM = place+" stand_up "+_root.nickname;

             } else if ((trim(player_right) == "" || player_right == null) && _root.myself.PlayStatus != "SitDown") {

                      _root.player_right[place] = player_right=_root.nickname;

                      _root.myself.PlayStatus = "SitDown";

                      _root.now_sit_table = place;

                      m_Message.attributes.PARAM = place+" right "+player_right;

             }

             chatXML.appendChild(m_Message);

             trace (chatXML.toString());

             // send it!!!

             if (_root.now_sit_table == place && player_left != _root.nickname) {

                      _root.chatSocket.send(chatXML);

                      _root.rival = "";

                      if (trim(player_left) != "" && player_left != null && trim(player_right) != "" && player_right != null) {

              //如果对家也坐了人就开始下棋,然后初始化变量

              //对手名

                                _root.rival = player_left;

              //右边的后走

                                _root.i_run = false;

              //我在右边拿蓝棋,对手在左边拿红棋

                                _root.my_logo = _root.Second_play;

                                _root.your_logo = _root.First_play;

                                _root.now_play_table = place;

              //开始下棋

                                _root.begin_play(_root.nickname,_root.rival);

                                _root.gotoAndPlay("begin_play");

                      }

             } else {

                      // 表示自己坐在其他台,提示玩家

                      disp_right.gotoAndPlay("display");

             }

    }

}

后台收到的内容

<CMD PARAM="6 stand_up dongua" VALUE="SIT" />

这里的value其实分成三个部分,每个部分之间用空格分开。

第一个是数字,表示当前的棋盘号。

第二个是状态,表示如下:

Ö           stand_up表示起立
Ö           left表示坐在棋盘左边
Ö           right表示坐在棋盘右边

第三个则是用户的名称,后台根据这三项内容进行相应的处理。

处理完之后结果发回给用户:

<SIT VALUE="6:stand_up:dongua" />

也是分成三个部分,只是其分隔符改成了冒号。

将本文收藏到QQ书签与更多好友分享