UML五子棋设计.docx
《UML五子棋设计.docx》由会员分享,可在线阅读,更多相关《UML五子棋设计.docx(16页珍藏版)》请在冰豆网上搜索。
![UML五子棋设计.docx](https://file1.bdocx.com/fileroot1/2022-12/7/d423a787-ab56-4130-a84f-d37208cfc610/d423a787-ab56-4130-a84f-d37208cfc6101.gif)
UML五子棋设计
单机版五子棋
设计
郑州大学信息工程学院
姓名
学号
易晓沛(组长)
20137670344
吴家贝
20137670340
崔云开
20137670407
杨照方
20137670343
李庆仁
孙迎春
20137670332
陈仟仟
20137670304
1.需求分析
1.1项目背景
五子棋是一种两人对弈的纯策略型汉族棋类益智游戏,棋具与围棋通用,由中国汉族人发明,起源于中国上古时代的传统黑白棋种之一。
主要流行于华人和汉字文化圈的国家以及欧美一些地区。
规则为双方交替落子,直到有一方下出五子连续,五子连珠为赢。
容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
1.2项目技术支撑
使用语言进行需求分析设计;在2010集成开发环境下用语言及架构编写软件。
1.2.1简介
()又称统一建模语言或标准建模语言,是始于1997年一个标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。
面向对象的分析与设计(,)方法的发展在80年代末至90年代中出现了一个高潮,是这个高潮的产物。
它不仅统一了、和的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。
的描述对象集合和它们之间的关系的方法。
的对象建模技术()。
的包括用例方法的方式。
还有其他一些想法也对起到了作用,是,,。
已经被对象管理组织()接受为标准,这个组织还制定了通用对象请求代理体系结构(),是分布式对象编程行业的领头羊。
计算机辅助软件工程()产品的供应商也支持,并且它基本上已经被所有的软件开发产品制造商所认可,这其中包括和微软(用于它的环境)。
规范用来描述建模的概念有,类(对象的)、对象、关联、职责、行为、接口、用例、包、顺序、协作,以及状态。
1.2.2简介
是一种安全的、稳定的、简单的、优雅的,面向对象的编程语言。
它在继承C强大功能的同时去掉了一些它们的复杂特性。
综合了简单的可视化操作、高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为开发的首选语言。
[1]
是面向对象的编程语言。
它使得程序员可以快速地编写各种基于平台的应用程序,提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。
2系统概要分析
2.1基本设计概念
本软件采用面向对象的设计方案,通过把对弈接口组件化,来实现界面设计与算法设计的完全分离。
2.1.1类模块结构
表1类模块列表
类标识符
类名
功能
五子棋主程序窗体类
它是程序界面设计部分的实现,它主要负责界面的绘制,而真正的人机对弈操作委托来完成。
五子棋对弈接口类
它定义了完成人机对弈的操作接口,这样主窗体类可以通过这些操作接口来完成人机对弈的过程。
而实际这些操作的实现是通过桥接的方式委托搜索引擎来完成的。
最佳走法的线程类
它是通过委托实例中的对象的操作来找出当前电脑的最佳走法。
而它本身却是在中被实例化并被调用的。
搜索引擎类
在它当中定义了搜索算法所需要的数据结构和操作,而搜索算法中的核心操作是委托估值核心来完成的。
估值核心类
在它当中定义了估值核心所需要的数据结构和操作,并实现了估值核心。
表2各个类中的属性和操作列表
属性操作标识符
所属类
功能
返回指定位置落子状态,委托实现
返回所指定的步数的走法,委托实现
返回所指定步数的走法得分,委托实现
返回当前走法索引,委托实现
设定或返回电脑的棋色
设定或返回电脑的棋力水平值
返回游戏是否开始
玩家下子,如果玩家未赢,则紧跟着电脑下子
玩家认输
玩家悔棋,棋局退回到玩家下最后一颗子之前的状态
开始游戏,开局后,棋色和棋力属性将不能再改变
结束游戏,游戏结束后,棋色和棋力属性可以改变
返回或设定指定位置落子状态,委托实现
返回所指定的步数的走法
返回所指定的步数的走法得分
返回当前走法索引
返回获胜者
返回游戏是否结束
返回最佳走法
返回或设定指定位置落子状态
返回是否平局
返回棋局估值
上面所列出的属性和操作仅为的属性和操作,的变量、属性和操作这里没有给出定义,它们将在接口设计和系统数据结构设计中进行讨论。
另外是一个组件类,其中定义了三个比较特殊的事件属性,通过这三个事件,可以使界面设计更加灵活方便,这三个事件的功能在下表中给出:
表3组件中的事件定义列表
事件
描述
游戏开始事件
游戏中棋盘状态改变所触发的事件
游戏结束事件
2.1.2功能需求与程序的关系
界面
√
界面算法接口
√
算法
√
√
2.1.3尚未解决的问题
因为博弈算法中搜索引擎的改进是影响整个游戏智能化程度的关键,但是搜索算法有很多,现在还不能确定哪种搜索算法更适合于本游戏,这些算法的测试将在详细设计和编码调试时再进行。
2.2接口设计
2.2.1用户接口
用户的所有操作全部通过鼠标或者热键来完成。
开始游戏、悔棋、认输和结束游戏这些操作通过点击按钮、右键菜单或使用热键来完成。
棋色和水平选择通过点击单选框或右键菜单来完成。
游戏中棋子状态将直接反映在棋盘上,其他反馈信息(比如棋盘当前局面、走棋时间、棋谱等信息)将在单独的反馈信息栏中显示。
2.2.2外部接口
本程序与其他比赛程序通过裁判程序(有比赛裁判委员会给出)来进行相互通讯,棋盘上落子通过鼠标事件的触发来完成,裁判程序将模拟这一鼠标事件。
裁判程序对棋盘状态的获取将直接根据棋盘颜色变化来检测。
2.2.3内部接口
组件定义了界面和算法的接口,中聚合了类的实例,而中聚合了的实例。
通过这种设计,提高了系统的松散耦合性。
2.3.流程图
2.3.1主模块图
2.3.2界面及图形模块
2.4设计
2.4.1系统用例图
2.4.2动态交互图
2.4.3静态类图
2.4.4包图
2.4.5流程图
3.详细设计
3.1基本操作
3.1.1界面以及落子处理
1.使用二维数组[15,15]储存棋盘的状态,以0表示没有放子的位置,以1表示放黑子的位置,以2表示放白子的位置;
2.以鼠标的状态提示当前持子的一方;
3.将棋盘作为图片的形式贴处在程序界面上;
4.加载棋子资源(黑、白棋子),当鼠标在棋盘上点击的时候产生事件,处理鼠标的位置产生对应的棋盘坐标位置;
5.判断落子出是否可以落子:
不可以则不做任何处理,不改变鼠标的状态;可以落子,则打印对应的棋子图像,记录棋盘位置,并将位置传递给判定函数;
6.交换持子方,重复落子过程,直到判定函数产生胜出结果;
图2系统界面
3.2五子棋判胜
本功能模块主要对游戏的胜负进行判定.
1.由玩家输入棋子所在位置,由系统判定胜负,若胜,则游戏结束;否则,游戏继续.
2.对胜负判定需先确定一个中心棋子位置.
3.由一个中心棋子可以引出四条线形成五子连一线.
4.判定过程中注意越界现象.
概要设计
1.五子棋的判胜条件即为5个相同的棋子连在一条线上.
2.以一个棋子为中心,有4条线可以形成五子连线.如图所示:
(描红的为中心棋子)
3.中心棋子即为最后一步所下棋子.
4.以1线为例,从中心棋子出发(设为白子),先向左进行判断,若棋子为白子,则计数器加1(初始值为1),否则(为黑子或无子),则返回中心棋子,向右进行判断,进行相同操作.
5.1线判定结束后,若计数器为5,则判白子胜,否则,计数器归1,再从2,3,4线按顺序进行判定.
6.棋盘的每个坐标有3个状态,分别为无子(标记为0),白子(标记为1),黑子(标记为2),对棋盘点进行判断时,只需判定其所在状态即可。
7.若棋盘下满,仍未有五子连线,则判和。
图3五子棋判胜流程图
4.软件实现与测试
软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。
执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。
软件测试的目的:
(1)测试并不仅仅是为了找出错误。
通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进;
(2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;
(3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。
5、运行结果
5.1首先进入游戏界面,然后可以选择难度
玩家可以选择人人对战可和人机对战两个模式
玩家开始游戏
当白棋快赢的时候或手勿玩家想回步的时候可以选择悔棋(但只能悔棋一步)
悔棋后到上一步
6.总结
经过系统的设计与实现,一个能够实现人机对战和人人对战的局域网五子棋系统基本完成。
总结全文的工作,具体概括如下:
对游戏逻辑模块进行优化,进一步提高时间性能和可扩展性,以适应将来新的需求和变化。
此外电脑落棋算法也有待进一步改进,这里采用的是循环遍历算法。
7.附录
7.1源代码