呵呵,今天下午写的一个五子棋,算法不好,是心血来潮想用简单的数组来比较价值,不过速度比直接算价值点要快,不过很笨,也没优化过,呵呵,看看喜欢玩算法的朋友有什么好的提议。
/Upload/2004_Pack/five2.swf
//画棋盘 function drawchessboard(){ _root.createEmptyMovieClip("chessboard",1); with (chessboard) { lineStyle(2); beginFill(0xcc6600,100); moveTo(10,10); lineTo(10,390); lineTo(390,390); lineTo(390,10); lineTo(10,10); endfill(); lineStyle(1,0x663300); for(i=1;i<=18;i++){ k=i*20+10; moveTo(10,k); lineTo(390,k); moveTo(k,10); lineTo(k,390); } } chessboard.onRollOver=function(){ }; } //--初始化 function data_initialize(){ //-CHESS _root.createEmptyMovieClip("chess",2); swp=new Array(); mannum=100; maxx=0; maxy=0; mathok=1; vmap=["11111","01111","11110","10111","11011","11101","01110","11010","01011","00111","11100","01101","10110","00110","01100","00100","01000","00010","0100","00000"]; wmap=["22222","02222","22220","20222","22022","22202","02220","22020","02022","00222","22200","02202","20220","00220","02200","00200","02000","00020","0200","00000"]; pmap=[0,0,4,1,2,3,0,2,2,1,3,3,1,1,3,1,2,2,2,2]; cmap=new Array(); for (i=1;i<19;i++){ cmap[i]=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; } } //--弹出提示 function popwin(msgs){ _root.createEmptyMovieClip("popwindows",1000); with (popwindows) { lineStyle(2,0xffffff,50); beginFill(0xcccccc,50); moveTo(0,0); lineTo(200,0); lineTo(200,100); lineTo(0,100); lineTo(0,0); endfill(); } popwindows.createTextField("popmsg",100,40,20,180,40); popwindows.popmsg.text=msgs; tf=new TextFormat(); tf.size=30; tf.bold=true; tf.color="0xff0000"; popwindows.popmsg.setTextFormat(tf); popwindows._x=100; popwindows._y=100; } //--估算人的落点 function mathp(){ tempk=100; io=1; jo=0; for(j=1;j<=18;j++){ strline=""; for(i=1;i<=18;i++){ strline=strline+cmap[i][j].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(vmap[k]); if(l>=0 and k<tempk){ l=l+pmap[k]; tempk=k; _root.tempx=1+l*io; _root.tempy=j+l*jo; }; }; }; io=0; jo=1; for(i=1;i<=18;i++){ strline=""; for(j=1;j<=18;j++){ strline=strline+cmap[i][j].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(vmap[k]); if(l>=0 and k<tempk){ l=l+pmap[k]; tempk=k; _root.tempx=i+l*io; _root.tempy=1+l*jo; }; }; }; io=1; jo=1; for(i=1;i<=14;i++){ strline=""; for(j=1;j<=19-i;j++){ strline=strline+cmap[i+j-1][j].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(vmap[k]); if(l>=0 and k<tempk){ l=l+pmap[k]; tempk=k; _root.tempx=i+l*io; _root.tempy=1+l*jo; }; }; }; io=1; jo=1; for(j=2;j<=14;j++){ strline=""; for(i=1;i<=19-j;i++){ strline=strline+cmap[i][i+j-1].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(vmap[k]); if(l>=0 and k<tempk){ l=l+pmap[k]; tempk=k; _root.tempx=1+l*io; _root.tempy=j+l*jo; }; }; }; io=-1; jo=1; for(i=5;i<=18;i++){ strline=""; for(j=1;j<=i;j++){ strline=strline+cmap[i-j+1][j].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(vmap[k]); if(l>=0 and k<tempk){ l=l+pmap[k]; tempk=k; _root.tempx=i+l*io; _root.tempy=1+l*jo; }; }; }; io=-1; jo=1; for(j=2;j<=14;j++){ strline=""; for(i=1;i<=19-j;i++){ strline=strline+cmap[19-i][j+i-1].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(vmap[k]); if(l>=0 and k<tempk){ l=l+pmap[k]; tempk=k; _root.tempx=18+l*io; _root.tempy=j+l*jo; }; }; }; _root.tempv=tempk; } //--估算电脑的落点 function mathc(){ tempk=100; io=1; jo=0; for(j=1;j<=18;j++){ strline=""; for(i=1;i<=18;i++){ strline=strline+cmap[i][j].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(wmap[k]); if(l>=0 and k<=tempk){ l=l+pmap[k]; tempk=k; _root.tempx=1+l*io; _root.tempy=j+l*jo; }; }; }; io=0; jo=1; for(i=1;i<=18;i++){ strline=""; for(j=1;j<=18;j++){ strline=strline+cmap[i][j].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(wmap[k]); if(l>=0 and k<=tempk){ l=l+pmap[k]; tempk=k; _root.tempx=i+l*io; _root.tempy=1+l*jo; }; }; }; io=1; jo=1; for(i=1;i<=14;i++){ strline=""; for(j=1;j<=19-i;j++){ strline=strline+cmap[i+j-1][j].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(wmap[k]); if(l>=0 and k<=tempk){ l=l+pmap[k]; tempk=k; _root.tempx=i+l*io; _root.tempy=1+l*jo; }; }; }; io=1; jo=1; for(j=2;j<=14;j++){ strline=""; for(i=1;i<=19-j;i++){ strline=strline+cmap[i][i+j-1].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(wmap[k]); if(l>=0 and k<=tempk){ l=l+pmap[k]; tempk=k; _root.tempx=1+l*io; _root.tempy=j+l*jo; }; }; }; io=-1; jo=1; for(i=5;i<=18;i++){ strline=""; for(j=1;j<=i;j++){ strline=strline+cmap[i-j+1][j].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(wmap[k]); if(l>=0 and k<=tempk){ l=l+pmap[k]; tempk=k; _root.tempx=i+l*io; _root.tempy=1+l*jo; }; }; }; io=-1; jo=1; for(j=2;j<=14;j++){ strline=""; for(i=1;i<=19-j;i++){ strline=strline+cmap[19-i][j+i-1].toString(10); }; for(k=0;k<20;k++){ l=strline.indexOf(wmap[k]); if(l>=0 and k<=tempk){ l=l+pmap[k]; tempk=k; _root.tempx=18+l*io; _root.tempy=j+l*jo; }; }; }; _root.tempv=tempk; } //draw chessman function drawman(manx,many,who){ chess.createEmptyMovieClip("newman",mannum); mannum++; with (chess.newman ) { r=10; lineStyle(1,0x000000,20); moveTo(r+manx,many); drawWay="radial"; if (who==1){ colorRange = [0xffffff, 0x88ccff]; }else{ colorRange = [0xffffff, 0x000000]; }; alphaRange = [100,100]; ra = [0, 255]; colorChart = {matrixType:"box",x:(manx-(r)), y:(many-(r)), w:3*r, h:3*r, r:(45/180)*Math.PI}; beginGradientFill(drawway, colorRange, alphaRange, ra, colorChart); for(i=1;i<=36;i++){ radius=i*10*math.PI/180; lineto(r*math.cos(radius)+manx, r*math.sin(radius)+many); }; endFill(); } } //放子函数 function placechess(Hp,Vp,Pcol){ if(cmap[Hp][Vp]==0){ cmap[Hp][Vp]=Pcol; px=Hp*20+10; py=Vp*20+10; drawman(px,py,Pcol); _root.ppsucc=1; }; } //player turn function playerturn(Pcol){ php=int(_xmouse / 20); pvp=int(_ymouse / 20); _root.ppsucc=0; if (php>0 && php<19 && pvp>0 && pvp<19) { if(mathok==1) {mathok=1} else {mathok=1}; Pcol=mathok; placechess(php,pvp,Pcol); } if(_root.ppsucc==1){ mathp(); cu_k=_root.tempk;cu_x=_root.tempx;cu_y=_root.tempy;cu_who=1; if (cu_k==0){ popwin("你赢啦!"); }else{ mathc(); if (_root.tempk<cu_k){ cu_k=_root.tempk;cu_x=_root.tempx;cu_y=_root.tempy;cu_who=2; } placechess(cu_x,cu_y,2); if(cu_k<=5 and cu_who==2){ popwin("你输啦!"); } } } }
//鼠标检测 _root.onMouseDown = function(){ if(cu_k==0 || (cu_k<=5 and cu_who==2)){ cu_k=1; cu_who=0; popwindows.removeMovieClip(); data_initialize(); }else{ playerturn(1); } } //初始化,开始 drawchessboard(); data_initialize();
|
|