论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS编程教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

五子棋

文章类别:Flash AS编程 | 发表日期:2008-10-6 18:13:21


 

重新做了个(每个格子多帧的方法),测试了很久,好像没什么bug了
可以判断行列连续和斜线连续。
可惜我不会AI,不能做成和电脑对战。。
格子是做成MC的:1帧空白(值为0),2帧白子(值为1),3帧黑子(值为-1)
判断是否连续时用的是加法。。(5个格子的值相加,取绝对值,如果等于5,表示有连续)
我想这样效率高些,代码也可简洁些  

var sm=20;//棋盘格子的行列数
var width=400;//棋盘长宽
var width2=width/sm;//格子长宽
var depth=10;
var kk=true;//上白子还是黑子。。
var mydata=[];//棋盘整体状况记录:0表示空,1表示白子,-1表示黑子
bbb._visible=false;//bbb就是那个“replay”按钮,最后临时加上的
bbb.onRelease=function(){
cls_dot();
win="";//“win”就是文本框显示的信息
this._visible=false;
}
for (var i=0;i<sm;i++){//构建i行j列的棋盘
mydata[i]=[];
for (var j=0;j<sm;j++){
mydata[i][j]=0;
var a=this.attachMovie("dot","dot"+i+"_"+j,depth++);
a.gotoAndStop(1);
a.i=i;
a.j=j;
a._width=a._height=width2;
a._x=j*width2;
a._y=i*width2;
a.onPress=function(){
if (this._currentframe==1 and !bbb._visible){//格子停留在第一帧,表示没有棋子
if (kk){
this.gotoAndStop(2);//停到2帧(白子)
mydata[this.i][this.j]=1;
//检测
var jc=is_ok(this.i,this.j);
if (jc!="") {
win=jc+"\n白子胜";
bbb._visible=true;
}
}else{
this.gotoAndStop(3);//停到3帧(黑子)
mydata[this.i][this.j]=-1;
//检测
var jc=is_ok(this.i,this.j);
if (jc!="") {
win=jc+"\n黑子胜";
bbb._visible=true;
}
}
//
trace("-----------目前局势------------------");
for (var bb=0;bb<sm;bb++)trace(mydata[bb]);
trace("-------------END---------------------");
kk=!kk;
} }
}
}
//-------------------------下面这段写得比较繁琐---------------------------------------------------

//判断有无连续五子。。
function is_ok(this_i,this_j){
var is_ok="";
//行检测范围
var sta_i=this_i-4;
if (sta_i<0) sta_i=0;
var end_i=this_i+4;
if (end_i>sm-1) end_i=sm-1;
//列检测范围
var sta_j=this_j-4;
if (sta_j<0) sta_j=0;
var end_j=this_j+4;
if (end_j>sm-1) end_j=sm-1;
//检测行连续
for (var j=sta_j;j<=this_j;j++){
if(Math.abs(mydata[this_i][j]+mydata[this_i][j+1]+mydata[this_i][j+2]+mydata[this_i][j+3]+mydata[this_i][j+4])==5){
is_ok="行连续";
break;
}
}
//检测列连续
for (var i=sta_i;i<=this_i;i++){
if(Math.abs(mydata[i][this_j]+mydata[i+1][this_j]+mydata[i+2][this_j]+mydata[i+3][this_j]+mydata[i+4][this_j])==5){
is_ok="列连续";
break;
}
}
//检测斜"\"连续
for (var i=sta_i,j=sta_j;i<=this_i;i++){
if(Math.abs(mydata[i][j]+mydata[i+1][j+1]+mydata[i+2][j+2]+mydata[i+3][j+3]+mydata[i+4][j+4])==5){
is_ok="斜“\\”连续";
break;
}
j++;
}
//检测斜"/"连续
for (var i=sta_i,j=0;i<=this_i;i++){
if(Math.abs(mydata[i][end_j-j]+mydata[i+1][end_j-j-1]+mydata[i+2][end_j-j-2]+mydata[i+3][end_j-j-3]+mydata[i+4][end_j-j-4])==5){
is_ok="斜“/”连续";
break;
}
j++;
}
//得出结果
return is_ok;
}
//——————————————————
//清除所有棋子
function cls_dot(){
for(var i=0;i<sm;i++){
for(var j=0;j<sm;j++){
this["dot"+i+"_"+j].gotoAndStop(1);
mydata[i][j]=0;
}
}
}
 
点这下载源文件
/upimg/soft/3/1_060705110654.fla
视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058