下面是对应的SIT部分的Java代码:
if(cmd.equals(this.cmd_SIT)) {
if(param != null) {
param = param.trim();
if( param.indexOf(" ") != -1) {
String desk_name = param.substring(0, param.indexOf(" "));
param = param.substring(param.indexOf(" "));
param = param.trim();
String chessman_status = param.substring(0,param.indexOf(" "));
String player_name = param.substring(param.indexOf(" "));
player_name = player_name.trim();
chessman_status = chessman_status.trim();
user.deskname = desk_name;
user.place = chessman_status;
if (chessman_status.equals("stand_up")) {
user.deskname = null;
user.place = null;
user.play_status = null;
}
// 由于是广播,所以自己也会收到一个坐下的命令,所以自己就不发给自己了
user.manager.notifyAll(packMsg(this.m_SIT, desk_name+":" + chessman_status + ":" + player_name,"" ));
}
}
}
服务器发一条信息,是如何收到,然后如何动作的呢?请看下面的部分Flash代码:
function onXML_Receive(x) {
if (x == null) {
return;
}
var e = x.firstChild;
if (e == null) {
return;
} else if (e.nodeName == "SIT") {
trace("----sit----");
_root.sit_down(e.attributes.Value);
}
……
这里的onXML_Receive程序就是前面说到的接收信息的主处理程序。很明显,这个在收到<SIT VALUE="6:stand_up:dongua" />串后,就会把它分解成一个结构型的内容,节点名就叫:SIT,其属性值e.attributes.Value等于"6:stand_up:dongua",请看这里调用的坐下的子程序:
function sit_down(str) {
var place = 0, pre, now;
var player = new Array(3);
//把这个字符串分成三个部分
player = str.split(":");
//如果是自己收到自己坐下的信息就不做任何处理
if (player[2] != _root.nickname) {
set_sit(player);
// 如果自己坐在他的对面就开始游戏,定为左边先走
if (player[1] == "left" && _root.player_right[player[0]] == _root.nickname) {
// 表示自己坐在右边,拿蓝棋,后走
_root.i_run = false;
_root.my_logo = _root.Second_play;
_root.your_logo = _root.First_play;
_root.rival = player[2];
_root.now_play_table = Number(player[0]);
//进入开始下棋的阶段
_root.init_play();
_root.gotoAndPlay("begin_play");
}
if (player[1] == "right" && _root.player_left[player[0]] == _root.nickname) {
// 表示自己坐在左边,拿红棋,先走
_root.i_run = true;
_root.my_logo = _root.First_play;
_root.your_logo = _root.Second_play;
_root.rival = player[2];
_root.now_play_table = Number(player[0]);
//进入开始下棋的阶段
_root.init_play();
_root.gotoAndPlay("begin_play");
}
}
}
function set_sit(arr) {
if (arr[0] != "null") {
var place = Number(arr[0]);
var obj_place = place-_root.objTableDisplay.table_begin+1;
//如果起立就清空对应棋盘对应位置的名字
if (arr[1] == "stand_up") {
if (_root.player_left[place] == arr[2]) {
_root.objTableDisplay["Table_"+obj_place].player_left = "";
_root.player_left[place] = "";
} else {
_root.objTableDisplay["Table_"+obj_place].player_right = "";
_root.player_right[place] = "";
}
}
//如果坐左边就修改对应棋盘左边的内容
if (arr[1] == "left") {
_root.objTableDisplay["Table_"+obj_place].player_left = arr[2];
_root.player_left[place] = arr[2];
}
//如果坐右边就修改对应棋盘右边的内容
if (arr[1] == "right") {
_root.objTableDisplay["Table_"+obj_place].player_right = arr[2];
_root.player_right[place] = arr[2];
}
}
}
你是不是有点看晕了?没有办法,编程序就是这样,一定要弄清楚哪些是Java代码,哪些是Flash代码,这两种代码看上去很相像。或者你会问为什么要一会用Java代码一会用Flash代码,笔者认为只有这样讲读者才会弄明白游戏到底是如何运行的。如果分开讲的话,可能会更加糊涂!好了,言归正传,下面就来说明上面的代码吧。
上面的代码是游戏坐下的程序,sit_down程序的核心分成下面几个部分:
_root.init_play();
_root.gotoAndPlay("begin_play");