已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
青岛理工大学C语言程序设计题目 游戏五子棋 指导教师: 李兰 姓名: 王鹏 学号: 200907127 班级: 计算094 专业: 计算机科学与技术 地点: 二号实验楼第六机房 时间: 6.28 至 7.1 一、内容游戏五子棋在这个小游戏中,实现了两人对战的游戏模式,没有添加禁手规则,另外考虑到落子时的可能失误,就添加了悔棋工具,游戏过程中可以进行游戏存档,进入悔棋和存档的方法为将光标移动到已有子的位置,敲一下落子键即可。下次游戏时候可以进入存档界面然后选择读取游戏存档即可继续玩上次的游戏。在游戏时自动计算双方各胜几局,平几局。按键控制 一号玩家: 上 :w 下 :s 左 : a 右 : d 落子 : f 二号玩家: 上 :I 下 :k 左 : j 右 : l 落子 : h 二、上机环境操作系统:Windows 98/XP/Win 7开发工具:VC+6.0三、函数调用关系图zq()check()print()Printsjm()checkheqi()main()system()newdata()fuzhi()huifu()start()jilu()huiqi()四、各函数功能说明对每个函数功能加以说明,说明该函数主要实现了什么内容。1 int main() 主函数2 system(“color 5a”) 控制台前景、背景颜色设置3 system(“cls”) 清屏4 Printsjm(void) 输出游戏首界面5 start(void) 界面初始化6 print(void) 界面刷新7 check(void) 检测是否有一方赢棋8 checkheqi(void) 检测是否和棋9 zq(int,char (*p),char (*p) 走棋落子10 huiqi(char (*p) 悔棋11 jilu(char (*p) 记录上次落子前的界面12 cundang(void) 存储游戏进度13 duqu(void) 读取游戏进度14 fuzhi(void) 保存临时界面15 huifu(void) 恢复临时界面以实现光标移动16 newdata(void) 数据刷新五、算法描述或流程图system(“color 5a”)和system(“cls”) 只需要调用头文件,并在使用前将要声明的变量声明好即可。/*输出游戏首页*/*原样输出即可*/void Printsjm() printf( * * * * * * * * * * * * * * * 游戏名称 * * * * * * * * * * * * * * *n);printf( * * * * * * * * *n);printf( * * * * * * 五子棋 * * * * *n);printf( * * * * * * * * *n); printf( * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *n);printf( n);printf( * * * * * * * * * * * * * * * 游戏规则* * * * * * * * * * * * * * * *n); printf( * * * * * * * *n);printf( * * * * 游戏悔棋时不允许连续悔棋 * * * *n); printf( * * * * * * * *n);printf( * 任一方五子相连即获胜,一局游戏也就结束 *n);printf( * * * * * * * *n); printf( * 请遵守游戏规则谢谢! *n); printf( * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *n);printf( n);printf( * * * * * * * * * * * * * * * 游戏制作* * * * * * * * * * * * * * * *n);printf( * * * * * * * *n); printf( * * 计算机工程学院094班 * *n);printf( * * * * * * * *n); printf( * * * * * * * 王鹏 * * * * * * *n); printf( * * * * * * * 2010.6.28 * * * * * * *n);printf( *n); /*恢复*/void huifu()int i,j;for(i=0;i20;i+)for(j=0;j20;j+)qipanij=linshiij; /*临时界面恢复到实际界面*/void fuzhi()int i,j;for(i=0;i20;i+)for(j=0;j20;j+)linshiij=qipanij;/*记录临时界面*/void cundang()FILE *fp;int i,j;if(fp=fopen(filename,w)=NULL) /*打开存档文件*/printf( 存档失败!n);printf( 按任意键返回游戏界面!);i=_getch();fclose(fp);else for(i=0;i20;i+)for(j=0;j20;j+)cd.cunij=linshiij; /*数据恢复*/cd.jx=jx;cd.jy=jy;cd.leiji=leiji;fwrite(&cd,sizeof(struct cund),1,fp);printf( 存档成功!n);printf( 按任意键返回游戏界面!);i=_getch();fclose(fp);system(cls);void duqu() /*读取游戏进度*/FILE *fpp;int i,j; if(fpp=fopen(filename,r)=NULL)printf( 你还没有存档,读取存档失败!n);printf( 按任意键返回游戏界面!); i=_getch();fclose(fpp);elsefread(&cd,sizeof(struct cund),1,fpp);fclose(fpp);jx=cd.jx;jy=cd.jy;leiji=cd.leiji;for(i=0;i20;i+)for(j=0;j20;j+)qipanij=cd.cunij;system(cls);printf( 读取存档成功,请继续游戏!n);printf( 按任意键返回游戏界面!);i=_getch();void jilu(char (*p)20)/*记录悔棋前棋盘个子的位置以及悔棋后该谁落子*/int i,j; for(i=0;i20;i+) for(j=0;j20;j+)*(*(p+i)+j)=qipanij;/*悔棋到上次你的落子权*/void huiqi(char (*p)20)int i,j;for(i=0;i20;i+)for(j=0;j20;j+)qipanij=*(*(p+i)+j);/*输出界面,每次走完一步棋都要刷新界面*/void print()/*start()函数也是同样道理*/int i=0,j=0,k=0;/*显示列坐标*/printf(000|001|002|003|004|005|006|007|008|009|010|011|012|013|014|n);for(i=1;i15;i+) /*棋盘的上边界*/printf(-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|n); for(j=0;j15;j+) if(j=0) if(i1) huifu();ly-;qipanlxly=95;system(cls);print();break; case l: if(ly14)huifu();ly+;qipanlxly=95;system(cls);print();break; case k: if(lx1) huifu();lx-;qipanlxly=95;system(cls);print();break;key=_getch();if(key=h)if(linshilxly=black|linshilxly=white)system(cls);printf(请选择:n);printf( 【1】进入游戏界面存档n);printf( 【2】进入游戏悔棋界面n);printf( ); scanf(%d,&mn);if(mn=1)mn=0;printf(请选择:n); printf( 【1】保存游戏进度n);printf( 【2】读取游戏进度n);printf( ); scanf(%d,&mn);if(mn=1)mn=0;printf( 你选择了保存游戏进度!n);cundang();system(cls);print();else if(mn=2)mn=0;printf( 你选择了读取游戏进度!n); duqu();fuzhi();system(cls);print(); else if(mn=2)mn=0;printf( 你选择了悔棋!n);if(kongzhi=player1) if(leiji%2=0) huiqi(p2); /*先走棋的玩家悔棋时的n为偶数*/ else huiqi(p2); leiji-=2; jx-; jy-; fuzhi(); system(cls); print();elseif(leiji%2=1) huiqi(p2); /*先走棋的玩家悔棋时的n为偶数*/ else huiqi(p2); leiji-=2; jx-; jy-; fuzhi(); system(cls); print();else if(linshilxly!=black&linshilxly!=white)for(p=0;p20;p+) for(q=0;q1) huifu();ly-;qipanlxly=95;system(cls);print();break; case d: if(ly14)huifu();ly+;qipanlxly=95;system(cls);print();break; case s: if(lx1) huifu();lx-;qipanlxly=95;system(cls);print();break; key=_getch();if(key=f)if(linshilxly=black|linshilxly=white)system(cls);printf(n 请选择:n);printf( 【1】进入游戏界面存档n);printf( 【2】进入游戏悔棋界面n);printf( );scanf(%d,&mn);if(mn=1)mn=0;printf(n 请选择:n); printf( 【1】保存游戏进度n);printf( 【2】读取游戏进度n);printf( );scanf(%d,&mn);if(mn=1)mn=0;printf( 你选择了保存游戏进度!n);cundang();else if(mn=2)mn=0;printf( 你选择了读取游戏进度!n); duqu();fuzhi();system(cls);print();else if(mn=2)printf( 你选择了悔棋!n);if(kongzhi=player1) if(leiji%2=0) huiqi(p2); /*先走棋的玩家悔棋时的n为偶数*/ else huiqi(p2); leiji-=2; jx-; jy-; fuzhi(); system(cls); print(); else if(leiji%2=1) huiqi(p2); /*先走棋的玩家悔棋时的n为偶数*/ else huiqi(p2); leiji-=2; jx-; jy-; fuzhi(); system(cls); print(); else if(linshilxly!=black&linshilxly!=white)for(p=0;p20;p+) for(q=0;q20;q+) if(qipanpq!=black&qipanpq!=white) qipanpq=32;if(kongzhi=player1) if(2*jx=leiji) jilu(p1); jx+; else if(2*jy-1)=leiji) jilu(p2); jy+; qipanlxly=player; fuzhi(); system(cls); print(); break;else if(2*jx=(leiji-1) jilu(p1); jx+; else if(2*jy-1)=(leiji-1) jilu(p2); jy+; qipanlxly=player; fuzhi(); system(cls); print(); break; /*数据初始化*/void newdata()int i,j;lx=ly=jx=jy=jushu=1;leiji=sh1=sh2=he=0;for(i=0;i20;i+)for(j=0;j20;j+)qipanij=linshiij=32;六、程序运行效果图/*游戏首界面如下*/*以下为选择谁先落子的界面*/*存档时的界面*/*存档成功的界面*/*走棋时的界面,也是悔棋前的界面*/*悔棋时的界面*/*悔棋后的界面*/*以下为赢棋的界面*/七、体会 经过这次课程设计,我发现在很多地方的知识都不足,很多函数和技巧都要从网络上或其他书籍上找,可能学计算机要看看很多很多书,尤其在大学,很多情况下都需要自学,我想在以后的学习和实践工作中,会多读多看多练的,努力让自己的实力得到提高,在这个小游戏中,不能调用鼠标,只能通过输入坐标点位置,这是一个很大的不足,以后学习了一定要修改的更好!八、参考文献1 湛为芳C语言程序设计技术清华大学出版社,20062 谭浩强C程序设计(第三版)清华大学出版社,20053 Kennth A.reek. C和指针 (徐波译)4 另外还使用了百度中文搜索引擎 九、程序清单29#include #include #include #include #define player1 1 /*一号玩家控制*/#define player2 2 /*二号玩家控制*/#define black 1 /*黑色棋子1*/#define white 2 /*白色棋子2*/struct cund /*用来保存棋局*/char cun2020;int jx;int jy;int leiji;cd;char kz=32;char qipan2020=32;char linshi2020=32;char filename20=c:五子棋存档.dat;int kongzhi;int lx=1,ly=1,leiji=0,jushu=1,sh1=0,sh2=0,he=0;int jx=1,jy=1;void huifu()int i,j;for(i=0;i20;i+)for(j=0;j20;j+)qipanij=linshiij;void fuzhi()int i,j;for(i=0;i20;i+)for(j=0;j20;j+)linshiij=qipanij;void cundang()FILE *fp;int i,j;if(fp=fopen(filename,w)=NULL)printf( 存档失败!n);printf( 按任意键返回游戏界面!);i=_getch();fclose(fp);else for(i=0;i20;i+)for(j=0;j20;j+)cd.cunij=linshiij;cd.jx=jx;cd.jy=jy;cd.leiji=leiji;fwrite(&cd,sizeof(struct cund),1,fp);printf( 存档成功!n);printf( 按任意键返回游戏界面!);i=_getch();fclose(fp);system(cls);void duqu()FILE *fpp;int i,j; if(fpp=fopen(filename,r)=NULL)printf( 你还没有存档,读取存档失败!n);printf( 按任意键返回游戏界面!); i=_getch();fclose(fpp);elsefread(&cd,sizeof(struct cund),1,fpp);fclose(fpp);jx=cd.jx;jy=cd.jy;leiji=cd.leiji;for(i=0;i20;i+)for(j=0;j20;j+)qipanij=cd.cunij;system(cls);printf( 读取存档成功,请继续游戏!n);printf( 按任意键返回游戏界面!);i=_getch();void jilu(char (*p)20)/*记录悔棋前棋盘个子的位置以及悔棋后该谁落子*/int i,j; for(i=0;i20;i+) for(j=0;j20;j+)*(*(p+i)+j)=qipanij;/*悔棋到上你次你的落子权*/void huiqi(char (*p)20)int i,j;for(i=0;i20;i+)for(j=0;j20;j+)qipanij=*(*(p+i)+j);/*界面初始化*/void start()int i,j,k=0;for(i=0;i15;i+)qipani0=qipan0i=i;printf(000|001|002|003|004|005|006|007|008|009|010|011|012|013|014|n);for(i=1;i15;i+) printf(-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|n); for(j=0;j15;j+) if(j=0) if(i10) printf(00%d|,i);else printf(0%d|,i);elseprintf( %c |,qipanij);printf(n);printf(-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|n); /*输出界面,每次走完一步棋都要刷新界面*/void print()int i=0,j=0,k=0;printf( 第%d局n,jushu);printf(一号玩家胜%d局 平%d局 二号玩家胜%d局n,sh1,he,sh2);printf(000|001|002|003|004|005|006|007|008|009|010|011|012|013|014
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同好久失效协议书
- 叫账务抵消协议合同
- 培训学校挂名协议书
- 商户租赁保密协议书
- 墙面质量协议书范本
- 城市文化合作协议书
- 施工合同商务专册(3篇)
- 两栖类养殖工安全管理强化考核试卷含答案
- 2025年重庆市重庆市沙坪坝区保安员招聘考试题库附答案解析
- 2025年公司三级安全培训考试试题含答案(综合卷)
- (已压缩)(11)义务教育物理课程标准日常修订版(2022年版2025年修订)
- 国家赔偿法-形成性考核(一):第1-3章(占总成绩10%)-国开(ZJ)-参考资料
- 国开电大专科《人文英语1》一平台综合测试在线形考试题及答案2025秋期珍藏版
- 《铁路技术管理规程》(普速铁路部分)
- Compiere-ERP中文环境的操作流程
- 2022年电厂电气运行试题库大全含答案
- GB∕T 20973-2020 膨润土-行业标准
- Berg平衡量表应用简介
- 科技行业AI+汽车:高级别智能驾驶提效降耗新体验
- Q-RJ 557-2017 航天型号产品禁(限)用工艺目录(公开)
- 融资租赁租金计算表
评论
0/150
提交评论