软件设计模式—基于java平台和运用5种设计模式的五子棋游戏

举报
FGGIT 发表于 2024/10/23 10:56:03 2024/10/23
【摘要】 软件设计模式——基于java平台和运用5种设计模式的五子棋游戏点击链接查看文档代码二、设计要求仿照教材上面围棋软件的设计思路,设计一款五子棋,采用至少5种设计模式。三、引言五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。在上古的神话传说中有“女娲造人,...

软件设计模式——基于java平台和运用5种设计模式的五子棋游戏

点击链接查看文档代码

二、设计要求

仿照教材上面围棋软件的设计思路,设计一款五子棋,采用至少5种设计模式。

三、引言

五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。在上古的神话传说中有“女娲造人,伏羲做棋”一说,《增山海经》中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。”李善注引三国魏邯郸淳《艺经》中曰:“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。可见,五子棋颇有渊源。亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。
五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。五子棋的棋具与围棋通用,是一种传统的棋种,有两种玩法。一种是双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。还有一种是自己形成五子连线就替换对方任意一枚棋子。被替换的棋子可以和对方交换棋子。最后以先出完所有棋子的一方为胜。
五子棋容易上手,老少皆宜,而且趣味横生,引人入胜;它不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

四、设计模式

1.1 抽象工厂模式

1.1.1 所用模式结构视图
a468b6ffa6aab9a4639ac035f2012e8f.png

1.1.2 本实例类图

78a961514882a761a2f3e75381f6dd08.png

1.1.3 实例实现代码

50f767a514bd1ace55f03a16f6367e4a.png

Theme类代码:

df6759845d796f1c133a8e2975d092bf.png

ThemeA类代码:

c4c518c8e22f5e713a37e4aab02494bf.png

BackImage类代码:

37122de6014daab0369d9ad029058ec7.png

BackImageA类代码:
d30af7cb7af5eadcba2f1aaafaf06752-1.png

Button类代码:
2f8962517f650b47f71cd747d0aef86f.png

ButtonA类代码:

ffb01006fef9a5845653e0efc8e17b61.png

1.1.4 当前模式总结
抽象工厂模式是指提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。本项目利用抽象工厂模式定义三种不同的游戏背景,供用户切换。
抽象工厂模式优点:
(1):最大的好处便是易于交换产品系列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同产品配置。
(2):它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操作实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
抽象工厂模式缺点
(1):产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

1.2 备忘录模式

1.2.1 所用模式结构视图

5ec6c0355482798064df88bf0a5a67ac.png

1.2.2 本实例类图

d8a2ece127e8547e61efabfaf7f872e9.png

1.2.3 实例实现代码

66bb9b78b7d89d2101a27fa0d98d2e0a.png

ChessPosition类代码:

7f9fe3e3d3bca39e407459523ccceec1.png

Memento类代码:

a959da394f69a6dd8bbab4a4eefee28f.png

Caretaker类代码:

1a1ee9ad94971eb8f3f4c99dc7a8e903.png

1.2.4 当前模式总结
备忘录模式是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。本项目使用备忘录模式,允许用户悔棋。
备忘录模式优点:
(1):给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
(2):实现了信息的封装,使得用户不需要关心状态的保存细节。
备忘录模式缺点
(1):消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。

1.3 责任链模式

1.3.1 所用模式结构视图
b925235eebf0875cf58a28e5d2d8fa08.png

1.3.2 本实例类图

bdd9c1718711ac918c8c5357e8ec20f0.png

1.3.3 实例实现代码
4890a4391ff83d85a043af1dddb181f3.png

Officer类代码:

c96befe901dcdd840a0811ae9933cd82.png

PersonAlgorithm类代码:

5277bb7433472483417bf72e668d486e.png

SystemAlgorithm类代码:

87897b3c055b4db9c89da5741759db64.png

1.3.4 当前模式总结
责任链模式给予请求的类型,对请求的发送者和接收者进行解耦。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。使用责任链模式来决定是人类悔棋还是人机。
责任链模式的优点
(1)降低耦合度。它将请求的发送者和接收者解耦。
(2)简化了对象。使得对象不需要知道链的结构。
(3)增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。
(4)增加新的请求处理类很方便。
责任链模式的缺点
(1)不能保证请求一定被接收。
(2)系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。
(3)可能不容易观察运行时的特征,有碍于除错。

1.4 单例模式

1.4.1 所用模式结构视图
4ebc07256877c8737f0c241afde63acf.png

1.4.2 本实例类图

47f9a4a667b39b71eeb07a963fce360c.png
25e837a5f1044f06d356dfc211f1ec1e.png

1.4.3 实例实现代码

1df9af0231d82c4c4314e0df8aba579f.png

Chess接口代码:

365dd6f4dd8724d9c38363d24f36cde4.png

BlackChess类代码:

181446b7c8b83c1437c2a49d513993d9.png

WhiteChess类代码:

4e0f01acf76b15a2671436813f67b018.png

1.4.4 当前模式总结
单例模式是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。避免在同一位置产生多个棋子,同时避免一个棋子实例被唯一创建,采用单例模式中的饿汉模式。
单例模式的优点:
(1)单例模式可以保证内存里只有一个实例,减少了内存的开销;可以避免对资源的多重占用,单例模式设置全局访问点;可以优化和共享资源的访问。
单例模式的缺点:
(1)单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来的代码,没有第二种途径,违背开闭原则;在并发测试中,单例模式不利于代码调试。在调试过程中,如果单例中的代码没有执行完,也不能模拟生成一个新的对象;单例模式的功能代码通常写在一个类中。

1.5 享元模式

1.5.1 所用模式结构视图
d32c4a2af543b6955abd7ad251b5c2d8.png

1.5.2 本实例类图

bf13be5194f5ed2b367aad73bf2a66d2.png

1.5.3 实例实现代码

6a94e04b0eaae82c769c16aeb1cc630f.png

ChessBox类代码:
151f0313a7b827a0153edb184f40691c.png

Chess接口代码:

275b9132a7a6d6b5fce0f33be048ed04.png

BlackChess类代码:

f432427acce4a92a0c9820541d380b14.png

WhiteChess类代码:

75643f197b1babf86a442dc82ac0ff25.png

ChessPosition类代码:

a3715c31c3228c214e8cbc6b6e72a4c3.png

1.5.4 当前模式总结
享元模式运用共享技术有效的支持大量细粒度对象的复用,系统只适用少量的对象而这些对象都很相似,状态变化很小可以实现对象的多次复用。享元模式使得棋盘中存在大量的棋子而无需创建许多的棋子实例。
享元模式的优点
(1)大大减少了对象的创建,降低了程序内存的占用,提高效率。
享元模式的缺点
(2)提高了系统的复杂度。需要区分内蕴状态(享元内部,不会随着环境的改变而有所不同)和外蕴状态(随着环境的改变而改变,不可共享)。

五、系统实现

1.1包图
8b442bf302789e6d43a043f92d956128-1.png

1.2分析类图

42e7d51be04405347c35169184d30c4b.png

1.3界面展示

进入游戏界面:
ad1679a513459a02128cb5e402e66e76.png

开始游戏界面:

6953765b5383eb9ddd14838a63197ad4.png

选择游戏模式界面:

6c17ba73c5d42ce9de103e221ee0a05a.png

选择棋盘主题界面:

1418c9976cfef74abb717fb49c03614a.png
3c807dbf7078e521a93d3f6a52f4244a.png

普通棋盘主题界面:

ec41420bfa6fca0c8ec1717c8860bf03.png

中级棋盘主题界面:

6b5897fac7be7e21d14dcd081c472086.png

高级棋盘主题界面:

9e1b50e7fe2ef6893097be7bf6858523.png

悔棋请求界面:
cf402db09b60546d6aa3b06771b939f3.png

拒绝悔棋界面:

6209c98ba4b2336840e3a0e2a00210f0.png

认输界面:

3258bf9181142624ddd0dab08de16a38.png

胜利界面:

993373e5cd4e145459252f8b707573ef.png

点击链接查看文档代码

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。