# AircraftWar_on_Java
哈尔滨工业大学(深圳)《面向对象的软件构造导论》课程实验
## 简介
此实验完成了基于Java的飞机大战游戏系统的设计,通过单例模式、工厂模式、策略模式、数据访问对象模式、观察者模式、模板模式等设计模式实现了包括难度选择、多种道具掉落、本地存储并显示排行榜等功能
+ 系统功能分析
![系统功能分析](pic/系统功能分析.png)
+ 骨架类的继承关系
![类继承关系](pic/类继承关系.png)
+ 游戏实例(高清视频位于[video](video/)目录下):
<video id="video" controls="" preload="none">
<source id="mp4" src="https://user-images.githubusercontent.com/77274198/181715902-b37fec3a-adb4-4cce-905e-5202d303c746.mp4" type="video/mp4">
</video>
https://user-images.githubusercontent.com/77274198/181715902-b37fec3a-adb4-4cce-905e-5202d303c746.mp4
+ [项目代码](AircraftWar/)
+ [实验指导书](指导书/)
## 单例模式
1. 应用场景分析
生成英雄机的场景需要用到此模式,因为在飞机大战游戏中只有一种英雄机,且每局游戏只有一架英雄机
目前的代码逻辑为在game类中创建英雄机实例,无法保证英雄机有且仅创建一架
2. 设计模式结构图
![单例模式](pic/单例模式.jpg)
game类中的构造器Game()负责创建单例heroAircraft
HeroAircraft类中将构造器
```
HeroAircraft(int locationX, int locationY, int speedX, int speedY, int hp) { }
```
私有化,并创建公开静态方法
```
getHeroAircraft(int locationX, int locationY, int speedX, int speedY, int hp){ }
```
实现双重检查锁定的线程同步的单例模式
## 工厂模式
1. 应用场景分析
敌机和道具类的创建需要用到工厂模式
目前敌机和道具类的生成逻辑依旧在game类中实现,没有实现将对象的创建行为封装在子类中,没有是实现客户程序中关于超类的代码与子类对象创建代码解耦,也不利于后期增加更多敌机类型与道具类型或修改现有类型。
2. 设计模式结构图
+ 道具工厂:
![道具工厂](pic/道具工厂.png)
抽象类PropsProduct为抽象道具产品,其中有构造方法PropsProduct与道具生效方法propsActive待实体产品类重写
Blood、Bomb、Bullet类为具体道具产品类,均继承了PropsProduct,重写了各自的构造方法与道具生效方法propsActive
PropsFactory为工厂接口,充当创建者角色,其中有返回类型为PropsProduct的createProps抽象方法用于生成各类道具,待实现该接口的各个具体工厂重写
BloodFactory、BombFactory、BulletFactory类为具体工厂类,均实现了PropsFactory接口,重写了createProps方法用于创建各自的道具类型
由EnemyProduct类中的PropsFactory方法来调用道具类的工厂模式生成各类道具
+ 敌机工厂:
![敌机工厂](pic/敌机工厂.png)
抽象类EnemyProduct为抽象敌机产品,其中有构造方法EnemyProduct与掉落道具方法DropProps待实体产品类重写
BossEnemy、EliteEnemy、MobEnemy类为具体敌机产品类,均继承了EnemyProduct,重写了各自的构造方法与掉落道具方法DropProps
EnemyFactory为工厂接口,充当创建者角色,其中有返回类型为EnemyProduct的createEnemy抽象方法用于生成各类敌机,待实现该接口的各个具体工厂重写
BloodFactory、BombFactory、BulletFactory类为具体工厂类,均实现了EnemyFactory接口,重写了createEnemy方法用于创建各自的敌机类型
由Game类中的action方法来调用敌机类的工厂模式生成各类敌机
由Game类中的crashCheckAction方法来调用敌机类的DropProps方法
## 策略模式
1. 应用场景分析
在英雄机与敌机选择直射和散射两种设计策略时会用到此模式
目前问题:
目前英雄机与敌机的shoot代码是各自分别写在英雄机类与敌机类中,存在严重的代码重复,并且不利于后期更改shoot模式
策略模式的优势:
+ 将采取哪一种射击模式的逻辑与算法本身分离,避免程序中使用多重 条件转移语句,使系统更灵活,并易于扩展
+ 降低了代码的重复率,且遵守大部分设计原则,高内聚、低偶合
2. 设计模式结构图
![策略模式](pic/策略模式.png)
game类中创建ShootContext实例,用于调用相应的shoot方法发射子弹
ShootContext类为环境类,起到决策采用哪种算法的作用,其中持有抽象策略ShootStrategy的引用、自身的构造器函数、用于设置策略的setShootStrategy函数以及用于返回实际射出子弹的executeShootStrategy方法
ShootStrategy接口为抽象策略接口,起到给出所有的具体策略类所需实现的方法的作用,其中有待具体策略实现的shoot方法
StraightShoot类为具体策略类,实现了ShootStrategy接口,子弹的直射在此类中实现,其中有实现子弹直射的shoot方法
DivergentShoot类为具体策略类,实现了ShootStrategy接口,子弹的散射在此类中实现,其中有实现子弹散射的shoot方法
## 数据访问对象模式
1. 应用场景分析
在记录玩家信息到文件中并显示排行榜的场景需要用到此模式
目前问题:
若将数据访问与存储融合在game类中,不仅复杂了业务逻辑,增加代码的耦合性,也不便于后续更改数据格式与数据源
数据访问对象模式的优势:
该模式把低级的数据访问 API 或操作从高级的业务服务中分离出来。使数据的获取、整理与业务逻辑解耦,便于从多个不同格式的数据源中获取数据和修改数据格式
2. 设计模式结构图
![数据访问对象模式](pic/数据访问对象模式.png)
game类中创建RankDaoImpl实例,用于调用其中的相应的相应方法方法实现读取、修改、写入、打印排名文件
Rank类是数据对象类,用于存储玩家的用户名,得分,游戏结束时间等信息,其中有用于存储相应信息的实例及其对应的set、get方法,还有用于新建一条玩家信息的仅传入用户名与得分的构造器,与用于读取文件中信息的传入用户名、得分与游戏结束时间的构造器
RankDao类是数据访问对象接口,用于给出实体类所需实现的方法。其中有待具体类实现的readFile、writeFile、displayRank、insertRank、getRanks、deleteData方法
RankDaoImpl为数据操作实体类,用于实现各类具体操作。其中有两种不同参数传入的构造器,以及分别实现读取、写入、打印、修改排名文件、返回排名列表、删除某一条排名数据的readFile、writeFile、displayRank、insertRank、getRanks、deleteData方法
## 观察者模式
1. 应用场景分析
实现炸弹道具(效果为清除屏幕上所有子弹以及非boss机)时会用到观察者模式
目前问题:
炸弹道具生效时所涉及到的两个并不相关的类,如果一起将其传参进入道具生效函数,并且在道具生效函数中一起写各自的处理方法。不仅增加了类与类之间的耦合性,也不利于理清代码逻辑
观察者模式的优势:
观察者模式将表示层和数据逻辑层的分离,并定义了稳定的消息更新传递机制,抽象了更新接口,使得敌机类与子弹类均作为具体观察者角色。在观察目标和观察者之间建立一个抽象的耦合,符合“开闭原则”的要求
2. 设计模式结构图
![观察者模式](pic/观察者模式.png)
game类中创建BombPublisher实例,用于调用其中
没有合适的资源?快使用搜索试试~ 我知道了~
基于Java的单机版2D飞机大战小游戏.zip
共324个文件
class:122个
png:62个
java:44个
0 下载量 51 浏览量
2023-09-10
14:39:37
上传
评论
收藏 74.34MB ZIP 举报
温馨提示
用java写的项目,项目可以直接运行,请放心下载使用。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java的单机版2D飞机大战小游戏.zip (324个子文件)
GridLayoutManager.class 19KB
GridLayoutManager.class 19KB
Game.class 11KB
Game.class 11KB
GridConstraints.class 8KB
GridConstraints.class 8KB
DimensionInfo.class 7KB
DimensionInfo.class 7KB
ScoreTable.class 5KB
ScoreTable.class 5KB
AbstractLayout.class 5KB
AbstractLayout.class 5KB
StartPage.class 4KB
StartPage.class 4KB
RankDaoImpl.class 4KB
RankDaoImpl.class 4KB
Util.class 4KB
Util.class 4KB
MusicThread.class 4KB
MusicThread.class 4KB
NormalGame.class 3KB
NormalGame.class 3KB
HardGame.class 3KB
HardGame.class 3KB
ImageManager.class 3KB
ImageManager.class 3KB
AbstractFlyingObject.class 3KB
AbstractFlyingObject.class 3KB
LayoutState.class 2KB
LayoutState.class 2KB
EliteEnemy.class 2KB
EliteEnemy.class 2KB
HorizontalInfo.class 2KB
HorizontalInfo.class 2KB
VerticalInfo.class 2KB
VerticalInfo.class 2KB
SupportCode.class 2KB
SupportCode.class 2KB
BossEnemy.class 2KB
BossEnemy.class 2KB
Main$1.class 2KB
Main$1.class 2KB
Bullet.class 2KB
Bullet.class 2KB
ScoreTable$1.class 2KB
ScoreTable$1.class 2KB
HeroAircraft.class 2KB
HeroAircraft.class 2KB
Main.class 2KB
Main.class 2KB
SupportCode$TextWithMnemonic.class 2KB
SupportCode$TextWithMnemonic.class 2KB
DivergentShoot.class 2KB
DivergentShoot.class 2KB
StraightShoot.class 2KB
StraightShoot.class 2KB
StartPage$4.class 2KB
StartPage$4.class 2KB
EasyGame.class 2KB
EasyGame.class 2KB
StartPage$1.class 1KB
StartPage$3.class 1KB
StartPage$2.class 1KB
StartPage$1.class 1KB
StartPage$3.class 1KB
StartPage$2.class 1KB
BombPublisher.class 1KB
BombPublisher.class 1KB
Rank.class 1KB
Rank.class 1KB
HeroController$1.class 1KB
HeroController$1.class 1KB
AbstractAircraft.class 1KB
AbstractAircraft.class 1KB
EnemyProduct.class 1KB
EnemyProduct.class 1KB
ScoreTable$2.class 1KB
ScoreTable$2.class 1KB
Blood.class 1KB
Blood.class 1KB
BaseBullet.class 1KB
BaseBullet.class 1KB
EliteEnemyFactory.class 1021B
EliteEnemyFactory.class 1021B
BossEnemyFactory.class 1015B
BossEnemyFactory.class 1015B
MobEnemyFactory.class 1013B
MobEnemyFactory.class 1013B
HeroController.class 1011B
HeroController.class 1011B
ScoreTable$3.class 922B
ScoreTable$3.class 922B
ShootContext.class 902B
ShootContext.class 902B
Bomb.class 756B
Bomb.class 756B
MobEnemy.class 618B
MobEnemy.class 618B
BulletFactory.class 588B
BulletFactory.class 588B
共 324 条
- 1
- 2
- 3
- 4
资源评论
c++服务器开发
- 粉丝: 3045
- 资源: 4463
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功