电子五子棋游戏设计方案
温柔似野鬼°
929次浏览
2021年01月18日 14:51
最佳经验
本文由作者推荐
银行投资理财产品-过故人庄的诗意
电子五子棋游戏设计
方案
1.
项目背景
五子棋 是一种两人对弈的纯策略型汉族棋类益智游戏,棋具与围
棋通用,由中国汉族人发明,起源于中国上古时 代的传统黑白棋种之
一。主要流行于华人和汉字文化圈的国家以及欧美一些地区。规则为
双方交 替落子,
直到有一方下出五子连续,
五子连珠为赢。
容易上手,
老少皆宜,而 且趣味横生,引人入胜;不仅能增强思维能力,提高智
力,而且富含哲理,有助于修身养性。
2.
可行性分析
2.1
技术可行性
技术上的可 行性分析主要技术条件是否顺利完成开发工作,硬、
软件是否满足开发者的需要等。该系统的软件开发平 台已成熟可行。
硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越
来越大,可 靠性越来越高,价格越来越低,棋硬件平台完全能满足此
系统的需求。
而且网上有许多关于五子 棋软件的设计的文献资料以及
核心代码,同时组员兴趣浓烈,有信心完成该项目的开发工作,综上
所述,本项目技术上可行。
2.2
经济可行性
此项目所需用环 境平台、技术、所需其他东西都是可以找到的,
所以经济上可行。
并且本系统实施后可以让用户 很好的对五子棋进行
更加深入的研究,有助于开发用户智力。
2.3
管理可行性
主要是管理人员是否支持,现有的管理制度和 方法是否科学,规
章制度是否齐全,原始数据是否正确等。规章制度和管理方法为系统
的建设提 供了制度保障。
2.4
操作可行性
操作上是鼠标的使用,主要凭 借在棋盘上点击方格或按钮进行游
戏,方便简单。使用前只要看明白游戏规则及其方法即可。
3
.项目技术支撑
3.1
开发环境
在
Visual Studio 2012
集成开发环境下用
C#
语 言及
.NET
架构编
写软件;采用
SQL Server
实现棋局信息传输中的数据储存功能。
3.2
理论支持
五子棋核心算法、
CS
架构、多线程、
socket
机制。
3.3
理论介绍
3.3.1 C#
简介
C#< br>是一种安全的、稳定的、简单的、优雅的,由
C
和
C++
衍生出来的面向对象的编程语言。它在继承
C
和
C++
强大功能的同时去掉了一< br>些它们的复杂特性
(例如没有宏以及不允许多重继承)
。
C#
综合了< br>VB
简单的可视化操作和
C++
的高运行效率,以其强大的操作能力、优雅的语法风格、
创新的语言特性和便捷的面向组件编程的支持成为
.NET
开发的首 选语言。
[1]
C#
是面向对象的编程语言。它使得程序员可以 快速地编写各种基
于
MICROSOFT .NET
平台的应用程序,
MICROSOFT .NET
提供了一系列
的工具和服务来最大程度地开发利用计算与通讯领域。
3.3.2 CS
架构
C/S
结构,即大家熟知的客户机和服务 器结构。它是软件系统体
系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配
到
Client
端和
Server
端来实现,降低了系统的通讯开销。目前大多
数应用软件系统都是
Client/Server
形式的两层结构,
由于现在 的软
件应用系统正在向分布式的
Web
应用发展,
Web
和
Client/Server
应
用都可以进行同样的业务处理,
应用不同的模块共享 逻辑组件;
因此,
部的和外部的用户都可以访问新的和现有的应用系统,
通过现有应用
系统中的逻辑可以扩展出新的应用系统。
这也就是目前应用系统的发
展方向。
C/S
结构的优点是能充分发挥客户端
PC
的处理能力,
很多工作可
以在客户端处理后再提交给服务器。
对应的优点就是客户端响应速度
快。具体表现在以 下两点:
(
1
)
应用服务器运行数据负荷较轻。
一旦服务 器程序被启动,
就
随时等待响应客户程序发来的请求;
客户应用程序运行在用户自己的
电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中
的数据进行任何操作时,客 户程序就自动地寻找服务器程序,并向其
发出请求,服务器程序根据预定的规则作出应答,送回结果,应 用服
务器运行数据负荷较轻。
(
2
)数据的储存管理功能较为透明 。在数据库应用中,数据的
储存管理功能,是由服务器程序和客户应用程序分别独立进行的,并
且通常把那些不同的(不管是已知还是未知的)前台应用所不能违反
的规则,在服务器程序中集中实现, 例如访问者的权限,编号可以重
复、必须有客户才能建立定单这样的规则。所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干
涉)背后的过程,就可以完成自 己的一切工作。
3.3.3 socket
机制
Socket< br>是面向客户
/
服务器模型设计的,网络上的两个程序通
过一个双向的通讯连接实 现数据的交换,这个双向链路的一端称
为一个
Socket
。
Socket
通常用来实现客户方和服务方的连接。
客户程序可以向
Socket
写请求, 服务器将处理此请求,然后通过
Socket
将结果返回给用户。
Sock et
通信机制提供了两种通讯方式:有联接和无联接方式,
分别面向不同的应用需求。使用有联 接方式时,通信链路提供了
可靠的,全双工的字节流服务。在该方式下,通信双方必须创建
一个 联接过程并建立一条通讯链路,以后的网络通信操作完全在
这一对进程之间进行,通信完毕关闭此联接过 程。使用无联接方
式时其系统开销比无联接方式小,但通信链路提供了不可靠的数
据报服务,不 能保证信源所传输的数据一定能够到达信宿。在该
方式下,通信双方不必创建一个联接过程和建立一条通 讯链路,
网络通信操作在不同的主机和进程之间转发进行。
二、概要分析
1.
基本设计概念
1.1
总体处理流程
本软件采用面向对象的设计方案,通过把对弈接口组件 化,来实
现界面设计与算法设计的完全分离。
游戏界面只与对弈接
口进行相互通讯,
与使
用的博弈算法无关。
游戏
程序
界面
对弈
接口
组件
搜索算法引擎通过递
归调用估值算法核心
来找出最佳落子点。
搜索
算法
引擎
估值
算法
核心
对弈接口组件将具体
的博弈算法封装成可
以与界面交互的接口。
图
1
总体处理流程图
1.2
结构
表
1
类模块列表
类标识符
TGobangForm
类名
功能
五
子
它是程序界面设计部分的实现, 它主要负责
棋
主
界面的绘制,而真正的人机对弈操作委托
程
序
GobangAI
来完成。
窗
体
类
TGobangAI
五
子
它定义了完成人机对弈的操作接口,这样主
棋
对
窗体类可以通过这些操作接口来完成人机对
弈
接
弈的过程。而 实际这些操作的实现是通过桥
口类
接的方式委托搜索引擎
SearchEngine
来完成
的。
TBestMove
最
佳
它
是
通
过
委< br>托
TGobangAI
实
例
中
的
走
法
SearchEngine
对象的
GetBestMove
操作来找
的线
出当前电脑的最佳走法。而它本身却是在
程类
TGobangAI
中被实例化并被调用的。
TSearchEngine
搜
索
在它当中定义了搜索算法所需要的数据结构
引
擎
和操作 ,而搜索算法中的核心操作是委托估
类
TEvaluator
值核心
Evaluator
来完成的。
估
值
在它 当中定义了估值核心所需要的数据结构
核
心
和操作,并实现了估值核心。
类
表
2
各个类中的属性和操作列表
属性操作标识
所属类
符
Board
TGobangAI
返
回
指< br>定
位
置
落
子
状
态
,
委
托< br>SearchEngine
实现
功能
Move
TGobangAI
返
回所指
定的步数
的走法
,委
托
SearchEngine
实现
Score
TGobangAI
返回所指定步数的走法得分,委托
SearchEngine
实现
CurMove
TGobangAI
返
回
当
前
走
法
索
引
,
委
托
SearchEngine
实现
StoneColor
Level
IsStart
AddStone
TGobangAI
TGobangAI
TGobangAI
TGobangAI
设定或返回电脑的棋色
设定或返回电脑的棋力水平值
返回游戏是否开始
玩家下子,
如果玩家未赢,
则紧跟着
电脑下子
GiveUp
GoBack
TGobangAI
TGobangAI
玩家认输
玩家悔棋,
棋局退回到玩家下最后一
颗子之前的状态
Start
TGobangAI
开始游戏,
开局后,
棋色和棋力属性
将不能再改变
Stop
TGobangAI
结束游戏,
游戏结束后,
棋色和棋力
属性可以改变
Board
TSearchEngine
返回或设定指定位置落子状态,
委托
Evaluator
实现
Move
Score
TSearchEngine
返回所指定的步数的走法
TSearchEngine
返回所指定的步数的走法得分
CurMove
Winner
IsGameOver
GetBestMove
Board
IsDraw
GetScore
TSearchEngine
返回当前走法索引
TSearchEngine
返回获胜者
TSearchEngine
返回游戏是否结束
TSearchEngine
返回最佳走法
TEvaluator
TEvaluator
TEvaluator
返回或设定指定位置落子状态
返回是否平局
返回棋局估值
上面所列出的属性和操作仅为
public
的属性和 操作,
private
的变量、属性和操作这里没有给出定义,它们将在接口设计和系统数据结构设计中进行讨论。
另外
TGobangAI
是一个组件类,其中定义了三个比较特殊的事件
属性,通过这三个事件,可以使界面设计更加灵活方便,这三个事件
的功能在下表中给出:
表
3 TGobangAI
组件中的事件定义列表
事件
OnGameStart
OnChange
描述
游戏开始事件
游戏中棋盘状态改变所触发的事
件
OnGameOver
1.3
功能需求与程序的关系
界面
TGobangForm
TGobangAI
TSearchEngine
TEvaluator
√
√
游戏结束事件
界
面
算
法
接口
算法
1.4
尚未解决的问题
√
√
因为博弈算法中搜索引擎的改进是影响整个游戏智能化程度的
关键,但是 搜索算法有很多,现在还不能确定哪种搜索算法更适合于
本游戏,这些算法的测试将在详细设计和编码调 试时再进行。
2.
接口设计
2.1
用户接口
用户的所有操作全部通过鼠标或者热键来完成。
开始游戏、
悔棋、
认输和结束游戏这些操作通过点击按钮、右键菜单或使用热键来完
成。棋色和水平选择 通过点击单选框或右键菜单来完成。游戏中棋子
状态将直接反映在棋盘上,其他反馈信息(比如棋盘当前 局面、走棋
时间、棋谱等信息)将在单独的反馈信息栏中显示。
2.2
外部接口
本程序与其他比赛程序通过裁判程序(有比赛裁判委员会给出)
来 进行相互通讯,棋盘上落子通过鼠标事件的触发来完成,裁判程序
将模拟这一鼠标事件。
裁判程 序对棋盘状态的获取将直接根据棋盘颜
色变化来检测。
2.3
部接口
TGobangAI
组件定义了界面和算法的接口,
TGo bangAI
中聚合了
TSearchEngine
类的实例
FSearch Engine
,而
TSearchEngine
中聚合
了
TEval uator
的实例
FEvaluator
。通过这种设计,提高了系统的松
散 耦合性。
3.
流程图
3.1
主模块图
五子棋
界面及画图函数模块
主控模块
人人对战模块
人机对战模块
胜负判断模块
欢迎界面设计函数
模式选择界面
界面及图形模
游戏进行界面
结束界面
棋子函数
界面及图形模块
3.2
主流程图
服务器端与客户端流程图
服务器端
侦听游戏连接端口
收到客户端的
连接
开始游戏
侦听游戏搜索端口
否
否
收到客户端的
搜索请求
否
发送本机地址和游
戏名
客户端
发送局域网广播搜
索游戏服务器
否
收到游戏服务
器信息
保存服务器信息添
加到游戏列表
与服务器建 立联系
开始游戏
开始
白方下子
判断该位置是
否有 棋
有
找另一位
是
白方下子
判断白方是否
胜出
是跳出白方获胜
选择是否重新
开局
否
否
黑方下子
游戏结束
判断该位置是
否有棋
找另一位
有
黑方下子
无
判断黑 方是否
胜出
是
跳出黑方获胜
3.3
模块流程图
Step++
Step
值的奇偶来判断,
初值为
0
人人对战
奇
偶
step
++
移动棋子
判断胜负
判断胜负
否
是
是
否
下棋
移动棋子
下棋
1
号棋手
2
号棋手
交换棋手
显示胜负信息
显示胜负信息
交换棋手
棋手下棋流程
//
棋色类型
TStoneColor
=
(
scBlack
,
//
黑棋
scWhite
);
//
白棋
//
落子点状态类型
TPointState
=
(
psBlack
,
//
有黑棋
psWhite
,
//
有白棋
psNone
,
//
没有棋
psInvalid
);
//
无效位置
显示当前下棋的棋手
Player1
或
player2
A D/
ENTER/SPACE
W/
S
/
ESC
判
断
当
前
有无棋子
左移光标
右移光标
下棋
上移光标
下移光标
退出
有
无
改变棋型表
相应值
退出循环
显示棋子
判断胜负
是
否
电脑下棋流程
结束
退出循环,
交换棋手
三、详细设计
1.
基本操作
1.1
界面以及落子处理
1.
使用二维数组
Chessboard[15,15]
储存棋盘的状态,以
0< br>表
示没有放子的位置,
以
1
表示放黑子的位置,
以
2
表示放白子的位置;
2.
以鼠标的状态提示当前持子的一方;
3.
将棋盘作为图片的形式贴处在程序界面上;
4.
加 载棋子资源(黑、白棋子)
,当鼠标在棋盘上点击的时候
产生事件,处理鼠标的位置产生对应的 棋盘坐标位置;
5
.判断落子出是否可以落子:不可以则不做任何处理, 不改
变鼠标的状态;可以落子,则打印对应的棋子图像,记录棋盘位置,
并将位置传递给判定函 数;
6.
交换持子方,重复落子过程,直到判定函数产生胜出结果;
[2]
程序流程