五子棋c++课程设计报告书

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

....专注专业目录第一章:课程设计目的和要求·······················21.1数据结构课程设计的目的··························21.2数据结构课程设计实现的要求······················2第二章:课程设计任务内容·························32.1五子棋对弈系统···································3第三章:详细设计说明·····························43.1功能设计········································43.2五子棋对弈系统流程图······························43.3软件中实现各项功能的函数与程序代码········5第四章:程序运行环境说明··························104.1程序运行环境说明及出现的问题·····················104.2运行结果·········································10第五章:课程设计心得与体会····················14附录········································15源程序:·····································16....专注专业五子棋第一章课程设计目的和要求1.1数据结构课程设计的目的进一步培养结构化程序设计的思想,加深对高级系统语言基本语言要素和控制结构的理解,针对数据结构中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。此课程设计着眼于知识的运用,把平常学的知识运用到课程实践中来,本身就是考察我们知识运用能力。要求熟悉运用一些编程软件,对我们所学的理论知识进一步的深化。1.2数据结构课程设计实现的要求使用C++语言编写一个基于控制台的简单程序,使学生掌握简单的程序设计技巧。同时设计一个简单的五子棋对弈系统,可以实现五子棋的基本功能,是一款娱乐用的小型程序。....专注专业第二章课程设计任务内容2.1五子棋对弈系统设计一个五子棋系统程序,实现对五子棋进行运行。基本要求:五子棋是有两个人在一盘棋上进行对抗的竞技活动。在对局开始时,先由用户选择哪方开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围交叉点上落子,如此轮流落子,知道某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方程就算获胜。此时算法结束,当有任何一方退时出,都可在算法中实现。....专注专业第三章详细设计说明3.1功能设计(1)由两个玩家分别下棋,当某一玩家五子相连,则赢。(2)界面要求:初始状态——显示棋盘,并显示两个玩家的操作键及初始玩家名称;游戏进行状态——动态显示棋盘,不同玩家的棋子用不同符号显示,屏幕上显示当前玩家号,结束时显示赢家名称。3.2五子棋对弈系统流程图是否是否否开始白放下子判断该位置是否有棋找另一位白方下子判断白方是否胜出跳出白棋获胜黑方下子判断该位置是否有棋棋判断是否重现开局否....专注专业白(黑)子在水平方向是否大于4白(黑)子在正对角线方向是否大于4白(黑)子在垂直方向是否大于4是是图3-1程序总体图判断该位是否找另一位黑方下子判断黑方是否胜出跳出黑棋获胜否白(黑)子在反对角线方向是否大于4白(黑)方获胜白(黑)方获胜白(黑)方获胜白(黑)方获胜进入选择是否重新开局框是是是白(黑)方下子游戏结束是否否否....专注专业图3-2算法流程图3.3软件中实现各项功能的函数与程序代码主要函数、结构体和链表Inta;//纪录坐标位置Intb;//纪录坐标位置CharachBoard[i][j],//用于在【a】【b】处落子chSort;;//棋子的类别IntnWin////赢棋的次数类的使用:classCGobang{private:charchSort;//棋子的类别intnWin;//赢棋的次数intnLose;//输棋的次数staticintnDraw;//平局次数public:staticcharachBoard[19][19];//棋盘staticintnSize;//棋盘的尺寸nSize*nSizeCGobang(charchsort)//构造函数,决定一方棋子的类别否黑(白)方下子....专注专业{chSort=chsort;nWin=nLose=nDraw=0;}friendvoidhuiqi();//悔棋staticvoidsavefile();//将棋盘保存至文件staticvoidreadBoard();//从文件中读入棋盘voidcontinute();//接着上次的游戏玩voidPlayTurn(void);//走一步棋intJudge();//判断是否连成五子,是则返回1voidWin(void);//赢棋voidLose(void);//输棋staticvoidDraw(void);//平局voidPrintInfo(void);//打印总体情况staticvoidPrintBoard(void);//输出棋盘staticintGetFull(void);//判断棋盘是否一满staticvoidInitialBoard(void);//初始化棋盘};}本次程序设计主要设计了五个模块1.绘制棋盘模块....专注专业当游戏初始化时,和每当落子消息触发时,都需要对棋盘进行重绘。这里用特殊符号“o”“@”分别来描绘白子、黑子。这个函数主要完成了以下工作:●装载棋盘二位数组并进行绘制。●根据棋盘数据绘制棋子。●绘制最后落子指示规矩。图3-32.键盘操作控制模块此模块主要用于处理与用户的交互过程。即完成落子判断过程。此模块主要完成以下工作:●判断是否在棋盘内按落子键,和移动是否超出棋盘范围。判断:achBoard[i][j]=0“+”绘制棋牌;定义变量i,ji=0;i++jnSize退出循环inSize退出循环inSizej=0;j++YesNoYes输出“”输出No判断:achBoard[i][j]=0YesNo“输出”“输出”完成扫描1行;输出换行符棋盘绘制结束判断:a=i&&=j....专注专业●判断落子点是否已有棋子。3.判断胜负模块这是游戏中一个极其重要的算法,用来判断当前棋盘的形势是哪一方获胜。五子棋的胜负,在于判断棋盘上是否有一个点,从这个点开始的右、下、右下、左下四个方向是否有连续的五个同色棋子出现,如图:图3-5判断胜负方向这个算法是本系统里的nWin成员函数。需要它接受一个棋子颜色的参数,然后返回一个布尔值,这个值指示是否胜利。1).横向判断流程图“——”定义变量:linti,j,k//控制循环变量intk=0,循环控制列:j=0,j++j=nSizeJ,jnSize循环控制列:i=0,j++IiIIii=nSize输出结果;nWin=output(k,nWin)inSize循环控制5:k=0,k++k=5k5achBoard[1][1+k]=1achBoard[1][i+k]=2k++k++....专注专业图3-62).竖向判断流程图“|”3).从左到右斜方向“\”图3-84).从右到左斜方向“/”循环控制5:k=0;k++k5k=5Name[1+k][j-k]=1Name[i+k][j-k]=2k++k++循环控制5:k=0;k++K5k=5Name[1+k][j-k]=1Name[i+k][j-k]=2k++k++循环控制5:k=0;k++K5k=5Name[1+k][j]=1Name[i+k][1]=2k++k++....专注专业图3-9图3-94.重置棋盘模块在每局游戏开始的时候都需要调用这个函数InitialBoard(void)将棋盘初始化,也就是棋盘的初始化工作。在这个函数中,主要发生了这么几件事情:●将achBoard[N][N]中每一个落子位都置为无子状态(0)。●默认的先手顺序是黑子先手,置player=1。5.游戏结束模块这一模块主要用于释放内存,用输出流语句输出结束信息,并控制循环退出程序。第四章程序运行环境说明4.1程序运行环境说明及出现的问题该程序可以实现对学生信息的录入和显示,可以采用Dev-c或者VisualC++运行,可以实现简单的界面化,使程序方便使用和修改。....专注专业4.2运行结果软件使用结果1.进入游戏→主界面图4-12.点击1→开始游戏....专注专业图4-23.继续点击1或2→游戏过程中....专注专业图4-34.判断胜负图4-4....专注专业5.在主界面中点击0→退出游戏图4-6....专注专业第五章课程设计心得与体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C++语言又是最常见,功能最强大的一种高级语言,因此做好C++语言课程设计是十分必要的。通过几周的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做这么长的程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。我做的是五子棋设计,虽然是很简单的一个小的程序,但对我来说却是一个很大的困难。更加是第一次做课程设计,所以做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把....专注专业程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C++语言的一次实践作业,自己进步的证明。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!附录1:参考文献1、谭浩强著.C++程序设计教程.清华大学出版社2、陈维兴林小茶编著.C++面向对象程序设计.中国铁道出版社3、田淑清,C语言程序设计,北京:高等教育出版社,2006年1月4、DavidJ.Kruglinski,ScotWingo,GeorgeShepherd,VisualC++6.0技术内幕(第五版),希望图书室译,北京:北京希望电子出版社,2001年1月....专注专业源程序:#includeiostream#includestring#includefstream#includeiomanipinta[90],b[90];//定义全局数组intk=0;usingnamespacestd;classCGobang//棋子类{private:charchSort;//棋子的类别intnWin;//赢棋的次数intnLose;//输棋的次数staticintnDraw;//平局次数public:staticcharachBoard[19][19];//棋盘staticintnSize;//棋盘的尺寸nSize

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功