//显示棋子
_root.display="Xpos:"+(x+1);
temp=chr(y+65);
_root.display1="Ypos:"+temp;
_root.playnow="player";
//判断是否获胜
xx=x;
yy=y;
for(k=0;k<4;k++){
if(_root.a_result<>6){
_root.a_result=0;
x=xx;
y=yy;
while((_root.table[y][x]==2)and(y+_root.dir[k][1]<16)and(x+_root.dir[k][0]>=-1)and(x+_root.dir[k][0]<16)and(y+_root.dir[k][1]>=-1)){
x=x+_root.dir[k][0];
y=y+_root.dir[k][1];
//"_root.table["+y+"]["+x+"]="+_root.table[y][x]
_root.a_result=_root.a_result+1;
}
x=xx;
y=yy;
while((_root.table[y][x]==2)and(y+_root.dir[k+4][1]<16)and(x+_root.dir[k+4][0]>=-1)and(x+_root.dir[k+4][0]<16)and(y+_root.dir[k+4][1]>=-1)){
x=x+_root.dir[k+4][0];
y=y+_root.dir[k+4][1];
_root.a_result=_root.a_result+1;
}
if(_root.a_result==6){
_root.playnow="nobody";
}
}
}
if(_root.playnow=="nobody"){
_root.gameoverman.gotoAndPlay(2);
}
}
C:新建一个Movieclip组件,并命名为bb,此组件用来计算电脑如何走棋,进入组件编辑状态后,在图层layer1绘制一个有填充色的矩形,然后在第5桢插入一个关键桢,在同样位置绘制一个大小相同填充色不同的矩形。新建一个图层,在矩形里输入提示文字:电脑走棋,然后再新建一个图层Action,在第一桢添加AS:stop();,在第8桢插入一个关键桢,在此桢添加如下AS:
if(_root.playnow=="computer"){
//初始化棋盘
_root.func.makelist("white");
_root.func.makelist("black");
//调用自定义函数
max_computer=0;
max_player=0;
k=0;
//定义三变量
for(j=0;j<15;j++){
for(i=0;i<15;i++){
for(k=0;k<4;k++){
if(_root.computer[j*15+i][k]==max_computer){
rndnum=random(100)+1;
if(rndnum>50){
max_computer=_root.computer[j*15+i][k];
xc=i;
yc=j;
}
}
if(_root.computer[j*15+i][k]>max_computer){
max_computer=_root.computer[j*15+i][k];
xc=i;
yc=j;
}
if(_root.player[j*15+i][k]>max_player){
max_player=_root.player[j*15+i][k];
xp=i;
yp=j;
}
}
}
}
if(max_computer>max_player){
x=xc;
y=yc;
}else{
x=xp;
y=yp;
}
//绘制棋子
num=y*15+x;
removeMovieClip(_root.baddnum);
duplicateMovieClip(_root.white,"white"addnum,num+300);
setProperty(_root.whiteaddnum,_x,34.7+x*20);
setProperty(_root.whiteaddnum,_y,34.7+y*20);
_root.table[y][x]=2;
//显示棋子
_root.display="Xpos:"+(x+1);
temp=chr(y+65);
_root.display1="Ypos:"+temp;
_root.playnow="player";
//判断是否获胜
xx=x;
yy=y;
for(k=0;k<4;k++){
if(_root.a_result<>6){
_root.a_result=0;
x=xx;
y=yy;
while((_root.table[y][x]==2)and(y+_root.dir[k][1]<16)and(x+_root.dir[k][0]>=-1)and(x+_root.dir[k][0]<16)and(y+_root.dir[k][1]>=-1)){
x=x+_root.dir[k][0];
y=y+_root.dir[k][1];
//"_root.table["+y+"]["+x+"]="+_root.table[y][x]
_root.a_result=_root.a_result+1;
}
x=xx;
y=yy;
while((_root.table[y][x]==2)and(y+_root.dir[k+4][1]<16)and(x+_root.dir[k+4][0]>=-1)and(x+_root.dir[k+4][0]<16)and(y+_root.dir[k+4][1]>=-1)){
x=x+_root.dir[k+4][0];
y=y+_root.dir[k+4][1];
_root.a_result=_root.a_result+1;
}
if(_root.a_result==6){
_root.playnow="nobody";
}
}
}
//游戏结束
if(_root.playnow=="nobody"){
_root.gameoverman.gotoAndPlay(2);
}
}
最后的时间线如图6所示:
图6
D:再新建一个movieclip组件,命名为buttonclip,此组件用来控制双方的落子,进入组件编辑状态后,将前面做好的隐形按钮拖放到编辑区中,然后给第一桢添加AS:stop();.
E:最后再制作一个movieclip,命名为gameover,此组件用来判断游戏是否结束,也就是判断是缶有一方已经连好了五颗棋子。进入组件编辑状态后,连续建立四个图层,分别为layer1,layer2,layer3和action,在layer1,layer2,layer3的第一桢插入空白,然后在第2桢绘制电脑获胜的提示信息,并将Replay按钮拖到编辑区中,给按钮添加As:
on(release){
gotoAndPlay("endit");
}
如图7所示:
图7
在layer1,layer2,layer3的第三桢按照同样的方法设置您胜利的提示信息,如图8所示:
图8
然后回到图层action,接下来就要添加具体的控制Action了,在此图层的前三个关键桢分别添加as:stop();,在第四关键桢添加如下AS:
for(i=0;i<=225;i++){
removeMovieClip(_root.blackaddi);
removeMovieClip(_root.whiteaddi);
removeMovieClip(_root.baddi);
}
//清除棋盘上的棋子
_root.gotoAndPlay("run");
//跳转到游戏的开始
最后的时间线如图9所示:
图9
布置主场景:
游戏的主要工作完成后,接下来需要布置主场景了。
首先使用绘图工具绘制出游戏中的棋盘,棋盘大小为15*15的矩阵,然后给棋盘标上横向和纵向的标识,如图10所示:
图10
分别将组件white,black,buttonclip,blk,bb和gameover拖到舞台的合适位置,如图11所示:
图11
组件white的实例名为:black
组件black的实例名为:white
组件buttonclip的实例名为:b
组件blk的实例名为:func
组件bb的实例名为:computerrun
组件gameover的实例名为:gameoverman
然后在棋盘上绘制两个Dynamictext动态文本框,用来显示上一步落子的位置,分别设置变量名为display和display1。
最后,给第一关键祯添加as:
stop();
urls="边城浪子-闪客帝国";
num=0;
table=newArray();
computer=newArray();
player=newArray();
a_result=0;
//Tablearray
for(i=0;i<15;i++){
table[i]=newArray(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
}
//Computerandplayertablelist
for(j=0;j<15;j++){
for(i=0;i<15;i++){
computer[j*15+i]=newArray(0,0,0,0);
player[j*15+i]=newArray(0,0,0,0);
}
}
//Makebuttons
count=0;
for(j=0;j<15;j++){
for(i=0;i<15;i++){
duplicateMovieClip(_root.b,"b"addcount,count+30);
setProperty("b"addcount,_x,34.7+i*20);
setProperty("b"addcount,_y,34.7+j*20);
count++;
}
}
//Eightdirections
vardir=newArray();
dir[0]=newArray(1,0);
dir[1]=newArray(1,1);
dir[2]=newArray(0,1);
dir[3]=newArray(-1,1);
dir[4]=newArray(-1,0);
dir[5]=newArray(-1,-1);
dir[6]=newArray(0,-1);
dir[7]=newArray(1,-1);
playnow="player";
removeMovieClip(_root.b112);
duplicateMovieClip(_root.white,"white112",142);
setProperty("white112",_x,174.7);
setProperty("white112",_y,174.7);
//Thefirstblackpoint
table[7][7]=2;
到此为止,五子连珠这个游戏就制作完成了,本游戏属于较高级的游戏制作,需要有一定的Action编程基础,不过如果您对Action不太了解,相信学完本实例后,可以在一定程度上提高您的Action水平。