




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
五子棋游戏项目实习报告报告人: 小组其他成员: 日期: 目 录摘 要.3 一、系统功能简述.4(一)系统功能.4(二)开发环境.4(三)实用价值4二、界面设计5(一)界面操作5 (二)界面设计方案.6三、系统模块、函数划分.7(一)模块划分.7(二)函数划分.7 (三)主功能函数开发.94、 收获与体会.135、 参考文献.14 摘 要随着经济的发展,社会竞争的激烈,现在社会进入了竞争的时代。上班族为了完成公司业务,每天超负荷的工作;学生为了不落后他人每天早起晚睡不断地学习,压力巨大。所以为了缓解大家的压力,使大家在工作、学习之余娱乐一下,活跃大脑,提高工作、学习效率,因此益智性游戏越来越受人们的关注,五子棋作为益智类游戏之一,倍受人们的喜爱,所以对于五子棋的开发也有了很多关注。本文主要讲的是利用VC+6.0软件开发一个界面简洁、直观、实用性比较高的AI功能的五子棋游戏,游戏程序实现人机对弈,在对弈过程中当用户和电脑比赛时电脑利用搜索算法计算出落子的最佳位置,是先人机对弈,而且程序能够完成具有重新开始游戏、判断胜负、判断落子等功能。 关键词:人工智能,自动处理,人机博弈,五子棋一、系统功能简述(一)系统功能简介我们小组的设计项目为五子棋小游戏。该设计的系统的功能比较简单,共拥有人人对战与人机对战功能模式。该游戏默认玩家1执白子先行,棋子智能落在棋格交叉处,白子黑子交替下落。因此。人机对战中也是默认由玩家执白子先行,计算机执黑子后行。(二)开发环境该项目的开发环境是VC+6.0,使用这款开发软件我们力求做到界面简洁、直观、实用性比较高。同时也是因为该软件我们比较熟悉,比较容易上手。(三)实用价值五子棋小游戏能作为同学老师业余时间放松之乐,同时也让我们拥有了一次项目的实际操作经验。该款游戏AI 比较高,需要我们经过较多思考才能将其打败。二 界面设计(一)界面操作双击.exe文件进入游戏选择界面可以选择人人对战或人机对战或退出游戏。如图2.1所示图2.1选择一个玩法后,点确定后,进入游戏界面,便可以开始游戏。在想落子的地方点击鼠标左键即可。如图2.2所示图2.2点击游戏菜单还可以选择等级、从新开始或退出,如图2.3所示:图2.3(二)界面设计方案MFC的窗口更适合小型游戏的界面。五子棋可以说是再简单不过的小游戏了,不过其中确包含了大量的函数实现游戏的正常运转。所以我们小组选择用MFC来做界面设计。当然理想与现实是有差距的,每件事计划时很容易,做起来会发现有各种错误,以致本来想做一个好看的并且好用的界面,到最后只能力求简洁直观。若要游戏顺利进行,则必须要有程序约束游戏规则。因此本游戏要解决以下这些问题:棋子所放位置的判断;棋子颜色的区分;以及玩家的输赢。解决了这些问题,玩家便可以进行一场二人大战了。棋子所放位置的判断是在函数:void CWuziqitestView:OnLButtonDown(UINT nFlags, CPoint point) 中MFC自己显示的point进行转化为数组中位置确定。棋子颜色的区分:用一个变量m_White来确定当他等于0是下白子,不等于0时下黑子。落子则可以用一个函数:void CWuziqitestView:DrawBlack(CDC *pDC, int i, int j)画出来。完成了落子以后,需要在最新落子上做个标记,以便玩家寻找最新落子,进行攻防转换。我们可以用这样的一个函数:void CWuziqitestView:DrawMark(CDC *pDC, int x, int y)画一个标记。但是需注意,每下一个子后画一个标记,并在下下一个子,用上一个棋子将mark覆盖。本游戏可以让两个玩家(或一个玩家一个电脑)在标准的五子棋盘上进行游戏,最先连成五子者,游戏可以显示哪一方获胜。三 系统模块/函数划分(一)模块划分该项目主要分为三个模块:MFC界面模块; 人人对战模块; 人机对战模块;(二)函数划分1. Computer_Think_Nomal1() /人机对战困难难度的主函数2. ComputerThink3(int pos1, int pos2) /人机对战简单难度的主函数,参数是刚落子点的横纵坐标3. DrawBlack(CDC *pDC, int i, int j) /在指定位置画黑子的函数4. DrawWhite(CDC *pDC, int i, int j) /在指定位置画白子的函数5. DrawMark(CDC *pDC, int x, int y)/在刚落子点上进行标记识别的 函数6. maxx(int a, int b, int c, int d) /四个分值取最大值的函数,在困难难度中需要调用8. maxx(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l) /12个分值取最大值的函数,在困难难度中需要调用9. maxx(int a, int b) /两个分值取最大值的函数,在困难难度中需要调用10. OnDraw(CDC* pDC) /对整个棋盘和背景进行绘制的函数11. OnLButtonDown(UINT nFlags, CPoint point)/左键响应函数,对在棋盘上的点击进行响应12. OnLevel() /该函数将对话框中选择的难度调用到主函数中13. OnRestart() /菜单中的重新开始游戏按钮14. random(int i, int j) /完成在落子周围8个位置随机放置的功能15. RENJI(CPoint point3) /该函数完成了选择人机对战后的各项操作16. RENREN(CPoint point2) /该函数完成了选择人人对战后的各项操作17. reset() /将所有数据重置,重新开始游戏18. Win() /判断是否已经形成五子连珠即已经结束(三)主功能函数开发在本次项目中,我主要负责游戏的整体架构开发以及部分主功能函数的开发。游戏开发之初,经过小组的讨论我们决定使用MFC开发界面,简介明了。我参与开发了一下几个主功能函数:3.3.1 Win函数的实现Win函数是用来判断棋盘上是否已经形成五子连珠,即比赛已经结束的函数。该函数需要对棋盘进行遍历,对每一个子的四个方向进行判断是否有五个连子,四个方向分别为南北向,东西向,东北斜向和东南斜向。STEP 1: 对棋盘进行遍历 采用两个for循环语句for(i=0;i16;i+)for(j=0;j=0,ccount0;n-,ccount-)3.3.2 random函数的实现Random函数是基于人机对战电脑简单难度中的子函数,该函数的功能是电脑在人刚落子的点的周围八个点随机落子,该函数是建立在视图类当中的子类函数,参数即为人刚落子点的横坐标和纵坐标,返回一个CPoint 类的对象point.。函数的核心思想是取三个随即生成的数(奇偶的可能性相同),每个数判断奇偶有两种情况,三个数排列组合就有8种情况,概率相同的这8种情况就可以看成刚落子周围8个点的情况。STEP 1: 随机生成三个数 bx=rand()%4+0; by=rand()%4+0; bz=rand()%4+0;STEP 2: 判断8种可能性 if(bx%2=0&by%2=0&bz%2=0) else if(bx%2=0&by%2!=0&bz%2=0) else if(bx%2!=0&by%2=0&bz%2=0) STEP 3: 根据八种可能性返回8个不同的点3.3.3 ComputerThink3函数的实现ComputerThink3函数是实现人机对战简单难度的主函数,该函数功能是达到逢三就堵,要是没有三个连字就调用上面介绍过的Random函数,在刚落子的周边8个点随机下一个子。函数的参数即为刚下子点的横纵坐标,返回一个CPoint 类的对象point.。该函数的核心在于实现逢三就堵。要实现逢三就堵,每走一步都要对棋盘进行一次遍历,对每一个子的四个方向进行判断是否有三个连子,四个方向分别为南北向,东西向,东北斜向和东南斜向。STEP 1: 对棋盘进行遍历 采用两个for循环语句for(i=0;i16;i+) for(j=0;j=0,ccount0;n-,ccount-) 3.3.4 Computer_Think_Nomal1()函数功能的实现Computer_Think_Nomal1()函数实现了人机对战中电脑困难难度的功能,该函数不仅能做到防守上一定的难度,也会优先考虑电脑自身获胜的可能,达到了一定的人工智能。该函数的主要构想是采用计分的方法,对每一个子进行遍历,四个方向中,先对白子进行计分,有一个连字就加5分,当已经形成死四(即白方已经有四子连珠并且两边都没发堵)加2分,每一个点都有自己的分值,记为该点的防守分值。对每一个子进行遍历,四个方向中,再对黑子进行计分,有一个连字就加5分,当已经形成死四(即黑方已经有四子连珠并且两边都没发堵)加2分,每一个点都有自己的分值,记为该点的进攻分值。取所有分值最高的点,改点既为电脑将走得点,并且根据是防守还是进攻下白子或黑子。STEP 1:定义进攻和防守四个方向的计分二维数组 sco1_neswij=0; sco1_nsij=0; sco1_nwseij=0; sco1_weij=0; sco2_neswij=0; sco2_nsij=0; sco2_nwseij=0; sco2_weij=0;STEP 2:对棋盘进行遍历 for(i=0;i16;i+) for(j=0;j16;j+)STEP 3:对每一点进行计分 sco1_nwseij+=5 sco1_nwseij+=2STEP 4:取最大分值,并且记下改点 sco_nsij=maxx(sco1_nsij,sco2_nsij); sco_neswij=maxx(sco1_neswij,sco2_neswij); point.x=max_x; point.y=max_y;STEP 5:返回该点四 收获与体会经过这次项目实际操作以后,我充分了解了团队合作的含义。在我们一个团队中,没有一个人能胜任所有的工作。比如曹西梦同学对MFC比较了解,所以她主要负责界面开发;我和高炜同学对算法的研究比较深入,所以我们主要负责了主功能函数开发。团队
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年耐低温胶项目申请报告
- 2025年镭矿项目规划申请报告模板
- 智能建筑消火栓系统施工方案及技术措施
- 同学聚会请朋友吃饭邀请函范文
- 810nm与670nm激光对白色念珠菌作用的体外对比探究:机制与效果剖析
- 2025年中国织物制手套行业发展趋势预测及投资战略咨询报告
- 2025年中国PID温控仪行业投资分析及发展战略咨询报告
- 2025年中国互联网+猪市场运营态势分析及投资前景预测报告
- 2025年中国中型载货汽车行业市场发展前景及发展趋势与投资战略研究报告
- 2025年中国煤矿监控行业市场全景监测及投资前景展望报告
- UL1741标准中文版-2020逆变器变流器断路器UL标准中文版
- 无人机在坦克战中的火力支援研究-洞察分析
- 四川省树德中学2025届高三下学期一模考试数学试题含解析
- 医用耗材集中配送方案
- 农村个人土地承包合同模板
- 医院规范肿瘤化疗制度
- 2023年人教版四4年级下册数学期末解答质量检测试卷(含答案)
- 审计应知应会知识题库及答案(共341题)
- 野生艾草收购合同范本
- PC工法桩专项施工方案-
- 老年人慢性病管理的最佳实践
评论
0/150
提交评论