五子棋
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-12
点击浏览该文件 点击浏览该文件 重新做了个(每个格子多帧的方法),测试了很久,好像没什么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 for (var j=0;j 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 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 mydata[i][j]=0; } } } 关键词: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 惯性运动 弹簧精确分析下一篇: Flash实用编程四---下雪动画的制作
关于五子棋的所有评论