C,C++五子棋开源代码.doc
上传人:qw****27 上传时间:2024-09-11 格式:DOC 页数:22 大小:120KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

C,C++五子棋开源代码.doc

C,C++五子棋开源代码.doc

预览

免费试读已结束,剩余 12 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C语言:/*turboc2.0下编译通过*/#include<graphics.h>#include<stdlib.h>#include<stdio.h>#include<conio.h>#defineN15#defineB7#defineSTOP-10000#defineOK1#defineNO0#defineUP328#defineDOWN336#defineLEFT331#defineRIGHT333/*定义了两个数,n为棋盘的大小。b为背景颜色的数值*/inta[N+1][N+1];intzx,zy;intwrite=1,biaoji=0;structzn{longsum;inty;intx;}w[N+1][N+1],max,max1;voidcbar(inti,intx,inty,intr);voidmap(inta[][]);intgetkey();intkey();voidzuobiao(intx,inty,inti);inttu(inta[][],intwrite);intwtu(inta[][],intwrite);intzhineng(inta[][]);intzh5(inty,intx,inta[][]);longzzh5(intb[][],inti);main(){inti,j;intgdriver=DETECT;intgmode;initgraph(&gdriver,&gmode,"");zx=(N+1)/2;zy=(N+1)/2;for(i=1;i<=N;i++)for(j=1;j<=N;j++)a[i][j]=0;map(a);i=1;while(i){intk,n;k=wtu(a,write);if(k==STOP)gotoend;map(a);n=zhineng(a);if(n==STOP)gotoend;map(a);}end:;}/*实现对局的程序,计算全部N*N个格中,最应该填的格子*/intzhineng(inta[N+1][N+1]){inti,j;intk;max.sum=-1;for(i=0;i<=N;i++)for(j=0;j<+N;j++){w[i][j].sum=0;w[i][j].x=i;w[i][j].y=j;}for(i=1;i<=N-4;i++)for(j=1;j<=N-4;j++){k=zh5(i,j,a);if(k==STOP)return(STOP);}for(i=1;i<=N;i++)for(j=1;j<=N;j++){if(max.sum<w[i][j].sum){max.sum=w[i][j].sum;max.y=i;max.x=j;}elseif(max.sum==w[i][j].sum){if(((max.y-zy)*(max.y-zy)+(max.x-zx)*(max.x-zx))>((i-zy)*(i-zy)+(j-zx)*(j-zx)))max.sum=w[i][j].sum;max.y=i;max.x=j;}}if(a[max.y][max.x]==0){a[max.y][max.x]=-1;zy=max.y;zx=max.x;}}/*转换成5*5的数组,计算出在二十五个格子中,最应该填的格*/intzh5(inty,intx,inta[N+1][N+1]){inti,j;intb[6][6];longc[13];longd[6][6];longtemp;for(i=y;i<=y+4;i++)for(j=x;j<=x+4;j++)b[i+1-y][j+1-x]=a[i][j];c[1]=b[1][1]+b[1][2]+b[1][3]+b[1][4]+b[1][5];c[2]=b[2][1]+b[2][2]+b[2][3]+b[2][4]+b[2][5];c[3]=b[3][1]+b[3][2]+b[3][3]+b[3][4]+b[3][5];c[4]=b[4][1]+b[4][2]+b[4][3]+b[4][4]+b[4][5];c[5]=b[5][1]+b[5][2]+b[5][3]+b[5][4]+b[5][5];c[6]=b[1][1]+b[2][1]+b[3