c编写五子棋游戏代码_第1页
c编写五子棋游戏代码_第2页
c编写五子棋游戏代码_第3页
c编写五子棋游戏代码_第4页
c编写五子棋游戏代码_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#define N 15#define B 7#define STOP -10000#define OK 1#define NO 0#defineUP328#define DOWN 336#define LEFT 331#define RIGHT 333/*定义了两个数,n为棋盘的大小。b为背景颜色的数值*/ intaN+lN+l;int zx,zy;int write=l,biaoji=0;struct znlong sum;int y;int x;wN+lN+l,max,maxi;void cbar(int i,int x,int y,int r);void map(int a);int

2、getkey();int key();void zuobiao(int x,int y,int i);int tu(int a,int write);int wtufint a,int write);int zhinengfint a);int zh5(int y,int x,int a);long zzh5(int b,int i);main()int ij;int gdriver=DETECT;int gmode;initgraphf&gdriveG&gmode,"");zx=(N+l)/2;zy=(N+l)/2;for(i=l;i<=N;i+)f

3、or(j=l;j<=N;j+)ai0=O;map(a);i=l;while(i)int k,n;k=wtu(a,write);if(k=STOP) goto end;map(a);n=zhineng(a);if(n=STOP) goto end;map(a);)end:/)/*实现对局的程序,计算全部N*N个格中,最应该填的格子*/int zhineng(int aN+lN+l)int i,j;int k;max.sum=-l;for(i=0;i<=N;i+)for(j=0;j<+N;j+)wij.sum=O;wij-x=i;wiU.y=j;)for(i=l;i<=N-

4、4;i+)for(j=l;j<=N-4;j+)k=zh5(i,j,a);if(k=STOP) return (STOP);)for(i=l;i<=N;i+)for(j=l;j<=N;j+)if(max.sum<wij.sum)max.sum=wij.sum;max.y=i;max.x=j;)else if(max.sum=wij.sum)if(max.y-zy)*(max.y-zy)+(max.x-zx)*(max.x-zx)>(i-zy)*(i-zy)+(j-zx)*(j-zx)max.sum=wij.sum;max.y=i;max.x=j;)if(amax.y

5、max.x=O)amax.ymax.x=-l;zy=max.y;zx=max.x;)/*转换成5*5的数组,计算出在二十五个格子中,最应该填的格*/int zh5(int y,int x,int aN+lN+l)int ij;int b66;longc13;longd66;long temp;for(i=y;i<=y+4;i+) for(j=x;j<=x+4;j+)bi+l-yj+l-x=aij;cl=bll+bl2+bl3+bl4+bl5;c2=b2l+b22+b23+b24+b25;c3=b3l+b32+b33+b34+b35;c4=b4l+b42+b43+b44+b45;c5

6、=b5l+b52+b53+b54+b55;c6=bll+b2l+b3l+b4l+b5l;c7=bl2+b22+b32+b42+b52;c8=bl3+b23+b33+b43+b53;c9=bl4+b24+b34+b44+b54;c10=bl5+b25+b35+b45+b55;cll=bll+b22+b33+b44+b55;c12=bl5+b24+b33+b42+b5l;for(i=l;i<=12;i+)switch(ci)case 5:biaoji=l;return(STOP);case -5:biaoji=-l;return(STOP);case -4:ci=100000;break;c

7、ase 4:ci=100000;break;case -3:ci=150;break;case 3:ci=150;break;case -2:ci=120;break;case 2:ci=100;break;case -l:ci=l;break;case l:ci=l;break;default: ci=O;)for(i=l;i<=12;i+)if(ci=150)ci+=zzh5(b,i);)for(i=l;i<=5;i+)for(j=l;j<=5;j+)diU=O;for(i=l;i<=5;i+)for(j=l;j<=5;j+)if(i=j)diU+=cH;if

8、(i+j)=6) dij+=c12;diU+=ci+cj+5;)for(i=l;i<=5;i+)for(j=l;j<=5;j+)if(biD!=O)diU=-2;)maxl.sum=-l;maxl.y=O;maxl.x=O;for(i=l;i<=5;i+)for(j=l;j<=5;j+)if(maxl.sum<dij)maxl.sum=dij;maxl.y=i;maxl.x=j;wi+y-lj+x-l.sum+=maxl.sum;else if(maxl.sum=dij)(if(i+y-l-zy)*(i+y-l-zy)+(j+x-l-zx)*(j+x-l-zx)&

9、gt;(maxl.y+y-l-zy)*(maxl.y+y-l- zy)+(maxl.x+x-l-zx)*(maxl.x+x-l-zx)(maxl.sum=dij;maxl.y=i;maxl.x=j;long zzh5(int b66,int n)int iJA/lm;switch(n)case l:i=bll;j=bl2;k=bl3;l=bl4;m=bl5;break;case 2:i=b2l;j=b22;k=b23;l=b24;m=b25;break;9/18case 3:i=b3l;j=b32;k=b33;l=b34;m=b35;break;case4:i=b l;j=b42;k =b43

10、;l =b44;m=b 5;break;case5:i=b5l;j=b52;k=b53;l=b54;m=b55;break;case6:i=bll;j=b2l;k=b3l;l=b4l;m=b5l;break;case7:i=bl2;j=b22;k=b32;l=b42;m=b52;break;case8:i=bl3;j=b23;k=b33;l=b43;m=b53;break;case9:i=bl4;j=b24;k=b34;l=b44;m=b54;break;case10:i=bl5;j=b25;k=b35;l=b45;m=b55;break;casell:i=bll;j=b22;k=b33;l=

11、b44;m=b55;break;case12:i=bl5;j=b24;k=b33;l=b42;m=b5l;break;if(i=O&&j=l&&k=l&&l=l&&m=O)return (900);if(i=0&&j=-l&&k=-l&&l=-l&&m=0)return(lOOO);if(i=O&&j=O&&k=l&&l=l&&m=l) | |(i=l&&j=l&&k=l&

12、amp;&l=O&&m=O )return(20);if(i=O&&j=O&&k=-l&&l=-l&&m=-l) 11 (i=-l&&j=-l&&k=- l&&l=O&&m=O)return(20);if(i=-l&&j=l&&k=l&&l=l&&m=l) | |(i=l&&j=-l&&k=l&&l=l&&m=l) 1

13、1 (i=l&&j=l&&k=-l&&l=l&&m=l) 11 (i=l&&j=l&&k=l&&l=-l&&m=l) 11 (i=l&&j=l&&k=l&&l=l&&m=-l)return(-60);if(i=l&&j=-l&&k=-l&&l=-l&&m=-l) 11 (i=-l&&j=l&&k=-l&

14、&l=- l&&m=-l) 11 (i=-l&&j=l&&k=-l&&l=-l&&m=-l) | |(i=-l&&j=-l&&k=- l&&l=l&&m=-l) 11 (i=-l&&j=-l&&k=-l&&l=-l&&m=l)return(-60);/*循环执行坐标的选择,直到按回车,空格或ESC键*/int wtufint aN+lN+l,int write)int i=l;ma

15、p(a);zuobiao(zx,zy,l);while(i)int k;k=tu(a,write);if(k=OK) i=0;if(k=STOP) return (STOP);)/*从键盘获得输入的值*/int getkey()int key,Io,hi;key=bioskey(0);Io=key&0x00ff;hi=(key&0xff00)»8;return(lo=0) ? hi+256:lo);)/*对获得的值进行判断*/*对应的码值分别如下*/*上:328 下:336 左:331 右:/*回车:13 ESC 键:27 */int key()int k;k=get

16、key();switch(k)case 27: return (STOP);case 13:case 'return (OK);case 328: return (UP);case 336: return (DOWN);case 331: return (LEFT);333 */case 333: return (RIGHT);default: return (NO);/*用来显示坐标的位置*/void zuobiao(int xjnt y,int i)int r;if(i!=0)setcolor(GREEN);for(r=l;r<=5;r+)circle(75+25*x,25+

17、25*y,r);)elseif(azyzx=l)setcolor(8);for(r=l;r<=5;r+)circle(75+25*x,25+25*y,r);else if(azyzx=-l)setcolor(WHITE);for(r=l;r<=5;r+)circle(75+25*x,25+25*y,r);)elsesetcolor(B);for(r=l;r<=5;r+)circle(75+25*x,25+25*y,r);setcolor(RED); line(75+25*zx-5,25+25*zy,75+25*x+5,25+25*zy);line(75+25*zx,25+25

18、*zy-5,75+25*zx,25+25*zy+5);/*从键盘获得的值进行判断,反映在显示的图上*/int tu(int aN+lN+l,int write)int k;re:k=key();14 / 18if(k=OK)if(azyzx=O)azyzx=write;)elsegoto re;)if(k=STOP) return(STOP);if(k=NO) goto re;if(k=UP)int ij;if(zy=l) j=zy;else j=zy-l;zuobiao(zx,zy,0);zuobiao(zx,j,l);zy司;goto re;15 / 18if(k=DOWN)int ij;if(zy=N) j=zy;else j=zy+l;zuobiao(zx,zy,0);zuobiao(z

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论