呵呵,今天下午写的一个五子棋,算法不好,是心血来潮想用简单的数组来比较价值,不过速度比直接算价值点要快,不过很笨,也没优化过,呵呵,看看喜欢玩算法的朋友有什么好的提议。
/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();