




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*功能:连连看*制作人:蒋睿立*时间:2007年8月1日*编译环境: vc+ 6.0*程序语言: c语言*/#include #include #include #include void initialize(); /初始化void near1(int a,int b,int a1,int b1); /算法void print_chess(); /打印棋盘int exit_chess(); /判断是否结束/全局变量char chessman1010; /编译系统初始化每个元素为0void main() int row,line; /row是行号,line是列号 int row2,line2; /row是行号,line是列号 printf(ttt按任意键开始n); fflush(stdin); getch(); initialize(); /初始化棋盘内容 do print_chess(); printf(输入第一个:); fflush(stdin); scanf(%d.%d,&line,&row); printf(输入第二个:); fflush(stdin); scanf(%d.%d,&line2,&row2); if(chessmanlinerow!=chessmanline2row2) printf(两数不相同!n); /两数不同 else if(line=line2&row=row2) printf(错误输入!n); /输入相同的坐标,提示用户错误 else if(line=line2) near1(line,row,line2,row2); /使用函数处理,第一个点一定在第二个点上方 else near1(line2,row2,line,row); /使用函数处理 system(pause); while(exit_chess(); system(pause);printf(nnntt恭喜您,您胜利了!n);printf(ntt制作人:蒋睿立n);printf(nt博客:http:);void initialize() /初始化棋盘 int i,j; /用于循环计数 int a8=0; /记录哪些字符出现次数不是偶数 srand(time(null); for(i=1;i8;i+) /这里只随机前8行,留最后一行不打印 for(j=1;j9;j+) chessmanij=rand()%8+65; /棋盘内容为大写字母a到h if(chessmanij=65) a0+; /记录a的个数 if(chessmanij=66) a1+; /记录b的个数 if(chessmanij=67) a2+; /记录c的个数 if(chessmanij=68) a3+; /记录d的个数 if(chessmanij=69) a4+; /记录e的个数 if(chessmanij=70) a5+; /记录f的个数 if(chessmanij=71) a6+; /记录g的个数 if(chessmanij=72) a7+; /记录h的个数 for(i=0;i8;i+) if(ai%2!=0) /如果字符的个数是奇数就还需要打印一个 chessman8i+1=i+65; else /如果前面7行随机的a到h字符恰好是偶数,最后一行全是i字符 chessman8i+1=73; void print_chess() /打印棋盘内容 int i,j; system(cls); printf(t 1 2 3 4 5 6 7 8 n); for(i=0;i10;i+) printf(tnt); for(j=0;j10;j+) printf(%4c,chessmanij); if(j=9&i!=0&i!=9) printf(t%d,i); printf(nnnn);int exit_chess() /判断是否满足退出 int i,j; for(i=0;i10;i+) for(j=0;j10;j+) if(chessmanij!=0) return 1; /只要有1个棋子不为0,就返回1 return 0;void near1(int a,int b,int a1,int b1) int arow2; int aline2; int brow2; int bline2; int start=0,end=0; /临时两个点 int i,j,n; /用于循环 for(i=0;i2;i+) /初始化数组 arowi=a; browi=a1; alinei=b; blinei=b1; /(a,b) a行中有哪些列 for(i=a+1;i=0;i-) if(chessmanib=0) /arow0是a点a行向上向量 arow0=i; else break; /(a1,b1) a1行中有哪些列 for(i=a1+1;i=0;i-) if(chessmanib1=0) /brow0是b点a1行向上向量 brow0=i; else break; /(a,b) b列中有哪些行 for(i=b+1;i=0;i-) if(chessmanai=0) /aline0是a点b列向左向量 aline0=i; else break; /(a1,b1) b1列中有哪些行 for(i=b1+1;i=0;i-) if(chessmana1i=0) /bline0是b点b1列向左向量 bline0=i; else break; /关键算法/ /* 情况一 (a,b) (a1,b1) */ /* 情况二 (a,b) (a1,b1) */ /*考虑上下向量*/ if(brow0=arow0) /向上方向向量 有共同的列向量 start=brow0; /取大的 else start=arow0; if(brow1=arow1) /向下方向向量 有共同的列向量 end=brow1; /取小的 else end=arow1; for(;start=end;start+) /列向量上共同点start到end /* b1要大于b,否则就交换如果不交换将使下面的循环出错*/if(bb1)j=b; /小的数赋到j中i=b1; /大的数赋到i中elsej=b1;i=b; /*这里节约一个变量,所有看起来有点复杂*/ for(n=0;j0) /因为b与b1大小不能确定,所有有2个if chessmanab=chessmana1b1=0; if(n=b1-b)&(n0) chessmanab=chessmana1b1=0; /*考虑左右向量*/ if(aline0=bline0) /向左的向量 有共同的行向量 start=aline0; /取大的 else start=bline0; if(aline1bline1) /向右的向量 有共同的行向量 end=aline1; /取小的 else end=bline1; for(i=start;i=end;i+) for(j=a,n=0;j0) /a1始终
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年赤峰达源水利工程有限公司公开招聘工作人员笔试参考题库附带答案详解
- 心理变态行为预案
- 家电维修保养的方法与预案
- 公司质量管理评估制度
- 家电维修校园宣传手册
- 互联网教育平台股权投资及教育资源共享协议
- 离婚债务偿还及子女抚养权协议书范本
- 离婚协议书样本:婚姻解除与子女抚养权归属
- 物业总经理任期突发事件应对与快速反应合同
- 创新型离婚协议子女抚养权及生活协助合同模板
- YC/Z 550-2016卷烟制造过程质量风险评估指南
- 工程水文第3章课件
- GB/T 4032-2013具有摆轮游丝振荡系统的精密手表
- GB/T 34875-2017离心泵和转子泵用轴封系统
- GB/T 21063.4-2007政务信息资源目录体系第4部分:政务信息资源分类
- GA/T 1081-2020安全防范系统维护保养规范
- 02药物不良反应adr课件
- 施工项目成本管理课件
- 文物建筑保护修缮专项方案
- 营销与2008欧锦赛ktv渠道方案
- 故障录波器课件
评论
0/150
提交评论