五子棋游戏程序设计报告_第1页
五子棋游戏程序设计报告_第2页
五子棋游戏程序设计报告_第3页
五子棋游戏程序设计报告_第4页
五子棋游戏程序设计报告_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 计算机学院网络工程专业程序设计综合课程设计报告 (2011/2012学年 第一学期)学生姓名: 学生班级: 网络工程学生学号: 指导教师: 2011年12月30日 双人五子棋目录第一章 课程设计目的和要求 11.1课程设计的目的 11.2课程设计的要求 1第二章 课程设计任务内容 22.1课程设计的主要内容 2 2.2系统设计原则 2第三章 设计说明 33.1游戏分析和介绍 33.1.1游戏分析33.1.2游戏介绍33.2重点模块说明 33.2.1棋盘界面Showboard()33.2.2下棋Play()43.2.3覆盖棋盘Recoverboard()73.2.4游戏结束后初始化棋盘Unit

2、board() 73.2.5保存棋盘CopyB()83.3函数清单83.4接口 9第四章 软件使用说明 104.1测试 104.2限制条件 13第五章 课程设计心得体会14附录一 程序流程图15附录二 程序代码16附录三 参考文献26第一章 课程设计目的和要求1.1课程设计的目 1,学习综合运用C语言课程和其他相关课程的知识,提高分析解决实际问题的能力,进一步巩固、加深和拓宽所学的知识,进一步加强结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。 2,全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法,与同学合作设计整套程序,并且独立完成一定工作量的程序设计. 3,掌

3、握程序设计中的常用算法和C语言的程序技巧,培养良好的程序设计风格。 4,运用所学的知识了解五子棋游戏的制作结构,将所学的知识运用于实践中。1.2课程设计的要求 1,与同学合作设计、编制、调试出一款双人五子棋游戏,并单独完成其中一定量的函数模块。 2,要求该游戏具有趣味性和可操作性,能够正常运行。其中用到C+语言中的各种语句、结构。(如其中需要注意全局变量和局部变量的申明,数组的使用等) 3,双人五子棋要求能够进入欢迎界面,二人对弈,当有五颗同色棋子相连时,判断出输赢等一系列游戏流程。第二章 课程设计任务内容2.1课程设计的主要内容 任务内容就是设计一款老少皆宜、能够锻炼个人策略谋划能力、较为传

4、统的五子棋。棋盘为16*16,棋子放在交叉点儿上,两人各执一色,轮流下棋,先将横、竖、斜线上的五个同色棋子练成不间断的一排则胜出。2.2系统设计原则 1,系统性。系统作为统一整体而存在,因此,在设计中,要从系统的角度考虑。系统的代码要统一,传递语言要尽可能一致。 2,可靠性。可靠性是指系统抵御外界干扰的能力及外界干扰时的恢复能力。 3,规范性。游戏的运用以吸引玩家的乐趣为前提,一方面,系统设计应尽量避免不必要的复杂化,另一方面模块应尽量简洁,以缩短处理流程。第三章 设计说明3.1游戏分析和介绍3.1.1 游戏分析 该五子棋程序基本上实现了五子棋游戏的功能,有双方下棋之前的欢迎界面及下棋过程中的

5、棋盘界面,还有最终会判断出输赢。同时,该游戏采用了二维坐标实现的,明了易懂,方便玩家在游戏过程中的基本操作,使游戏更加简便。细节方面,该程序有实时储存功能,随时记录。另外考虑到游戏挺简单的,就没有设置悔棋的相关模块。3.1.2 游戏介绍 该游戏是简单的双人五子棋,所实现的功能是能够显示欢迎界面,选择是否进行游戏,进入游戏界面以后,玩家开始下棋。玩家输入坐标则会在棋盘上显示棋子,(若是输入的坐标超出棋盘或者该位子已经有子则会提示玩家重新输入坐标位子),若输入<0,0>则退出游戏。3.2重点模块说明3.2.1 棋盘界面Showboard() 出现棋盘的界面,对棋盘上每一个点进行定位,并

6、在棋盘上显示相关的信息。相关代码如下:int Showboard()/棋盘界面system("CLS");cout << " "for(int s=1;s<=16;s+)if(s>=10) cout << s-10 << " " else cout << s << " " cout << endl;for(i=0;i<16;i+)printf("%2d",i+1);for(j=0;j<16;j+)co

7、ut << mapij;if(i=6)cout << "退出:输入: 0 0 "if(i=8)cout << "步数(Step):" << Step;if(i=12)cout << "制作人:吴忆芸 余迎香。" if(i=14)cout << "请输入棋子的纵坐标、横坐标下子!" ; cout << endl;return(1);3.2.2下棋Play() 在这个小游戏中,黑方先下棋,然后可以轮流进行。而在Play()这个函数中会调

8、用各个函数,如最初的欢迎界面Interface(),每颗棋子的保存CopyB(),判断棋子的位子是否合法bool legal() bool Overflow(),判断同色五颗棋子是否连成一条线judgewin() 相关代码如下:int Play()char a03=""char a13=""Showboard();cout << "黑方下:"<<endl;while(cout<<"输入纵坐标:",cin >> x,cout<<"输入横坐标:&qu

9、ot;,cin >> y)if(x=0&&y=0)Recoverboard();Interface();break;if(Overflow()continue;if(legal() x-;y-;if(flag=1)/输入的是白棋mapxy0=a00;mapxy1=a01;Step+;Showboard();if(judgewin()cout << "n绿方胜利了!n" ; cout << "游戏结束了! -是否重来?(y/n)"cin >> Switch;if(Switch!='n&

10、#39;)unitboard();Play();else return 1;cout << "黑方下:"<<endl;flag=0;elsemapxy0=a10;mapxy1=a11;Step+;Showboard();if(judgewin()cout << "n黑方胜利了!" << endl;cout << "游戏结束了! -是否重来?(y/n)"cin >> Switch;if(Switch!='n')unitboard();Play();

11、else return 1;cout << "绿方下:"<<endl;flag=1;else cout << "It already have a chessman!Please Reenter:n此位置已有子!请重新输入:"3.2.3 覆盖棋盘Recoverboard() 当一盘棋下完选择重来的时候,会出现一个最初的棋盘界面覆盖掉目前存在的棋盘,从而使棋盘达到清屏的效果,但是却能够保存所下的棋的步数。 相关代码如下:void Recoverboard()/覆盖棋盘,使棋盘恢复到原始状态Step=0;for(i=0;i

12、<16;i+)for(j=0;j<16;j+)mapij0=copymapij0; mapij1=copymapij1;3.2.4 游戏结束后初始化棋盘Unitboard() 相关代码如下:int unitboard()/游戏结束后界面初始化for(int i=0;i<16;i+)for(int j=0;j<16;j+)mapij0=copymapij0;mapij1=copymapij1;return 1;3.2.5 保存棋盘CopyB() 这个函数看起来貌似可以没有,但是,却是不可缺少的。它所实现的是对棋盘的保存,若是没有这个函数,最终将判断不出胜负。 相关代码如下

13、:void CopyB()/调用字符数组保存原始棋盘for(i=0;i<16;i+)for(j=0;j<16;j+)copymapij0=mapij0;copymapij1=mapij1;3.3函数清单char map16168/绘制16*16的棋盘copymap16168/在重新玩一局游戏的时候显示最初的空棋盘Showboard()/棋盘界面棋盘界面/最初的欢迎界面unitboard()/游戏结束后棋盘初始化judgewin()/判断输赢Play()/下棋Recoverboard()/覆盖棋盘legal()/判断棋子是否合法Overflow()/判断棋子是否在棋盘内部3.4函数接

14、口Int mainSystem titleSystem color()Systemmode()CopyB()Interface()Overflow欢迎界面RecoverboardPlay()JudgewinSnowboardLegal图3-1第四章 软件使用说明4.1测试 如下所示,是运行过程中的各种界面显示: 1,如图所示是五子棋的欢迎界面图4-1 2,选择“1”时则出现如下棋盘界面图4-2 3,选择“2”时,出现如下界面图4-3 4,进入棋盘界面下棋,当该位子已经有子的时候,界面显示如下图4-4 5,进入棋盘界面下棋,当输入的坐标超出棋盘时,界面显示如下:图4-5 6,当五颗同色的棋子相连

15、的时候,界面显示如下:图4-6 7,选择“y”时,回到空棋盘,显示如下:图4-7 8,当选择“n”时,会出现如下界面:图4-84.2 限制条件 这个游戏由于比较小,而且是双人对战,所以没有设计悔棋这一步骤。这是一个相当大的限制。另外,只能是人人对战,而实现不了人机对战。第五章 课程设计心得体会 在本次课程设计中,不仅让我认识到自己学习上的不足,也通过请教其他同学何老师学会了修改并运行程序,还让自己复习了编程的知识,对遇见的众多问题,通过思考,耐心动手解决问题,在课程设计期间我也学到了课本中学不到的知识,明白了只有通过自己不断地动手实践才能找出不足、找出问题和提高自己的能力,发现课程设计是我学习

16、和掌握专业知识的好方法,让自己变得活跃,也会看明白程序问题,本次受益匪浅。 最后,感谢王艳老师的悉心指导,交给我的程序设计的思想和知识。这次课程设计要感谢老师和同学为我提出了很多的宝贵意见,给我讲解了我很多不懂得知识及应用方法,为我更好的完成报告付出了辛勤的劳动。附录一 程序流程图附录二 程序代码#include<iostream>#include<conio.h> #include<stdlib.h> #include<time.h> #include<dos.h> #include<windows.h> using n

17、amespace std;int x,y,Step=0;bool flag=0;int i,j;char Switch;char map16168="","","","","","","","","","","","","","","","","","

18、;","","","","","","","","","","","","","","","","","","","","","","","

19、","","","","","","","","","","","","","","","","","","","","","","","&

20、quot;,"","","","","","","","","","","","","","","","","","","","","","","&q

21、uot;,"","","","","","","","","","","","","","","","","","","","","","","&qu

22、ot;,"","","","","","","","","","","","","","","","","","","","","","","&quo

23、t;,"","","","","","","","","","","","","","","","","","","","","","",""

24、;,"","","","","","","","","","","","","","","","","","","","","","",""

25、,"","","","","","","","","","","","","","","","","","","","","","","",

26、"","","","","","","","","","","","","","","","","","","","","","","",&

27、quot;","","","","","","","","","","","","","","","","","","","","","","",&q

28、uot;","","","","","","",""char copymap16168;/保存棋盘初始状态,恢复初始状态int Showboard(),Interface(),unitboard(),judgewin(),Play();/棋盘界面,最初的欢迎界面,游戏结束后初始化棋盘,判断输赢,下棋void Recoverboard(); /覆盖棋盘bool legal(),Overflow();/判断位子是否合法,判断位子是否在棋盘内部int

29、Interface()char a;cout << "nn 五子棋游戏n ttntt n"cout << "" << endl;cout << " " << endl;cout << " 1:Two Person Games " << endl;cout << " (人人对战) " << endl;cout << " " << endl;cout

30、 << " 2: Exit " << endl;cout << " (退出) " << endl;cout << " " << endl;cout << "" << endl;cout << "nPlease select(请选择):"cin >> a;if(a='1')Play();else cout << "nn(谢谢使用!)n&quo

31、t; cout << "按任意键退出!"getch();return 0;return 1;void Recoverboard()/恢复到棋盘原始状态Step=0;for(i=0;i<16;i+)for(j=0;j<16;j+)mapij0=copymapij0; mapij1=copymapij1;void CopyB()/调用字符数组保存原始棋盘for(i=0;i<16;i+)for(j=0;j<16;j+)copymapij0=mapij0;copymapij1=mapij1;int unitboard()/游戏结束后界面初始化fo

32、r(int i=0;i<16;i+)for(int j=0;j<16;j+)mapij0=copymapij0;mapij1=copymapij1;return 1;int judgewin()/判断输赢,每次向两个方向检查,两个方向间距大于5就返回1,否则返回0int cx,cy,dx,dy;char a,a03="",a13=""if(flag=1)a=a01;elsea=a11;cx=x;cy=y;dx=x;dy=y;while(mapcxcy1=a)cx-;cy-;/向左上检测if(cx<0|cy<0)break;whil

33、e(mapdxdy1=a)dx+;dy+;/向右下检测if(dx>15|dy>15)break;if(dx>=(cx+6)|dy>=(cy+6)return 1;cx=x;cy=y;dx=x;dy=y;while(mapcxcy1=a)cx-;/向上竖直检测if(cx<0)break;while(mapdxdy1=a)dx+;/竖直向下检测if(dx>15)break;if(dx>=(cx+6)return 1;cx=x;cy=y;dx=x;dy=y;while(mapcxcy1=a)cy-;/水平向左检测if(cy<0)break;while(

34、mapdxdy1=a)dy+;/水平向右检测if(dy>15)break;if(dy>=(cy+6)return 1;cx=x;cy=y;dx=x;dy=y;while(mapcxcy1=a)cx+;cy-;/向左下方检测if(cx>15|cy<0)break;while(mapdxdy1=a)dx-;dy+;/向右上方检测if(dx<0|dy>15)break;if(cx>=(dx+6)|dy>=(cy+6)return 1;return 0;int Showboard()/棋盘界面system("CLS");cout &l

35、t;< " "for(int s=1;s<=16;s+)if(s>=10) cout << s-10 << " " else cout << s << " " cout << endl;for(i=0;i<16;i+)printf("%2d",i+1);for(j=0;j<16;j+)cout << mapij;if(i=6)cout << "退出:输入: 0 0 "if(i=8)c

36、out << "步数(Step):" << Step;if(i=12)cout << "制作人:吴忆芸 余迎香。" if(i=14)cout << "请输入棋子的纵坐标、横坐标下子!" ; cout << endl;return(1);bool legal()/判断位置是否合法char a03=""char a13=""if(mapx-1y-11=a01)|(mapx-1y-11=a11)return 0;else return 1; bool Overflow()/判断棋子位子是否在棋盘内if(x>16|x<1|y>16|y<1)cout << "此位置不合法!请重新输入:"<<endl;return 1; else return 0;int Play()char a03=""char a13=""Showboard();cout << "黑方下:&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论