资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
五子棋 C 源码 /*turboc2.0下编译通过*/#include #include #include #include #define N 15#define B 7#define STOP -10000#define OK 1#define NO 0#define UP 328#define DOWN 336#define LEFT 331#define RIGHT 333/*定义了两个数,n 为棋盘的大小。b 为背景颜色的数值*/int aN+1N+1;int zx,zy;int write=1,biaoji=0;struct znlong sum;int y;int x;wN+1N+1,max,max1;void cbar(int i,int x,int y,int r);void map(int a);int getkey();int key();void zuobiao(int x,int y,int i);int tu(int a,int write);int wtu(int a,int write);int zhineng(int a);int zh5(int y,int x,int a);long zzh5(int b,int i);main()int i,j;int gdriver=DETECT;int gmode;initgraph(&gdriver,&gmode,);zx=(N+1)/2;zy=(N+1)/2;for(i=1;i(i-zy)*(i-zy)+(j-zx)*(j-zx)max.sum=wij.sum;max.y=i;max.x=j;if(amax.ymax.x=0)amax.ymax.x=-1;zy=max.y;zx=max.x;/* 转换成 5*5的数组,计算出在二十五个格子中,最应该填的格 */int zh5(int y,int x,int aN+1N+1)int i,j;int b66;long c13;long d66;long temp;for(i=y;i(max1.y+y-1-zy)*(max1.y+y-1-zy)+(max1.x+x-1-zx)*(max1.x+x-1-zx)max1.sum=dij;max1.y=i;max1.x=j;long zzh5(int b66,int n)int i,j,k,l,m;switch(n)case 1:i=b11;j=b12;k=b13;l=b14;m=b15;break;case 2:i=b21;j=b22;k=b23;l=b24;m=b25;break;case 3:i=b31;j=b32;k=b33;l=b34;m=b35;break;case 4:i=b41;j=b42;k=b43;l=b44;m=b45;break;case 5:i=b51;j=b52;k=b53;l=b54;m=b55;break;case 6:i=b11;j=b21;k=b31;l=b41;m=b51;break;case 7:i=b12;j=b22;k=b32;l=b42;m=b52;break;case 8:i=b13;j=b23;k=b33;l=b43;m=b53;break;case 9:i=b14;j=b24;k=b34;l=b44;m=b54;break;case 10:i=b15;j=b25;k=b35;l=b45;m=b55;break;case 11:i=b11;j=b22;k=b33;l=b44;m=b55;break;case 12:i=b15;j=b24;k=b33;l=b42;m=b51;break;if(i=0&j=1&k=1&l=1&m=0)return (900);if(i=0&j=-1&k=-1&l=-1&m=0)return(1000);if(i=0&j=0&k=1&l=1&m=1)|(i=1&j=1&k=1&l=0&m=0)return(20);if(i=0&j=0&k=-1&l=-1&m=-1)|(i=-1&j=-1&k=-1&l=0&m=0)return(20);if(i=-1&j=1&k=1&l=1&m=1)|(i=1&j=-1&k=1&l=1&m=1)|(i=1&j=1&k=-1&l=1&m=1)|(i=1&j=1&k=1&l=-1&m=1)|(i=1&j=1&k=1&l=1&m=-1)return(-60);if(i=1&j=-1&k=-1&l=-1&m=-1)|(i=-1&j=1&k=-1&l=-1&m=-1)|(i=-1&j=1&k=-1&l=-1&m=-1)|(i=-1&j=-1&k=-1&l=1&m=-1)|(i=-1&j=-1&k=-1&l=-1&m=1)return(-60);/* 循环执行坐标的选择,直到按回车,空格或 ESC键 */int wtu(int aN+1N+1,int write)int i=1;map(a);zuobiao(zx,zy,1);while(i)int k;k=tu(a,write);if(k=OK) i=0;if(k=STOP) return (STOP);/*从键盘获得输入的值*/int getkey()int key,lo,hi;key=bioskey(0);lo=key&0x00ff;hi=(key&0xff00)8;return(lo=0) ? hi+256:lo);/*对获得的值进行判断*/*对应的码值分别如下*/* 上:328 下:336 左: 331 右: 333 */* 回车:13 ESC 键: 27 */int key()int k;k=getkey();switch(k)case 27: return (STOP);case 13:case : return (OK);case 328: return (UP);case 336: return (DOWN);case 331: return (LEFT);case 333: return (RIGHT);default: return (NO);/*用来显示坐标的位置*/void zuobiao(int x,int y,int i)int r;if(i!=0)setcolor(GREEN);for(r=1;r=5;r+)circle(75+25*x,25+25*y,r);elseif(azyzx=1)setcolor(8);for(r=1;r=5;r+)circle(75+25*x,25+25*y,r);else if(azyzx=-1)setcolor(WHITE); for(r=1;r=5;r+)circle(75+25*x,25+25*y,r);elsesetcolor(B);for(r=1;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*zy-5,75+25*zx,25+25*zy+5);/*从键盘获得的值进行判断,反映在显示的图上*/int tu(int aN+1N+1,int write)int k;re:k=key();if(k=OK)if(azyzx=0)azyzx=write;elsegoto re;if(k=STOP) return(STOP);if(k=NO) goto re;if(k=UP)int i,j;if(zy=1) j=zy;else j=zy-1;zuobiao(zx,zy,0);zuobiao(zx,j,1);zy=j;goto re;if(k=DOWN)int i,j;if(zy=N) j=zy;else j=zy+1;zuobiao(zx,zy,0);zuobiao(zx,j,1);zy=j;goto re;if(k=LEFT)int i,j;if(zx=1) i=zx;else i=zx-1;zuobiao(zx,zy,0);zuobiao(i,zy,1);zx=i;goto re;if(k=RIGHT)int i,j;if(zx=N) i=zx;else i=zx+1;zuobiao(zx,zy,0);zuobiao(i,zy,1);zx=i;goto re;/* 根据数组中(存储棋子位置)各位置的数,画实心圆(画出棋子)*/void cbar(int i,int x,int y,int r)if(i!=0)if(i=1)setcolor(8);else if(i=-1)setcolor(WHITE);for(i=1;i=r;i+)circle(x,y,i);/*画出棋盘,和各个棋子*/void map(int aN+1N+1)int i,j;cleardevice();setbkcolor(B);setcolor(RED);for(i=0;iline(100,50+25*i,75+N*25,50+25*i);line(100+25*i,50,100+25*i,25+N*25);for(i=1;i=N;i+)for(j=1;j=N;j+)cbar(aij,75+25*j,25+25*i,10);
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号