五子棋游戏双人对战版软件设计Word下载.docx
- 文档编号:15943414
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:21
- 大小:364.37KB
五子棋游戏双人对战版软件设计Word下载.docx
《五子棋游戏双人对战版软件设计Word下载.docx》由会员分享,可在线阅读,更多相关《五子棋游戏双人对战版软件设计Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
第一章五子棋双人对战版软件问题描述
1.1五子棋的相关介绍
1.1.1五子棋的简介
五子棋是一种两人对弈的纯策略型棋类游戏,棋具与围棋通用,是起源于中国古代的传统黑白棋种之一。
发展于日本,流行于欧美。
容易上手,老少皆宜,而且趣味横生,引人入胜;
不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
1.1.2五子棋规则
无禁手玩法:
黑先白后,谁先连五谁胜。
禁手玩法:
黑先行棋,黑棋只能走冲四活三胜,黑双活三禁手双冲四禁手四三三禁手四四三禁手六连长连禁手;
白后手,白棋无任何禁手,还可以抓黑棋的禁手点取胜。
职业规则玩法:
三手交换五手两打,黑棋有禁手,意思是下到第三手棋执白方有权选择交换下黑棋或者继续行棋,下到第五手时执黑方给出两个打点让执白方选择去掉一个打点下剩下的打点。
1.2五子棋双人对战版软件
1.2.1软件设计思想
人对人游戏,其实只是对游戏规则的实现,我们只是利用五子棋游戏的规则以及五子棋的经典算法来编程,这些规则和算法,我们将用相应的函数来实现。
一个优秀的游戏软件必须有一个正确的设计思想通过合理地选择数据结构、操作系统以及开发环境构成一个完善的体系结构才能充分发挥计算机应用的优势。
根据游戏玩家的实际需求本系统的设计按照下述原则进行:
实用性、先进性、高可靠性、可维护性、可扩展性及灵活性、智能性。
第二章五子棋双人对战实现的算法分析
2.1传统五子棋算法介绍及初步实现
2.1.1估值函数
不同的棋型,其优先级不同。
例如,四个棋子连成一线且还能继续落子的棋型(活四)显然要比只有三个棋子连成一线(活三或死三)好。
要使计算机正确地做出这种判断,就要把第一种棋型的估值设高。
事实上,对于每一种特定的棋型,都需要相应的估值来反映其优劣情况。
另外,由于搜索模块频繁地调用估值函数,为了尽可能地加快搜索速度,估值函数应设计的越仔细越好。
估值时,需要从四个方向上来考虑所下棋子对当前盘面的影响。
这个方向分别是以该棋子为出发点,水平、竖直和两条为45度角和135度角的线。
为方便分析棋盘上的格局,本文中约定以“A”代表黑子,“B”代表白子,“?
”代表棋盘上空位。
算法中关于棋子死活的规定如下:
一方落子后,它的落子连成的一条线有两条不损伤的出路,则称该棋型是活的。
否则称该棋型是死的。
比如关于活三的定义:
不论对手如何落子,仍然至少有一种方法可以冲四。
因此,B?
AAA?
B中的三个A,不能算是活三;
B?
?
B中的三A,也不是活三,尽管它有可能成为活四。
这样,棋型的估值设计才能比较细致。
本文算法对特定棋型的估值如表1所示。
表一:
特定棋型的估值
2.1.2Alpha–Beta搜索
在博弈问题中,每一个格局可供选择的行动方案都有很多,因此会生成十分庞大的博弈树。
一般地只生成一定深度的博弈树,然后进行极小极大搜索。
极大极小搜索是指:
在一棵博弈树中,当轮到甲走时,甲定会选择子节点值最大的走法;
而轮到乙走时,乙则会选择子节点值最小的走法[3]。
使用估值函数对博弈树的每一个局面进行估值后,就可以通过极大极小搜索在博弈树中寻找最佳的合法走法。
在极大极小搜索的过程中,存在着一定程度的数据冗余。
如图1左半部所示的一棵极大极小树的片断。
其中节点下方数字为该节点的值,方形框节点代表计算机走,圆形框节点代表人走。
A节点表示计算机走,由于A是极大值点,根据极小极大搜索原理它要从B和C当中选最大的值。
假设目前已经通过估值得出B为18,当搜索C节点时,因为C是该人走,所以根据极小极大搜索原理要从D、E、F中选取最小的值。
此时如果估出D为16,那么C的值必小于或等于16。
又因为已经得出B的值为18,说明节点A的值为Max(B,C)=18,也就是说无须求出节点C的其他子节点如E、F的值就可以得出父节点A的值。
这种将节点D的后继兄弟节点剪去的方法称为Alpha剪枝。
同理,在图1右半部一棵极大极小树的片段中,将节点D的后继兄弟节
点剪去称为Beta剪枝。
图1Alpha-Beta剪枝
将Alpha剪枝和Beta剪枝加入极大极小搜索,就得到Alpha-Beta搜索算法,该算法描述如下:
intAlphaBeta(intdepth,intalpha,intbeta)
{
ifdepth为0,说明当前节点是叶子节点then返回对当前棋局的估值
else
while还存在可能的走法
走一步棋,从对手角度进行-AlphaBeta(depth-1,-beta,-alpha)的递归搜索,记录返回值为val
撤消刚才走的一步
若val大于等于beta,则返回beta的值
若val大于alpha,则修改alpha的值为val
}
endwhile
endif
返回alpha
其中depth记录搜索的深度,alpha记录搜索到的最好的值,beta记录对于对手来说最坏的值。
如果INFINITY表示无穷大,则AlphaBeta(3,-INFINITY,INFINITY)表示完成一次3层的搜索。
2.1.3胜负判断
在棋局的胜负是根据最后一个落子的情况来判断的。
此时需要查看四个方向,即以该棋子为出发点的水平,竖直和两条分别为45度角和135度角的线,看在这四个方向上的其它棋子是否能和最后落子构成连续五个棋子,如果能的话,则表示这盘棋局已经分出胜负。
实际上,我们可以提前若干步预判当前棋局的胜负情况。
本文算法采用了如下的规则对胜负进行预判,提高了算法的智能。
在甲和乙对弈的棋局中,某个时刻轮到甲下棋时几种可能获胜的情况:
甲已有任意组活四,或者甲已有任意组死四:
一步获胜
甲已有任意组活三,或者甲已有多于一组的死三:
两步获胜
甲已有一组死三和任意组的活二:
三步获胜
2.2五子棋算法的优化
到目前为止,我们使用传统的Alpha-Beta搜索结合估值函数的五子棋算法完成一个简单的五子棋对弈程序。
虽然估值尽力做到细致、全面,但由于Alpha-Beta搜索存在博弈树算法中普遍存在的一个缺点—随着搜索层数的增加,算法的效率大大下降。
所以搜索的效率还是不理想,五子棋程序的“智力”也不高。
因此,在上述基础上,我们继续研究,通过对Alpha-Beta搜索算法的优化与修正,针对五子棋本身的特点和规律,提出采取以下优化措施,显著地提高了五子棋程序对弈的水平和能力。
2.2.1减少搜索范围
五子棋棋盘大小为15×
15,传统算法中计算机每走一步都要遍历整个棋盘,对于棋面上所有空位都进行试探性下子并估值,这样大大影响算法的效率。
其实在某个时刻,棋盘上很多的位置都是可以不用去考虑的。
2.2.2设置下棋风格
对一个落子估值的时候,首先在己方的角度对其进行评估,获得一个返估值Value_Me;
随后在对手的角度再进行一次评估,获得一个估值Value_Enemy;
通过Value=K1*Value_Me+K2*Value_Enemy而获得最终的估值结果。
其中K1和K2是一对关键系数,当K1/K2越大的时候,就表示计算机落子的攻击性更强,反之则表示计算机落子考虑较多的是阻断对方的落子,防守性更强些。
K1、K2的值可以由玩家设定,也可以由计算机根据当前棋面自己决定。
与传统算法相比,这样得到的五子棋程序更加智能。
2.2.3增大搜索层数
理想状态下,为了尽可能提高计算机下棋的“智力”,搜索层数应该越大越好。
实际上,由于博弈树异常庞大,搜索层数的增加将会导致算法的效率大大下降。
搜索层数。
根据已有的资源条件,最有效地进行搜索。
2.2.4使用置换表
在Alpha-Beta搜索过程中,为了避免重复搜索已经搜索过的节点,加快搜索速度,可以使用一张表格记录每一节点的搜索结果,对任意节点向下搜索之前先察看记录在表中的这些结果。
如果将要搜索的某个节点在表中已有记录,就直接利用记录下来的结果。
我们称这种方法为置换表(TranspositionTable,简称TT)。
2.2.5启发式搜索
五子棋游戏开局阶段有很多“定式”。
将“定式”的格局及其走法当成棋谱保存在数据库中,若发现当前格局存在于棋谱中,则我们不需要搜索,直接按照棋谱下棋,即利用棋谱进行启发式搜索,这样便加快了搜索的速度。
该方法的关键是棋谱的模糊匹配以及棋谱的存储结构。
第三章需求分析报告
3.1介绍
3.1.1目的
软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的关键一步。
对于任何一个软件而言,需求分析工作都是至关重要的一步。
只有通过软件需求分析,才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件开发的基础。
实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的成败。
软件需求分析的任务是:
让用户和开发者共同明确将要开发的是一个什么样的软件。
具体而言,就是通过对问题及其环境的理解、分析和综合,建立逻辑模型,完成新软件的逻辑方案设计。
用户及其开发人员,管理人员通过阅读这份需求分析规格说明书能够了解本系统的开发目的,开发方法以及目前的硬件和软件的情况和开发所需资金和设备,概要设计说明书和完成后续设计与开发工作将在此基础上进一步提出。
3.1.2文档约定
此文档的书写大标题是二号加粗宋体,小标题是四号加粗宋体,正文是小四宋体,1.5倍行距。
画图为Visio画图。
3.1.3面向的读者和阅读建议
预期的读者相关开发人员,项目经理,营销人员,用户,测试人员,管理人员等。
建议序列读取文件,开始的概述部分,然后继续阅读每一类读者相关的部分或者关注的部分。
3.1.4参考文献
3.2整体描述
该课程设计在设计与实验过程中需要在windowsXP系统/windows2000以上系统中进行,程序设计要求在visualC++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。
本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:
操作系统:
windowsxp
软件环境:
安装VC++6.0
3.2.1功能需求
游戏说明:
游戏开始时,由红子开局,将一枚棋子落在棋盘一坐标上,然后由黑子落子,如此轮流下子,直到某一方首先在棋盘的竖、横或斜三方向上的五子连成线,则该方该局获胜;
选择是否继续下一盘游戏,若继续则重复以上操作,若否则游戏结束。
1、功能列表如下:
a)输出棋盘;
b)显示用户行程;
c)判断每局游戏输赢。
d)判断是否进行下一局。
e)退出游戏。
用例图
2、功能描述
(1)棋盘是19*19的方格棋盘。
(2)红子先下,黑子后下,两者交替下子。
(3)出现五子相连时则该用户赢。
3.2.2性能需求
1、技术可行性
运用Windows2000/XP以上的操作系统,SQLSERVER2000的数据库技术,开发以WindowsXP为用户的操作平台,界面友善、功能齐全的《五子棋双人对战小游戏》。
2、经济可行性
一方面,新系统中棋盘界面和更强劲的功能支持,不仅增加了游戏的趣味性,而且使游戏者更尽兴;
另一方面系统开发成本低,现有PC机即可提供该系统开发工作需
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋 游戏 双人 软件设计