- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目录
一 概述 2
二 总体方案设计 3
三 详细设计 4
四 程序的调试与运行结果说明 8
五 课程设计总结 10
六 后记 11
参考文献 11
附录——源代码 12
一 概述
课程设计的目的
1、学会编写C++程序。
2、课程设计是检验我知识能力的一种途径。
3、课程设计能让我学会许多书本中学不到的东西。
4、课程设计能使我所学知识融会贯通,熟练掌握C++中一些基本知识点。
5、课程设计是一次很好的实践机会,可以通过实际操作来找出不足,修改不足,让自己精益求精,做到最好。
6、通过设计开发五子棋这个具体的例子把我所学到的和我所想到的都运进设计一个自己的作品。
7、?通过课程设计培养了我的动手能力以及综合运用所学的C++语言基础论,基础知识,基本技能,进行程序分析和程序开发,提高在实际开发中解决问题的能力,达到了能够利用C++语言进行应用程序的规划,分析,设计和实施,更能进一步使我对这门语言有深刻的理解和更好的得到巩固,更能对我所学的知识得到检验。?
课程设计的要求
需要的基本知识与技能:C++语言基本理论,基础知识,基本技能。数据结构相关知识。
尚未掌握的知识点:由于最开始想开发windows界面的五子棋,查阅了很多相关资料。比如《浅入浅出MFC》、《c++可视化编程》等等,但最终因自己可视化界面编程知识的缺乏和时间问题,改编成了dos界面的五子棋。要想做一个完成的五子棋游戏,还需要学习《算法设计》《人工智能》等相关知识。
课程设计的主要设计思想
1.五子棋是一个棋牌类对战游戏,一般有人机对战,和双人对战两种模式。由于人机对战涉及人工智能等后续课程,所以我的程序只涉及了双人对战这一模式。
2.程序用一个二位数组name【N】【N】来存放棋盘信息,N=20表示一个20*20的棋盘。Name【i】【j】=0表示此位置上没有落子,1、2分别表示落有黑子和白子。
3.程序中还应有个最重要的功能就是判断胜负。五子棋游戏中,只要一方棋子在任一直线上率先连成五颗即为胜利。所以在每一步落子后,系统就应该判断胜负,分别从左到右,从上到下,从左到右斜方向,从右到左斜方向,四方方向判断有无连续的5颗同色棋子。
4.另一个重要功能是怎样能让用户通过键盘操作,进行下棋游戏。在此功能中,不仅要能识别用户键入的控制键,也必须控制黑白子下棋顺序和是否落子在可用位置。
二 总体方案设计
整体设计思路:
首先、设计构思好各界面,和功能模块。即用户所见视图,用于指导开发具体的程序实现,提取类和对象的抽象。
其次、定义了一个棋盘类。这个类封装了棋盘的数据存储和落子下棋,刷新棋盘等功能。定义好各子模块的接口。
再则、分开实现各个棋盘类的方法操作。??函数的调用,函数的构造等。再次、使用一些基本控制语句和I/O流来实现各种功能.??例如:IF语句,???IF……ELSE…语句,WHILE?循环语句,SWITCH语句,FOR循环语句等。
最后、通过编译、运行在dos环境下实现实际的结果。
算法的整体思路:
在用户选择开始游戏后,首先需要初始化棋盘类,输出棋盘到dos界面上。
然后,调用下棋模块,与用户交互过程中,每下一步,判断输入是否正确并刷新棋盘。
最后,在每一步后判断胜负。如果已分出胜负,输出结果并初始化棋盘,否则继续上一步操作。
整体框图
三 详细设计
1 棋盘类
整个架构的核心部分,类名为Qipan。封装了棋盘的各种可能用到的功能[3],如保存棋盘数据、初始化、判断胜负等。用户操作主界面,主界面与Qipan进行交互来完成对游戏的操作。
类图
2.绘制棋盘模块
当游戏初始化时,和每当落子消息触发时,都需要对棋盘进行重绘。这里用特殊符号“○”“●”“+”分别来描绘白子、黑子和棋盘空格。这个函数主要完成了以下工作:
装载棋盘二位数组并进行绘制。
根据棋盘数据绘制棋子。
绘制最后落子指示矩形。
3.键盘操作控制模块
此模块主要用于处理与用户的交互过程。即完成落子判断过程。
此模块主要完成以下工作:
从键盘读入控制信息(上下左右移动和落子)
判断是否在棋盘内安落子键,和移动是否超出棋盘范围
判断落子点是否已有棋子
4.判断胜负模块
这是游戏中一个极其重要的算法,用来判断当前棋盘的形势是哪一方获胜。五子棋的胜负,在于判断棋盘上是否有一个点,从这个点开始的右、下、右下、左下四个方向是否有连续的五个同色棋子出现,如图:
图.判断胜负方向
这个算法也就是Qipan的Win成员函数。从设计的思想上,需要它接受一个棋子颜色的参数,然后返回一个布尔值,这个值来指示是否胜利。这里用一个数组int count[8]来控制2中颜色4个方向的棋子情况。C
文档评论(0)