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

上传人:asd****56 文档编号:79328558 上传时间:2023-03-21 格式:DOC 页数:22 大小:120KB
返回 下载 相关 举报
C,C++五子棋开源代码.doc_第1页
第1页 / 共22页
C,C++五子棋开源代码.doc_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《C,C++五子棋开源代码.doc》由会员分享,可在线阅读,更多相关《C,C++五子棋开源代码.doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C语言:/*turboc2.0下编译通过*/i nclude i nclude i nclude i nclude #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,

2、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,);

3、zx=(N+1)/2;zy=(N+1)/2;for(i=1;i=N;i+)for(j=1;j=N;j+)aij=0;map(a);i=1;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+1N+1)int i,j;int k;max.sum=-1;for(i=0;i=N;i+)for(j=0;j+N;j+)wij.sum=0;wij.x=

4、i;wij.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(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

5、 i,j;int b66;long c13;long d66;long temp;for(i=y;i=y+4;i+)for(j=x;j=x+4;j+)bi+1-yj+1-x=aij;c1=b11+b12+b13+b14+b15;c2=b21+b22+b23+b24+b25;c3=b31+b32+b33+b34+b35;c4=b41+b42+b43+b44+b45;c5=b51+b52+b53+b54+b55;c6=b11+b21+b31+b41+b51;c7=b12+b22+b32+b42+b52;c8=b13+b23+b33+b43+b53;c9=b14+b24+b34+b44+b54;c1

6、0=b15+b25+b35+b45+b55;c11=b11+b22+b33+b44+b55;c12=b15+b24+b33+b42+b51;for(i=1;i=12;i+)switch(ci)case 5:biaoji=1;return(STOP);case -5:biaoji=-1;return(STOP);case -4:ci=100000;break;case 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 -1:ci=1;br

7、eak;case 1:ci=1;break;default: ci=0;for(i=1;i=12;i+)if(ci=150)ci+=zzh5(b,i);for(i=1;i=5;i+)for(j=1;j=5;j+)dij=0;for(i=1;i=5;i+)for(j=1;j=5;j+)if(i=j) dij+=c11;if(i+j)=6) dij+=c12;dij+=ci+cj+5;for(i=1;i=5;i+)for(j=1;j=5;j+)if(bij!=0)dij=-2;max1.sum=-1;max1.y=0;max1.x=0;for(i=1;i=5;i+)for(j=1;j=5;j+)i

8、f(max1.sum(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

9、=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=b2

10、2;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=

11、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

12、;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(

13、);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(a

14、zyzx=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);/*

15、从键盘获得的值进行判断,反映在显示的图上*/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)

16、;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)setcol

17、or(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;iN;i+)line(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);C+:(人人对战)

18、#include using namespace std;#include /string.hconst int M=16;/行数const int N=16;/列数void showboard(char boardMN)/ 121 显示每列的列号,列号不够两位在左边补空格 cout ; for(int i=1; i=N; i+) cout (i10? : ) i; cout endl;/ 122 反复显示每一行 for(int i=0; iM; i+)/ 1221 先显示行号 cout (i9? : ) i+1 ;/ 1222 再显示棋盘每一列的棋子 for(int j=0; jN; j+)

19、 cout boardij ; cout endl; inline bool out(int row, int col) return (rowM|colN);struct Size int row; int col;bool place(char boardMN, bool blackwhite)/ 41 准备棋子 const char chess = blackwhite?X:O;/ 42 让玩家选择要下的位置(行列号),无效重来 int row, col; do cout 请 (blackwhite?黑方:白方) row col;/ 421 不在棋盘中无效/ 422 那个位置已经有棋子了

20、也无效 while(out(row,col)|boardrow-1col-1!=.);/ 43 把棋子放在棋盘上玩家选择的位置 boardrow-1col-1 = chess;/ 44 显示棋盘 showboard(board);/ 45 检查是否获胜 Size d8= 0,1,0,-1, -1,1,1,-1, -1,0,1,0, -1,-1,1,1 ; int cnt, r, c;/ 451 反复检查从选定位置出发的8个(4对)方向, for(int i=0; i=5) cout (blackwhite?黑方胜:白方胜) 0)/4、下一颗棋子,如果获胜,游戏就结束 if(place(board, blackwhite) return 0;/5、否则换对方/ 51 把逻辑变量的值反一下 blackwhite = !blackwhite;/6、没有空位了就是和棋,游戏也结束 cout 和棋 endl; return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 休闲娱乐

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁