频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源:ddcode收集 作者: 出处:巧巧读书 2006-03-26 进入讨论组
7.2 游戏区(1)

    

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


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

7-5

7.2.1  棋手的坐下与起立

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

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

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所示。

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

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" />

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

更多文章 更多内容请看网络管理实用手册网络故障手册网络组网专题专题,或进入讨论组讨论。
更多专题 【深 度 阅 读】 相 关 文 章
    收藏此文】【 】【打印】【关闭
    相关图文阅读
    频道图文推荐
    健 康 咨 询
    时 尚 咨 询
    巧巧读书宗旨
    相关专题
    讨论组问题推荐
    站内各频道最新更新文档
    站内最新制作专题
    热门关键字导读
    Photoshop教 程照片处理 照片制作 PS快捷键 抠图
    计 算 机 故 障XP系统修复
    艺 术 与 设 计设计 流媒体 设计欣赏 边框
    计 算 机 安 全ARP
    站内频道文章精选
    巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章