




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*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 zn long 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=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=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 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; c10=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;break; 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+) if(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=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); else if(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); else setcolor(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; else goto 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电气设备维修维护安全操作规程
- 游船运营管理规范与安全方案
- 案例分析:批注式阅读教学模式
- 企业年度安全生产培训考试题库
- 2025年河北衡水武邑县中医医院公开招聘31人备考考试题库附答案解析
- 2025年甘肃省天水市秦州区铭睿粮食储备有限责任公司招聘备考考试题库附答案解析
- 2025南平市建阳区旭辉实验学校初中部招聘教师考试参考题库及答案解析
- 中小学课程改革与教学创新策略
- 2025年湖南省地质院直属事业单位高层次人才招聘59人备考考试题库附答案解析
- 三年级语文拼音认读综合练习题
- 服务类合同补充协议
- 学生休学申请表(新)
- 350吨履带吊地基承载力验算
- 影视艺术导论教材课件汇总完整版ppt全套课件最全教学教程整本书电子教案全书教案课件合集
- TSG-R0005-2022《移动式压力容器安全技术监察规程》(2022版)
- 2020 ACLS-PC-SA课前自我测试试题及答案
- 第1章 税务会计与纳税筹划概述
- GB∕T 41181-2021 坐姿椅
- 傅里叶级数及其应用论文
- DB42∕T 1795-2021 微动勘探技术规程
- 财政部金融企业不良资产批量转让管理办法(财金[2012]6号)
评论
0/150
提交评论