您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > 五子棋概要设计说明书
五子棋概要设计说明书目录1引言………………………………………………………………………………11.1编写说明…………………………………………………………………11.2背景………………………………………………………………………11.3定义………………………………………………………………………11.4参考文献…………………………………………………………………12总体设计…………………………………………………………………………12.1需求规定…………………………………………………………………12.2运行环境…………………………………………………………………22.3基本设计概念和处理流程………………………………………………22.4结构………………………………………………………………………32.5功能需求与程序的关系…………………………………………………42.6尚未解决的问题…………………………………………………………43接口设计………………………………………………………………………53.1用户接口…………………………………………………………………53.2外部接口…………………………………………………………………53.3内部接口…………………………………………………………………54系统数据结构设计…………………………………………………………54.1逻辑结构和物理结构设计要点…………………………………………54.1.1基本类型定义………………………………………………………54.1.2估值核心的棋盘数据结构设计………………………………………64.1.3搜索引擎的走法数据结构设计………………………………………64.2数据结构与程序的关系…………………………………………………74.2.1估值核心数据结构和程序的关系……………………………………74.2.2搜索引擎数据结构和程序的关系……………………………………75系统出错处理设计………………………………………………………………7五子棋概要设计说明书-1-1引言1.1编写说明本说明书提供了五子棋各个模块的概要设计说明,以供软件工程师和编码人员进行详细设计与具体实现。1.2背景软件名称:五子棋开发人员所在原校:漳州城市职业技术学院开发人员列表:郑艺杰预定完成日期:2003年5月1.3定义禁守:对局中禁止使用的战术或被判负的行棋手段。长连:相同颜色相连的六子或六子以上。搜索:通过对博弈树进行完全遍历或者部分遍历找出一个最好或者较好落子点的过程。估值:通过既有的棋类知识来评估一个局面优劣的过程。委托:一种组合方法,它使组合具有与继承同样的复用能力,在委托方式下,有两个对象参与处理一个请求,接受请求的对象将操作委托给它的代理者。聚合:一个对象拥有另一个对象或对另一个对象负责,一般我们称一个对象包含另一个对象或者是另一个对象的一部分。2总体设计2.1需求规定棋盘采用19×19标准围棋棋盘。游戏采用人机对弈模式,可以选择任何一方执黑先行。游戏中没有禁守规则和其他走子限制。只有当连五以后才判为获胜,长连也算获胜。软件禁止采用模式匹配的设计方法(即不允许在软件中存有大量已有的棋谱和算法)。电脑走一步棋所花费的时间尽量控制在20秒之内。棋盘颜色与棋子颜色要对比分明,便于其他程序识别。游戏中可以显示游戏状态的信息,但是不能有弹出对话框之类的窗口挡住棋盘。允许悔棋,认输,结束并重新开始游戏。五子棋概要设计说明书-2-2.2运行环境硬件配置(推荐):CPU:P4—1GHZ或更高内存:128M或更多显示器分辨率:800x600或更高运行本软件的系统平台:Windows9xWindowsMeWindows2000WindowsXPWindows2003开发工具:Delphi72.3基本设计概念和处理流程本软件采用面向对象的设计方案,通过把对弈接口组件化,来实现界面设计与算法设计的完全分离。2.4结构游戏程序界面对弈接口组件搜索算法引擎估值算法核心游戏界面只与对弈接口进行相互通讯,与使用的博弈算法无关。搜索算法引擎通过递归调用估值算法核心来找出最佳落子点。对弈接口组件将具体的博弈算法封装成可以与界面交互的接口。图1总体处理流程图五子棋概要设计说明书-3-表1类模块列表类标识符类名功能TGobangForm五子棋主程序窗体类它是程序界面设计部分的实现,它主要负责界面的绘制,而真正的人机对弈操作委托GobangAI来完成。TGobangAI五子棋对弈接口类它定义了完成人机对弈的操作接口,这样主窗体类可以通过这些操作接口来完成人机对弈的过程。而实际这些操作的实现是通过桥接的方式委托搜索引擎SearchEngine来完成的。TBestMove最佳走法的线程类它是通过委托TGobangAI实例中的SearchEngine对象的GetBestMove操作来找出当前电脑的最佳走法。而它本身却是在TGobangAI中被实例化并被调用的。TSearchEngine搜索引擎类在它当中定义了搜索算法所需要的数据结构和操作,而搜索算法中的核心操作是委托估值核心Evaluator来完成的。TEvaluator估值核心类在它当中定义了估值核心所需要的数据结构和操作,并实现了估值核心。表2各个类中的属性和操作列表属性操作标识符所属类功能BoardTGobangAI返回指定位置落子状态,委托SearchEngine实现MoveTGobangAI返回所指定的步数的走法,委托SearchEngine实现ScoreTGobangAI返回所指定步数的走法得分,委托SearchEngine实现CurMoveTGobangAI返回当前走法索引,委托SearchEngine实现StoneColorTGobangAI设定或返回电脑的棋色LevelTGobangAI设定或返回电脑的棋力水平值GobangAIGobangAIBestMoveEvaluatorSearchEngineTGobangFormTGobangAIBoard[X,Y]Move[Index]Score[Index]CurMoveStoneColorLevelIsStartAddStone(X,Y)GiveUpGoBackStartStopTSearchEngineBoard[X,Y]Move[Index]Score[Index]CurMoveWinnerIsGameOverGetBestMove(Depth)TEvaluatorBoard[X,Y]IsDrawGetScore(StoneColor)TBestMove图2总体设计结构图五子棋概要设计说明书-4-IsStartTGobangAI返回游戏是否开始AddStoneTGobangAI玩家下子,如果玩家未赢,则紧跟着电脑下子GiveUpTGobangAI玩家认输GoBackTGobangAI玩家悔棋,棋局退回到玩家下最后一颗子之前的状态StartTGobangAI开始游戏,开局后,棋色和棋力属性将不能再改变StopTGobangAI结束游戏,游戏结束后,棋色和棋力属性可以改变BoardTSearchEngine返回或设定指定位置落子状态,委托Evaluator实现MoveTSearchEngine返回所指定的步数的走法ScoreTSearchEngine返回所指定的步数的走法得分CurMoveTSearchEngine返回当前走法索引WinnerTSearchEngine返回获胜者IsGameOverTSearchEngine返回游戏是否结束GetBestMoveTSearchEngine返回最佳走法BoardTEvaluator返回或设定指定位置落子状态IsDrawTEvaluator返回是否平局GetScoreTEvaluator返回棋局估值上面所列出的属性和操作仅为public的属性和操作,private的变量、属性和操作这里没有给出定义,它们将在接口设计和系统数据结构设计中进行讨论。另外TGobangAI是一个组件类,其中定义了三个比较特殊的事件属性,通过这三个事件,可以使界面设计更加灵活方便,这三个事件的功能在下表中给出:表3TGobangAI组件中的事件定义列表事件描述OnGameStart游戏开始事件OnChange游戏中棋盘状态改变所触发的事件OnGameOver游戏结束事件2.5功能需求与程序的关系TGobangFormTGobangAITSearchEngineTEvaluator界面√界面算法接口√算法√√2.6尚未解决的问题因为博弈算法中搜索引擎的改进是影响整个游戏智能化程度的关键,但是搜索算法有很多,现在还不能确定哪种搜索算法更适合于本游戏,这些算法的测试将在详细设计和编码调试时再进行。3接口设计五子棋概要设计说明书-5-3.1用户接口用户的所有操作全部通过鼠标或者热键来完成。开始游戏、悔棋、认输和结束游戏这些操作通过点击按钮、右键菜单或使用热键来完成。棋色和水平选择通过点击单选框或右键菜单来完成。游戏中棋子状态将直接反映在棋盘上,其他反馈信息(比如棋盘当前局面、走棋时间、棋谱等信息)将在单独的反馈信息栏中显示。3.2外部接口本程序与其他比赛程序通过裁判程序(有比赛裁判委员会给出)来进行相互通讯,棋盘上落子通过鼠标事件的触发来完成,裁判程序将模拟这一鼠标事件。裁判程序对棋盘状态的获取将直接根据棋盘颜色变化来检测。3.3内部接口TGobangAI组件定义了界面和算法的接口,TGobangAI中聚合了TSearchEngine类的实例FSearchEngine,而TSearchEngine中聚合了TEvaluator的实例FEvaluator。通过这种设计,提高了系统的松散耦合性。4系统数据结构设计4.1逻辑结构和物理结构设计要点4.1.1基本类型定义://棋色类型TStoneColor=(scBlack,//黑棋scWhite);//白棋//落子点状态类型TPointState=(psBlack,//有黑棋psWhite,//有白棋psNone,//没有棋psInvalid);//无效位置//落子点组合类型TPointCombi=(pcSTwo,//眠二pcSThree,//眠三pcSFour,//眠四(冲四)pcTwo,//活二pcThree,//活三pcFour,//活四pcFive);//连五//棋盘上的扫描线类型TScanLine=arrayofTPointState;//棋子间状态描述类型TStonesState=array[TStoneColor]ofarray[TPointCombi]ofInteger;五子棋概要设计说明书-6-4.1.2估值核心的棋盘数据结构设计:FScanLines:array[0..95]ofTScanLine;//棋盘扫描线FIsValidLine:array[0..95]ofBoolean;//扫描线有效标志FLinesState:array[0..95]ofTStonesState;//每根扫描线上的棋子间状态FBoardState:TStonesState;//整个棋盘上的棋子间状态FValidLineCount:Integer;//棋盘上有效扫描线的数量对于估值核心棋盘的表示,重点要考虑的是估值的速度,因此本棋盘采用将19×19的棋盘上的横纵斜行都转化为横行的方式来储存,除去斜行上不足5个落子点的行,横纵斜行共有96行,每一行上的棋子数目不同,因此采用动态数组FScanLines来存储。虽然使用动态数组,但是只是在估值核心被初始化时才会分配动态数组的内存,其他情况下不改变此动态数组的内存分配,因此存取效率同静态数组几乎没有差别。另外为了表示每一行上面的棋子组合状态(比如活三、冲四、连五等状态),又定义了96行的数组FLinesState来存贮这些状态,而FboardState汇总了整个棋盘上的棋子组合状态。为了进一步提高棋局判断是否平局的效率,定义了96行的数组FIsValidLine和变量FvalidLineCount。4.1.3搜索引擎的走法数
本文标题:五子棋概要设计说明书
链接地址:https://www.777doc.com/doc-2741572 .html