网络人机对战中国象棋需求设计实现说明文档.docx
- 文档编号:23855886
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:37
- 大小:589.38KB
网络人机对战中国象棋需求设计实现说明文档.docx
《网络人机对战中国象棋需求设计实现说明文档.docx》由会员分享,可在线阅读,更多相关《网络人机对战中国象棋需求设计实现说明文档.docx(37页珍藏版)》请在冰豆网上搜索。
网络人机对战中国象棋需求设计实现说明文档
需求设计实现说明书
基于Windows平台的网络/单机
中国象棋
BasedonWindowsSystem
Network/SingleplaneChinesechess
编写作者
胡友谋
专业
软件工程
联系电话
152********
电子信箱
superfume@
个人说明
2009届本科毕业 两年工作经验
第一章 网络/单机中国象棋需求分析
1.1 引言
1.1.1 编写目的
在完成了针对网络/单机中国象棋软件的前期调查,与很多游戏玩家进行了全面深入地探讨和分析,同时参考了部分同类型软件的功能的基础上,提出了这份软件需求规格说明书。
此需求规格说明书对网络/单机中国象棋软件做了全面细致的用户需求分析,明确所要开发的软件应具有的功能、性能与界面,使系统分析人员及软件开发人员能清楚地了解用户的需求,并在此基础上进一步提出概要设计说明书和完成后续设计与开发工作。
本说明的预期读者为用户、业务或需求分析人员、测试人员、用户文档编写者、项目管理人员。
1.1.2 项目背景
随着网络技术的不断发展和普及,网络游戏也有了长足的发展;网络棋类游戏作为其独特的一个分支,也倍受广大网游玩家的喜欢。
通过网络,人们可以在更大的范围内和他人对弈,可以增强棋艺的技术文化交流,也可以增加玩家的棋艺水平。
种个企业集团或团体都有自己的局域网,大家在工作之余也很想进行些有意义的娱乐活动,下中国象棋应该是首选吧。
同时计算机发展也是非常的迅速,计算机的计算速度和并行的能力都有了空前的提高,人们自然也很希望可以和计算机比比智力的高低,与计算机进行中国象棋对弈应该就是最好的方式吧。
通过以上的简单分析,为了满足各种用户的需求,既可以网络对战,又可以人机对战的网络/单机中国象棋就有了开发的必要。
在这样的背景下,我计划开发一款这样多功能的象棋软件。
1.1.3 定义
C/S:
客户端/服务器模式
P2P:
端对端模式
AI:
人工智能
OOD:
面向对象设计
1.2 任务概述
1.2.1 目标
开发网络/单机中国象棋软件,实现网络服务器模式对战,网络端到端模式对战,以及人机对战功能。
并且软件的界面友好,操作方便。
1.2.2 运行环境
本软件建议运行在Windowsxp以上版本的PC机上。
采用的开发工具是VisualStudio2005开发平台,使用的开发语言为C++。
1.3 总体划分
1.3.1 系统功能划分
图1.1网络/单机中国象棋功能划分图
A.端到端模式:
用户在选择该模式之后,进入端到端游戏模式。
用户首先通过对方的地址同对方相连接,或者等待对方的连接,当连接成功以后就可以开始下棋了。
B.服务器模式:
用户在选择该模式之后,进入服务器模式进行游戏。
用户首先通过服务器地址同服务器相连接,连接成功以后可以看到服务器当前的房间信息,并且可以选择一个空位坐下,如果对面也有人坐下就可以开始下棋了。
C.人机对战模式:
用户在选择该模式之后,进行人机对战模式。
用户首先选择电脑执红或执黑,就可以开始下棋了。
D.游戏控制:
控制游戏过程中的全动作。
E.外观控制:
更改程序在外界,或者显示内容。
1.3.2 端到端模式(P2P)功能详细描述
端到端模式的特别是两个客户端程序直接通过网络相互连通进行游戏,参于中国象棋对弈的玩家只有两人。
这时客户端程序也可以作为服务端,具体操作如下:
a.选择游戏模式为点对点模式。
b.作为客户端的一方点击连接按钮在弹出的对话框中输入对方的IP地址进行连接。
c.作为服务器的一方会监听客户端的连接请求,并对来到的请求进行响应。
d.待服务端用户同意连接请求后,双方中的任意一方都可以点击开始按钮进行游戏,点击开始游戏的一方为红方。
e.游戏过程中可以悔棋、求和和认输等操作,同时程序自动判断胜负。
1.3.3 端到端模式用例
图1.2端到端模式用例图
1.3.4 服务器模式(C/S)功能详细描述
服务器模式的特别是所有的游戏玩家都集中连接服务器,在统一的平台下集中游戏。
在连接好服务器之后可以在房间里选择空位,棋桌的另一方如果也有玩家占位,则可以进行游戏。
功能简述如下:
a.选择服务器模式。
b.正常运行服务器程序。
c.客户端点击连接,填入服务器所在的地址,连接成功点击显示房间。
d.双击一个空位准备游戏。
e.待对面的位置有玩家入坐就可以开始游戏,过程同端到端模式。
1.3.5 服务器模式用例
图1.3服务器模式用例图
1.3.6 人机对战模式详细功能描述
人机对战模式是最难实现的部分,要求设计合理高效的数据结构和智能博弈搜索算法,使得计算机具有很高的棋力。
功能简述如下:
a.选择人机对战模式:
电脑执红或电脑执黑。
b.选择电脑水平:
简单、一般、困难和超级。
c.选择电脑迭代加加深搜索。
d.点击开始游戏。
e.游戏过程中可以悔棋。
1.3.7 服务器端功能描述
服务器端程序是实现中国象棋服务器对战模式的必要组成部分。
它使所有客户端的网络信息通信都集中在服务器上,使游戏玩家的选择更方便快捷。
具体功能描述如下:
a.接受每一个客房端的连接,并维护网络资源,向客房端发送房间信息。
b.当已经满座的棋桌双方提示可以开始下棋。
c.为已经进入对战的客房端传送下棋信息。
1.3.8 其他功能需求描述
软件还有其他的附加功能需求,具体描述如下:
a.选择棋子、走动棋子、吃子和判断胜负时播放不同的声音。
b.游戏过程中,可以更换棋子和棋盘的样式。
游戏过程中,可以表示出信息。
第二章 网络/单机中国象棋总体设计
2.1 软件简介及总体框架
2.1.1 软件简要说明
本软件是基于端对端(P2P)、客户/服务器(C/S)和单机模式的中国象棋博弈软件,是一个综合性的棋类网络游戏软件。
主要包括了网络信息传输管理,面向对象软件设计,服务器并发访问和人工智能等技术。
实现了点对点网络对战,服务器网络对战和人机对战功能。
2.1.2 总体框架图
本系统采用端到端(P2P)、客户/服务器(C/S)和单机模式的应用软件。
其框架图如下:
图2.1端到端(P2P)用例框架图
图2.2客户/服务器(C/S)模式用例框架图
2.1.3 各功能模块框架图
图2.3网络/单机中国象棋各功能模块图
图2.4网络中国象棋服务器端功能模块图
2.2 系统静态模型
2.2.1 定义系统对象类
A. 棋盘和棋子图片资源模块
为了方便软件的维护和软件界面的多样化发展,故将软件中所涉及到的棋盘和棋子图片资源都统一用单独的模块进行维护。
把图片资源编译到动态连接库中,并用库中的一个导出类向外部提供资源。
棋盘图片资源模块只有一个静态类:
CBoardImageManager;棋子图片资源模块一个静态类:
CChessImageManager。
B. 声音资源模块
为了方便软件的维护和软件运行时与用户互动的多样化发展,故将软件所涉及到的声音资源都统一用单独的模块进行维护。
把声音资源编译到动态连接库中,并用库中的一个导出类向外部提供资源。
声音资源模块只有一个静态类:
CSoundManager。
C. 棋盘、棋子模块
棋盘、棋子模块是程序中重要的部分,它将界面和棋子运行的逻辑分离开来。
界面只要有一个棋盘的对象,使用棋盘类的接口就可以了,而不用去管棋盘内部的处理过程。
这样就大大的降低了模块间的耦合程序。
所有棋子的基类:
CChess;CChess类的子类:
CBingzu、CJiangshuai、CJu、CMa、CPao、CShiwei和CXiang。
处理下棋逻辑的部分就是棋盘类:
CChessBoard。
D. 棋房间、棋桌模块
棋房间中有很多棋桌,每个棋桌有两个位置可以供客户连接。
棋房间的信息都是用服务器管理,而客户端只是接受服务器发送过来的房间信息并进行相应的处理;客户端可以选择一个位置座下,如果对面也有人入座就可以进行对弈活动了。
由于棋房间、棋桌在客户端程序和服务端程序都会用到,所以也单独做成一个模块,这样可以利用代码的复用。
棋子房间类:
CChessRoom;棋桌类:
CChessTable。
E. 网络模块
网络模块是本软件进行网络对战的必要模块,主要处理网络连接,网络信息传输的。
作为服务端,则有一个用于网络监听的SOCKET对象来监听客户端的连接请求,当接受了客户端的连接请求之后,就创建一个SOCKET对方与客户端的连接绑定。
作为客户端,直接创建一个SOCKET对方,通过服务端的地址和端口连接。
网络监听SOCKET类:
CListenSocket;用于点对点客户端通信类:
CClientSocket;用于服务器模式客户端通信类:
CClientSocketForServer。
F. 人工智能模块
人工智能模块就是实现计算机博弈功能的部分,运用了现在比较流行的计算机博弈算法和数据结构,使计算机具有了一定的棋力。
所用到的技术点有:
棋盘表示、走法生成、搜索技术、局面评估、置换表、杀手启发和静态搜索等技术。
计算机博弈类:
CAIPlayer。
G. 服务器模块
服务器模块是整个软件的服务器部分,实现了客户端的并发访问控制,让所有的客户端玩家都在统一的平台进行游戏,只要知道服务器地址,而不用去管其他玩家所在的客户端地址。
客户端与服务器的通信有两个网络连接,一个用于下棋另一个用于接受房间信息。
当服务器接受到一个客户端的连接就创建一个SOCKET对方与之绑定,如果再的客户端连接就再创建。
监听客户端连接的类:
CListenSocket;用于同客户端连接的通信类:
CClientSocket;棋房间类:
CServerChessRoom(继承于CChessRoom);棋桌类:
CServerChessTable(继承于CChessTable);用于向各个客户端分发房间消息的观察者类:
CPostInfoThread。
2.2.2 分析类图
通过上一节分析得到了系统中的类,如下图所示:
图2.5网络/单机中国象棋类图
图2.6服务器类图
2.3 系统动态模型
2.3.1 端到端(P2P)进行象棋对战
端到端进行象棋对战,是两个玩家直接进行连接游戏。
首先,是作为服务端的一方创建一个网络监听端,并打开一个网络端口,等待客户端的连接。
客户端则创建一个网络客户端,通过服务端的网络地址和端口进行连接。
服务端同意客户端连接请求之后也创建一个网络客户商同请求连接的客户端进行绑定。
这样就建立了网络连接,就可以进行游戏了。
时序图如下:
图2.7端到端对弈时序图
2.3.2 客户/服务器(C/S)模式对战
客户/服务器模式进行对战,就需要有一个独立的服务器供客户端的连接。
服务器要管理好每一个客户端的连接,并且正确处理它们之间正确的信息通信。
首先服务器打开两个服务端的网络监听:
一个是用来监听客户端房间信息连接,另一个是用来对客户端对弈信息连接。
客户端通过服务器地址和端口与服务器进行连接。
服务器监听到网络连接之后就是创建两个网络通信客户端分别与客户端的两个连接请求相绑定,并把房间信息发送到客户端。
当客户端选择了一个位置坐下,那么这个客户端的对弈通信连接就被绑定到该位置,当该位置的对面也有人时,这个棋桌的双方就可以开始对弈了。
时序图如下:
图2.8客户/服务器模式对弈时序图
2.3.3 人机对战
人机对战是本设计的一个亮点,把人工智能同中国象棋结合起来,让计算机具有了下棋的能力。
用户只要选择好了电脑的执棋方,以及选择好电脑的棋力水平,就可以同电脑对弈了。
时序图如下:
图2.9人机对弈时序图
第三章 网络/单机中国象棋详细设计
3.1 引言
在使用程序设计语言编写程序之前,需要对所采用的算法的逻辑关系进行分析并设计出全部必要的过程细节,并给予清晰的表达,使之成为编码测试和测试的依据。
3.2 程序系统结构
采用层次方框图和系统结构图的形式列出系统内的每个模块和子程序的名称、标识符和它们之间的层次结构关系。
3.2.1 层次方框图
图3.1层次方框图
3.2.2 系统结构图
图3.2 系统结构图
3.3ChessSound模块设计说明
3.3.1 模块描述
此模块最终编译为一个动态连接库文件,为软件运行过程中提供所要的声音资源。
模块内包涵了软件运行过程中所需的音频资源,只有一个静态类:
CSoundManager。
3.3.2 模块类图
图3.3 ChessSound模块类图
3.3.3 类详细说明
表3-1 CSoundManager详细说明表
类名
CSoundManager
概述:
根据调用者的消息发出相应的声响。
数据成员
数据成员名
详细说明
module
类型:
HMODULE
说明:
此为私有的静态数据成员,指向本身模块的句柄。
成员函数
成员函数名
详细说明
PlayChessSound
参数:
intSoundResID(音频资源ID)
返回类型:
void
说明:
此函数为静态成员函数,根据传入的ID参数,播放模块内的音频资源。
3.4 ChessBoardImage模块
3.4.1 模块描述
此模块为ChessClasses模板提供棋盘图片资源。
模块内包涵了棋盘图片资源。
模块包涵了软件运行过程中所需的棋盘图片资源,只有一个类CBoardImageManager。
3.4.2 模块类图
图3.4 CBoardImageManager类图
3.4.3 类详细说明
表3-2 CBoardImageManager详细说明表
类名
CBoardImageManager
概述:
为ChessClasses模板提供棋盘图片资源。
数据成员
数据成员名
详细说明
成员函数
成员函数名
详细说明
GetImage
参数:
CBitmap&bmp(用于绑定图片的位图对象的引用)
intid(相应图片资源ID)
返回类型:
void
说明:
此函数为静态成员函数,根据传入的位图对象引用和图片ID参数,将相应的图片绑定到位图对象。
3.5 ChessImage模块
3.5.1 模块描述
此模块为ChessClasses模板提供棋子图片资源。
模块内包涵了棋子图片资源。
模块包涵了软件运行过程中所需的棋盘图片资源,只有一个类CChessImageManager,类图和类详细说明表请参考3.4.2和3.4.3节。
3.6 ChessClasses模块
3.6.1 模块描述
该模块是依托于ChessImage模块和ChessBoardImage模块,包涵所有的棋盘和棋子的业务处理逻辑,并使之与GUI部分完全分离。
充分的利用了MVC的设计模式,提高了软件的开发效率,也有利于软件的维护。
它在整个系统中占有重要的地位,实现了主程序网络对战的走法判断的算法处理。
3.6.2 模块类图
图3.5 ChessClasses模块类图
3.6.3 类详细说明
表3-3 CChess类详细说明
类名
CChess
概述:
此类为所有棋子类的基类,包括棋子都有的属性和方法。
数据成员
数据成员名
详细说明
point
类型:
CPoint
说明:
表示棋子所在的点。
isRed
类型:
bool
说明:
表示棋子是否属于红方。
isBoos
类型:
bool
说明:
表示棋子是否是将或帅。
idmap
类型:
int
说明:
表示棋子所用图片资源的ID。
成员函数名
详细说明
DrawChess
参数:
CDC*pDC,CBitmap*pBitmap
返回类型:
void
说明:
根据棋子当前的点位置信息和图片资源,将棋子绘制到指定的CDC和CBitmap里。
ChessGo
参数:
CPoint&point(打算让棋子要到达的下一个点)
返回类型:
bool
说明:
此函数为虚拟函数。
根据棋子当前所在点、传入参数所表示的目标点,以及当前棋盘的形势来判断一个走法是否合理。
ChangeStyle
参数:
intstyle
返回类型:
void
说明:
此函数为虚拟函数。
改变棋子的外观样式。
表3-4 CChessBoard类详细说明表
类名
CChessBoard
概述:
棋盘类。
数据成员
数据成员名
详细说明
onlyOneBoard
类型:
CChessBoard*
说明:
静态数据成员,指向唯一实例的指针。
chessArray
类型:
CChess*[][];
说明:
存储棋盘棋子的二维级数。
成员函数
成员函数名
详细说明
GetChessBoard
参数:
无
返回类型:
CChessBoard*
说明:
静态成员函数,得到唯一的棋盘实例指针。
DelChessBoard
参数:
无
返回类型:
void
说明:
静态成员函数,删除唯一的棋盘实例。
InitChessesRed
参数:
无
返回类型:
void
说明:
以红方初始化棋盘对象。
InitChessesBlue
参数:
无
返回类型:
void
说明:
以黑方初始化棋盘对象。
DrawChesses
参数:
CDC*pDC,CBitmap*pBitmap
返回类型:
void
说明:
将棋盘上所有棋子绘制出来。
DrawChessBoard
参数:
CDC*pDC,CBitmap*pBitmap
返回类型:
void
说明:
将棋盘绘制出来。
GetChess
参数:
CPoint&point
返回类型:
CChess*
说明:
根据传入的点,来得到该点的棋子,如果该点没有棋子则返回空。
SetBoardPoint
参数:
CPoint&pointNew,CPoint&pointOld
返回类型:
void
说明:
根据传入的终点和起来来下一步棋,当然这必须是在判断该走法符合规则之后。
Repent
参数:
无
返回类型:
void
说明:
悔一步棋。
3.7 ChessRoomTable模块
3.7.1 模块描述
此模块是为服务器模式下提供房间和棋桌对象而建立的。
这个模块会在主程序和服务器模块中共同使用。
3.7.2 模块类图
图3.6 ChessRoomTable类图
3.7.3 类详细说明
表3-5 CChessTable类详细说明表
类名
CChessTable
概述:
棋桌类。
数据成员
数据成员名
详细说明
topLeft
类型:
CPoint
说明:
棋桌左上角所在的点。
bottomRight
类型:
CPoint
说明:
棋桌右下角所在的点。
leftBtnRect
类型:
CRect
说明:
棋桌左座位所在的区域。
rightBtnRect
类型:
CRect
说明:
棋桌右座位所在的区域。
成员函数
成员函数名
详细说明
DrawTable
参数:
CDC*pDC,CBitmap*pBitmap
返回类型:
void
说明:
根据当前棋桌状态绘制棋桌。
表3-6 CChessRoom类详细说明表
类名
CChessRoom
概述:
棋房间类。
数据成员
数据成员名
详细说明
chessTables
类型:
CChessTable[][]
说明:
房间内的棋桌。
TablesInfo
类型:
char[][]
说明:
所有棋桌的状态列表。
成员函数
成员函数名
详细说明
DrawRoom
参数:
CDC*pDC,CBitmap*pBitmap
返回类型:
void
说明:
绘制房间。
DrawTables
参数:
CDC*pDC,CBitmap*pBitmap
返回类型:
void
说明:
绘制房间内所有的棋桌。
SetTablesInfo
参数:
无
返回类型:
void
说明:
设置房间内所有棋桌的状态。
3.8 ComputerChessPlayer模块
3.8.1 模块描述
此模块是中国象棋人工智能模块,使用了合理的棋盘表示数据结构,先进的走法生成算法,极大极小值搜索算法,局面加密算法,置换表和杀手启发的静态搜索算法。
3.8.2 模块类图
图3.7 ComputerChessPlayer类图
3.8.3 类详细说明
表3-7 CAIPlayer类详细说明表
类名
CAIPlayer
概述:
棋房间类。
数据成员
数据成员名
详细说明
isFlipped
类型:
bool
说明:
是否翻转棋盘标志。
成员函数
成员函数名
详细说明
SetCallBack
参数:
callBack:
*pFun,pUserData:
void*
返回类型:
void
说明:
设置回调函数。
MakeAIPlayerGo
参数:
intsRow,intsCol,intdRow,intdCol
返回类型:
bool
说明:
叫电脑下一步棋。
Startup
参数:
无
返回类型:
void
说明:
重启电脑。
LoadBook
参数:
CStringbookPath
返回类型:
void
说明:
载入开局库。
SetAILevel
参数:
intlevel
返回类型:
void
说明:
设置电脑级别。
Repentance
参数:
无
返回类型:
void
说明:
悔棋。
第四章 网络对战实现
4.1网络通信相关技术分析
不同的计算机要在网络上进行通信,就要知道目的计算机的IP地址,所使用的通信协议,和所开通的端口(指定开通该端口的应用程序接收信息)。
4.1.1 端口(port)
按照OSI七层模型的描述,传输层提供进程(应用程序)通信的能力。
为了标识通信实体中进行通信的进程,TCP/IP协议提出了协议端口(protocolport)的概念。
端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。
应用程序通过系统调用与某端口相绑定(binding)后,传输层传给该端口的数据被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出。
端口用一个整数型标识符来表示,即端口号。
端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立。
即基于TCP和UDP的程序可以有相同的端口号。
端口使用一个16位的数字来表示,他的范围是0~65535,1024以下的端口号保留给预定义的服务。
例如:
http使用80端口,smtp使用25端口。
4.1.2 套接字(socket)
为了能够方便的开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统调用socket(套接字)。
socket的出现,使程序员可以很方便的访问TCP/IP,从而开发各种网络应用的程序。
随着Unix的应用推广,套接字在编写网络软件中得到了极大的普及。
后来,套接字又被引进了Windows等操作系统,成为开发网络应用程序的非常有效快捷的工具。
套接字存在于通信区域中。
通信区域也叫地址族,它是一个抽象的概念,主要用于将通过套接字通信的进程的共有特性综合在一起。
套接字通常只与同一区域的套接字交换数据(也有可能跨区域通信,但这只在执行了某种转换进程后才能实现)。
WindowsSockets只支持一个通信区域:
网际域(AF_INET),这个域被使用网际协议簇通信的进程使用。
4.1.3 网络字节顺序
不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低字节,有的机器在起始地址存放高位字节。
基于I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 人机 中国象棋 需求 设计 实现 说明 文档