五子棋游戏(双人对战版)软件设计

上传人:m**** 文档编号:511345474 上传时间:2023-04-07 格式:DOC 页数:27 大小:555KB
返回 下载 相关 举报
五子棋游戏(双人对战版)软件设计_第1页
第1页 / 共27页
五子棋游戏(双人对战版)软件设计_第2页
第2页 / 共27页
五子棋游戏(双人对战版)软件设计_第3页
第3页 / 共27页
五子棋游戏(双人对战版)软件设计_第4页
第4页 / 共27页
五子棋游戏(双人对战版)软件设计_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《五子棋游戏(双人对战版)软件设计》由会员分享,可在线阅读,更多相关《五子棋游戏(双人对战版)软件设计(27页珍藏版)》请在金锄头文库上搜索。

1、2012-2013学年第1学期“软件工程”课程设计报告学院系信息工程学院计算机科学系专业计算机科学与技术班级项目名称五子棋游戏(双人对战版)软件设计组长小组成员主要负责完成软件的测试模块主要负责完成界面设计以及源代码的编写与调试主要负责完成数据结构设计以及源代码的编写与调试主要负责完成的功能设计以及源代码的编写与调试主要负责完成软件的问题描述和算法分析部分以及报告的整合主要负责完成软件的需求分析模块目录第一章 五子棋双人对战版软件问题描述31.1 五子棋的相关介绍31.1.1 五子棋的简介31.1.2 五子棋规则31.2 五子棋双人对战版软件41.2.1 软件设计思想4第二章 五子棋双人对战实

2、现的算法分析42.1传统五子棋算法介绍及初步实现42.1.1 估值函数42.1.2 AlphaBeta 搜索52.1.3 胜负判断72.2 五子棋算法的优化72.2.1 减少搜索范围72.2.2 设置下棋风格82.2.3 增大搜索层数82.2.4 使用置换表82.2.5 启发式搜索8第三章 需求分析报告93.1 介绍93.1.1 目的93.1.2 文档约定93.1.3 面向的读者和阅读建议93.1.4 参考文献103.2 整体描述103.2.1 功能需求103.2.2 性能需求113.2.3 数据流图123.3 系统特点123.3.1 系统特点123.3.2 系统功能123.4 外部接口需求1

3、33.4.1 用户界面133.4.2 硬件接口133.4.3 软件界面133.5 其他非功能需求133.5.1 系统交付日期133.5.2 系统需求133.6 软件总流程图14第四章 设计与实现154.1 基本设计概念和处理流程154.2 结构154.3 功能设计164.3.1 软件的基本功能设计164.3.2 软件的附加功能设计164.4 接口设计164.4.1 用户接口164.4.2 外部接口174.4.3 内部接口174.5 界面设计174.5.1 界面设计运用的主要方法174.6 系统数据结构设计194.6.1 逻辑结构和物理结构设计要点194.6.2 数据结构与程序的关系214.7

4、系统出错处理设计224.8 软件运行结果22第五章 测试255.1 黑盒测试25第一章 五子棋双人对战版软件问题描述1.1 五子棋的相关介绍1.1.1 五子棋的简介 五子棋是一种两人对弈的纯策略型棋类游戏,棋具与围棋通用,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。1.1.2 五子棋规则无禁手玩法:黑先白后,谁先连五谁胜。禁手玩法:黑先行棋,黑棋只能走冲四活三胜,黑双活三禁手 双冲四禁手 四三三禁手 四四三禁手 六连长连禁手;白后手,白棋无任何禁手,还可以抓黑棋的禁手点取胜。

5、 职业规则玩法:三手交换五手两打,黑棋有禁手,意思是下到第三手棋执白方有权选择交换下黑棋或者继续行棋,下到第五手时执黑方给出两个打点让执白方选择去掉一个打点下剩下的打点。1.2 五子棋双人对战版软件1.2.1 软件设计思想人对人游戏,其实只是对游戏规则的实现,我们只是利用五子棋游戏的规则以及五子棋的经典算法来编程,这些规则和算法,我们将用相应的函数来实现。一个优秀的游戏软件必须有一个正确的设计思想通过合理地选择数据结构、操作系统以及开发环境构成一个完善的体系结构才能充分发挥计算机应用的优势。根据游戏玩家的实际需求本系统的设计按照下述原则进行:实用性、先进性、高可靠性、可维护性、可扩展性及灵活性

6、、智能性。第二章 五子棋双人对战实现的算法分析2.1传统五子棋算法介绍及初步实现2.1.1 估值函数不同的棋型,其优先级不同。例如,四个棋子连成一线且还能继续落子的棋型(活四)显然要比只有三个棋子连成一线(活三或死三)好。要使计算机正确地做出这种判断,就要把第一种棋型的估值设高。事实上,对于每一种特定的棋型,都需要相应的估值来反映其优劣情况。另外,由于搜索模块频繁地调用估值函数,为了尽可能地加快搜索速度,估值函数应设计的越仔细越好。估值时,需要从四个方向上来考虑所下棋子对当前盘面的影响。这个方向分别是以该棋子为出发点,水平、竖直和两条为45 度角和135 度角的线。为方便分析棋盘上的格局,本文

7、中约定以“A”代表黑子,“B”代表白子,“?”代表棋盘上空位。算法中关于棋子死活的规定如下:一方落子后,它的落子连成的一条线有两条不损伤的出路,则称该棋型是活的。否则称该棋型是死的。比如关于活三的定义:不论对手如何落子,仍然至少有一种方法可以冲四。因此,B?AAA? B 中的三个A,不能算是活三;B?AAA?B 中的三A,也不是活三,尽管它有可能成为活四。这样,棋型的估值设计才能比较细致。本文算法对特定棋型的估值如表1 所示。表一:特定棋型的估值2.1.2 AlphaBeta 搜索在博弈问题中,每一个格局可供选择的行动方案都有很多,因此会生成十分庞大的博弈树。一般地只生成一定深度的博弈树,然后

8、进行极小极大搜索。极大极小搜索是指:在一棵博弈树中,当轮到甲走时,甲定会选择子节点值最大的走法;而轮到乙走时,乙则会选择子节点值最小的走法3。使用估值函数对博弈树的每一个局面进行估值后,就可以通过极大极小搜索在博弈树中寻找最佳的合法走法。在极大极小搜索的过程中,存在着一定程度的数据冗余。如图1 左半部所示的一棵极大极小树的片断。其中节点下方数字为该节点的值,方形框节点代表计算机走,圆形框节点代表人走。A 节点表示计算机走,由于A 是极大值点,根据极小极大搜索原理它要从B 和C 当中选最大的值。假设目前已经通过估值得出B 为18,当搜索C 节点时,因为C 是该人走,所以根据极小极大搜索原理要从D

9、、E、F 中选取最小的值。此时如果估出D 为16,那么C 的值必小于或等于16。又因为已经得出B 的值为18,说明节点A 的值为Max(B,C)=18,也就是说无须求出节点C 的其他子节点如E、F 的值就可以得出父节点A 的值。这种将节点D的后继兄弟节点剪去的方法称为Alpha 剪枝。同理,在图1右半部一棵极大极小树的片段中,将节点D 的后继兄弟节点剪去称为Beta 剪枝。图1 Alpha-Beta 剪枝将Alpha 剪枝和Beta 剪枝加入极大极小搜索,就得到Alpha-Beta 搜索算法,该算法描述如下:int AlphaBeta(int depth, int alpha, int bet

10、a)if depth 为0,说明当前节点是叶子节点then返回对当前棋局的估值elsewhile 还存在可能的走法走一步棋,从对手角度进行-AlphaBeta(depth-1,-beta,-alpha)的递归搜索,记录返回值为val撤消刚才走的一步若 val 大于等于beta,则返回beta 的值若 val 大于alpha,则修改alpha 的值为valend whileend if返回 alpha其中depth 记录搜索的深度,alpha 记录搜索到的最好的值,beta 记录对于对手来说最坏的值。如果INFINITY 表示无穷大,则AlphaBeta(3, -INFINITY, INFINI

11、TY)表示完成一次3层的搜索。2.1.3 胜负判断在棋局的胜负是根据最后一个落子的情况来判断的。此时需要查看四个方向,即以该棋子为出发点的水平,竖直和两条分别为45 度角和135 度角的线,看在这四个方向上的其它棋子是否能和最后落子构成连续五个棋子,如果能的话,则表示这盘棋局已经分出胜负。实际上,我们可以提前若干步预判当前棋局的胜负情况。本文算法采用了如下的规则对胜负进行预判,提高了算法的智能。在甲和乙对弈的棋局中,某个时刻轮到甲下棋时几种可能获胜的情况:甲已有任意组活四,或者甲已有任意组死四:一步获胜甲已有任意组活三,或者甲已有多于一组的死三:两步获胜甲已有一组死三和任意组的活二:三步获胜2

12、.2 五子棋算法的优化 到目前为止,我们使用传统的Alpha-Beta 搜索结合估值函数的五子棋算法完成一个简单的五子棋对弈程序。虽然估值尽力做到细致、全面,但由于Alpha-Beta 搜索存在博弈树算法中普遍存在的一个缺点随着搜索层数的增加,算法的效率大大下降。所以搜索的效率还是不理想,五子棋程序的“智力”也不高。 因此,在上述基础上,我们继续研究,通过对Alpha-Beta搜索算法的优化与修正,针对五子棋本身的特点和规律,提出采取以下优化措施,显著地提高了五子棋程序对弈的水平和能力。2.2.1 减少搜索范围五子棋棋盘大小为1515,传统算法中计算机每走一步都要遍历整个棋盘,对于棋面上所有空

13、位都进行试探性下子并估值,这样大大影响算法的效率。其实在某个时刻,棋盘上很多的位置都是可以不用去考虑的。2.2.2 设置下棋风格对一个落子估值的时候,首先在己方的角度对其进行评估,获得一个返估值Value_Me;随后在对手的角度再进行一次评估,获得一个估值Value_Enemy;通过Value = K1 *Value_Me + K2 * Value_Enemy 而获得最终的估值结果。其中K1 和K2 是一对关键系数,当K1 / K2 越大的时候,就表示计算机落子的攻击性更强,反之则表示计算机落子考虑较多的是阻断对方的落子,防守性更强些。K1、K2 的值可以由玩家设定,也可以由计算机根据当前棋面

14、自己决定。与传统算法相比,这样得到的五子棋程序更加智能。2.2.3 增大搜索层数理想状态下,为了尽可能提高计算机下棋的“智力”,搜索层数应该越大越好。实际上,由于博弈树异常庞大,搜索层数的增加将会导致算法的效率大大下降。搜索层数。根据已有的资源条件,最有效地进行搜索。2.2.4 使用置换表在Alpha-Beta 搜索过程中,为了避免重复搜索已经搜索过的节点,加快搜索速度,可以使用一张表格记录每一节点的搜索结果,对任意节点向下搜索之前先察看记录在表中的这些结果。如果将要搜索的某个节点在表中已有记录,就直接利用记录下来的结果。我们称这种方法为置换表(Transposition Table,简称TT

15、)。2.2.5 启发式搜索五子棋游戏开局阶段有很多“定式”。将“定式”的格局及其走法当成棋谱保存在数据库中,若发现当前格局存在于棋谱中,则我们不需要搜索,直接按照棋谱下棋,即利用棋谱进行启发式搜索,这样便加快了搜索的速度。该方法的关键是棋谱的模糊匹配以及棋谱的存储结构。第三章 需求分析报告3.1 介绍3.1.1 目的软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的关键一步。对于任何一个软件而言,需求分析工作都是至关重要的一步。只有通过软件需求分析,才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件开发的基础。实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的成败。软件需求分析的任务是:让用户和开发者共同明确将要开发的是一个什么样的软件。具体而言,就是通过对问题及其环境的理解、分析和综合,建立逻辑模型,完成新软件的逻辑方案设计。用户及其开发人员,管理人员通过阅读这份需求分析规

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号