五子棋游戏项目设计报告报告人:学号:日期:2016年5月25日2目录摘要....................................................................................................3一、系统功能简述................................................................................4(一)系统功能..............................................................................4(二)开发环境..............................................................................4(三)实用价值............................................................................4二、界面设计......................................................................................5(一)界面操作............................................................................5(二)界面设计方案......................................................................6三、收获与体会................................................................................13四、参考文献....................................................................................143摘要随着经济的发展,社会竞争的激烈,现在社会进入了竞争的时代。上班族为了完成公司业务,每天超负荷的工作;学生为了不落后他人每天早起晚睡不断地学习,压力巨大。所以为了缓解大家的压力,使大家在工作、学习之余娱乐一下,活跃大脑,提高工作、学习效率,因此益智性游戏越来越受人们的关注,五子棋作为益智类游戏之一,倍受人们的喜爱,所以对于五子棋的开发也有了很多关注。本文主要讲的是利用VC++6.0软件开发一个界面简洁、直观、实用性比较高的AI功能的五子棋游戏,游戏程序实现人机对弈,在对弈过程中当用户和电脑比赛时电脑利用搜索算法计算出落子的最佳位置,是先人机对弈,而且程序能够完成具有重新开始游戏、判断胜负、判断落子等功能。关键词:人工智能,自动处理,人机博弈,五子棋4一、系统功能简述(一)系统功能简介我们小组的设计项目为五子棋小游戏。该设计的系统的功能比较简单,共拥有人人对战与人机对战功能模式。该游戏默认玩家1执白子先行,棋子智能落在棋格交叉处,白子黑子交替下落。因此。人机对战中也是默认由玩家执白子先行,计算机执黑子后行。(二)开发环境该项目的开发环境是VC++6.0,使用这款开发软件我们力求做到界面简洁、直观、实用性比较高。同时也是因为该软件我们比较熟悉,比较容易上手。(三)实用价值五子棋小游戏能作为同学老师业余时间放松之乐,同时也让我们拥有了一次项目的实际操作经验。该款游戏AI比较高,需要我们经过较多思考才能将其打败。5二界面设计(一)界面操作双击.exe文件进入游戏选择界面可以选择人人对战或人机对战或退出游戏。如图2.1所示图2.1选择一个玩法后,点确定后,进入游戏界面,便可以开始游戏。在想落子的地方点击鼠标左键即可。如图2.2所示图2.2点击游戏菜单还可以选择等级、从新开始或退出,如图2.3所示:6图2.3(二)界面设计方案MFC的窗口更适合小型游戏的界面。五子棋可以说是再简单不过的小游戏了,不过其中确包含了大量的函数实现游戏的正常运转。所以我们小组选择用MFC来做界面设计。当然理想与现实是有差距的,每件事计划时很容易,做起来会发现有各种错误,以致本来想做一个好看的并且好用的界面,到最后只能力求简洁直观。若要游戏顺利进行,则必须要有程序约束游戏规则。因此本游戏要解决以下这些问题:棋子所放位置的判断;棋子颜色的区分;以及玩家的输赢。解决了这些问题,玩家便可以进行一场二人大战了。棋子所放位置的判断是在函数:voidCWuziqitestView::OnLButtonDown(UINTnFlags,CPointpoint)中MFC自己显示的point进行转化为数组中位置确定。棋子颜色的区分:用一个变量m_White来确定当他等于0是下白子,不等于0时下黑子。落子则可以用一个函数:voidCWuziqitestView::DrawBlack(CDC*pDC,inti,intj)画出来。完成了落子以后,需要在最新落子上做个标记,以便玩家寻找最新落子,进行攻防转换。我们可以用这样的一个函数:voidCWuziqitestView::DrawMark(CDC*pDC,intx,inty)画一个标记。但是需注意,每下一个子后画一个标记,并在下下一个子,用上一个棋子将mark覆盖。本游戏可以让两个玩家(或一个玩家一个电脑)在标准的五子棋盘上进行游戏,最先连成五子者,游戏可以显示哪一方获胜。7三收获与体会首先我对本次的课程设计,我认为这次的重点便是人工智能算法的研究,发现电脑不是我们想象当中的那么好,其实电脑是很笨的,当我们给了他一个很好的算法之后,他就变得很聪明了,而算法的精髓在与数学和计算机的完美结合,一个好的算法可以解决很多很大的问题。算法的世界很广,一个优秀的程序员是不够的,要懂得很多很好的算法才能让我们的代码更有价值。通过这门课的学习能够更好地掌握算法设计与分析的理论部分的内容,同时将理论运用于实践,提高综合应用算法设计的能力,通过分析算法进而对算法进行优化。经过这一阶段的训练,使学生得到抽象能力、演绎推理能力、综合概括能力的提高。对于本次的课程设计,我要感谢很多的老师和同学,在他们的帮助我顺利的完成了本次的课程设计。首先是算法设计的老师,他讲课的方式很不一样,使得我每次上他的课都格外的认真。他总是给我们仔细的讲解各个知识点,然后给我们提供其他的参考资料,让我们下了课以后方便自己学习。还有就是我这次的课程设计指导老师,我们有什么问题直接找他,他总是可以帮我们解决。还有就是我的几个同学,在编辑程序的方便,他们给了我很多的帮助,帮助我讲解很多程序的编写格式。总之,谢谢大家的帮助。8四参考文献[1]《VC++实用教程》,2012,郑阿奇,电子工业出版社[2]《计算机算法设计与分析》,2012,王晓东,电子工业出版社[3]《数据结构》,2010,吴伟民,清华大学出版社