# 基于JAVA实现的葫芦娃大战妖怪小游戏
# 1. 开发环境
- **IDE** : IntelliJ IDEA 2018.2
- **java环境**
- java 10.0.2 2018-07-17
- Java(TM) SE Runtime Environment 18.(build10.0.2+13)
- Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
- **Maven 3.6.0 **
# 2. 运行简介
- 通过`mvn clean test package`得到的位于target目录下的jar包可以直接运行
- 敲击空格开始一次新的游戏,葫芦娃固定按长蛇阵排列,妖怪将从8个阵型中随机选择一个排列。爷爷将在长蛇阵后方随机选择一个位置,蛇精同理随机确定一个战场位置。游戏开始时会在游戏运行目录创建一个临时文件fightlog来临时记录战斗流程
- 按R键可以保存最近结束的一次战斗游戏,当保存失败或取消保存时,将在游戏运行目录下生成一个fightlog文件,该文件记录了这次游戏的战斗流程
- 按L建可以选择一个录像文件并开始战斗回放
# 3. 游戏运行效果
![](http://www.writebug.com/myres/static/uploads/2021/10/19/d724965fb0b8a7772742b75963cb5b4f.writebug)
# 4. 项目结构
## 4.1 目录说明
- /src/main/java 项目代码
- /src/main/resources 资源文件
- /src/test/java 单元测试代码
- /Rep 包含4个精彩回放文件
## 4.2 项目代码结构
### 4.2.1 gui包
- 本包负责提供一个javafx图形化窗口
- `Main`是整个程序的入口,包含应用程序的基本控制代码
- `Controller`是应用窗口的辅助控制类,用于更新窗口上的图片和标签等控件
### 4.2.2 annotation包
- 本包用于存储自定义的注解类
- `Author`是一个描述作者、版本等信息的注解
### 4.2.3 creature包
- 本包提供了一系列游戏中所使用的生物的实现
- `Creature`是一切生物的基类,实现了`Runnable`接口以支持多线程运行
本包中所有Creature类的关系如下图所示 :
![](http://www.writebug.com/myres/static/uploads/2021/10/19/57fcb9bc7b66c2bf9eb75bf85751ea2b.writebug)
其中`CalabashBrother`是一个添加了若干成员和方法的枚举类,描述了一种属性相似且数量有限的生物——葫芦娃,该枚举类型被置于HuluWa类中用以具体描述一个特定排行的葫芦娃。
- `Creature`的基本组成
`Creature`类除了一系列描述诸如攻击力,存活状态,位置等生物基本信息外,还包括了移动、攻击等实际生物体可以具有的方法
- `Grandpa`与`Snake`类的特殊方法
在本游戏中,将爷爷与蛇精看作是各自阵营的指挥者,因此这两个类均有负责设置阵型中心点、初始化一个阵型类以及将某群生物按阵型排列的方法 。
### 4.2.4 formation包
- 本包负责提供阵型控制器
- `FormatioType`枚举了8种不同的阵型名称
- `Formation`是一个阵型控制器,使用时需要为其指定一个阵型、方向、空间、生物体集合以及阵型中心,之后可以通过控制器提供的DealFormation方法将生物体集合按某个阵型排列到空间中去
### 4.2.5 ground包
- 本包用于管理战场、空间以及战场回放功能类
- `Unit`是构成一个二维空间的基本单元,可以在该单元中存储一个生物信息来描述本单元是否被生物占据
- `Ground`是一个二维空间,内聚了一个由`Unit`构成的二维数组,负责统一管理`Unit`
- `BattleField`是本游戏的主战场,通过该类生成一个战场空间`Ground`、创建出若干生物体并开启生物体线程以启动游戏,同时记录游戏进程、提供回放功能接口等
- `Replay`依托`BattleField`提供回放功能,为了能使回放的战斗过程“动起来”且能看得清楚,实现了`Runnable`接口使得系统可以周期性访问一条战斗记录
### 4.2.6 imageView包
- 本包提供了一个特殊的图像类
- `cImageView`继承了`ImageView`这一个属于javafx的控件类,一个`ImageView`描述了一个图像以及该图像在`GirdPane`面板中的位置,系统将根据每一个`cImageView`的位置及图形信息刷新显示面板
### 4.2.7 sort包
- 该包提供了为葫芦娃排序所需的必要组件
- `Sort`是排序的基类,其排序方法未定义,需要其他继承了本类的排序类提供特定的排序方法
![](http://www.writebug.com/myres/static/uploads/2021/10/19/b9292a4d22e8dc0db2e8635fbd0b0483.writebug)
- 根据需要目前只提供了冒泡排序类
# 5. 游戏机制
## 5.1 GUI-战场-生物关系
### 5.1.1 GUI-战场关系
- 在gui框架中,使用GirdPane作为面板承载图片标签等显示内容,其中的`Controller`根据战场提供的imageView映像信息更新面板图片和标签内容
- `BattleField`则根据战场中的生物信息或是战斗结果等向gui模块发送更新命令以更新显示内容
### 5.1.2 战场-生物关系
- 在生物生成时会在本类中产生一个cimageView图片映像,里面包括该生物当前状态下的显示图片内容,以及还未更新入imageView中的位置信息
- 战场在生成生物时,不仅会将生物按阵营分类存储管理,同时会使用一个ArrayList来链接所有生物内部的cimageView映像,当需要更新gui时,gui模块正是通过调取这个ArrayList来获得映像信息
- 生物生成时需要知道自己所处的战场,这样他们在战斗-移动时可以轻松获得战场中的敌对生物信息;在自己的映像状态发生改变时也可以通知战场及时更新gui,记录移动/战斗信息等
## 5.2 战斗机制
- 头铁的葫芦娃们每次战斗只会根据爷爷的命令排出长蛇阵迎敌,而狡猾的蛇精每次战斗都会随机选择一个阵型指挥妖怪就位,根据阵型的不同,参战怪物的人数也有所不同,有时在人数上占据绝对上风,有时则堪堪和葫芦娃持平
- 爷爷和蛇精这两位指挥官会在各自阵型的后方随机出现
- 游戏开始时,所每个生物首先寻找一个最近的敌人,随后向该敌人逐步进发,当两生物距离过近时,将发生一次战斗,否则将继续向最近的敌人进发,循环往复,直到自己死亡或敌对阵营全员死亡,这是生物线程Run的基本逻辑
- 所有生物初始时有着不同的攻击力,但每次战斗后攻击力都将降低,每次非战移动时会少量回复一些攻击力
- 并非攻击力高者必然获胜,在战斗时,系统将依生物攻击力在两个生物攻击力总和中的比例作为概率决定其生死,以此可以制造冷门的出现,比如攻击力最低的爷爷战胜了攻击力最高的蛇精等
- 所有生物有10%的概率拒绝移动以避战
- 当移动/战斗后,生物将按结果更新自己的图片映像,同时向战场发送信息,通知其及时更新gui
- 生物死亡会在原地留下墓碑,其他生物可以经过该墓碑,当一个区域有多个生物死亡时,墓碑将重叠显示
## 5.3 录像存取机制
### 5.3.1 存档
- 在开始一次战斗时,`BattleField`将尝试创建一个fightlog文件为记录信息做准备
```java
private boolean creatLog() {
try {
fightLog = new File("fightlog");
fightLog.createNewFile();
fileWriter = new FileWriter(fightLog);
}catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
```
- 开始新游戏前,战场会生成所有生物,准备存储器,使生物布阵等,在所有工作完成后,将向fightlog写入“HuluWaFightReplay”作为文件头标记,随后写入爷爷、蛇精的位置及怪物阵型参数
- 战斗中,随着生物一次战斗结束,将使用writeFight记录死亡生物编号,随着生物一次移动结束,将使用writeMove记录生物编号及目标位置,这些函数的核心部分如下
```java
fileWriter.write(*******)
```
- 一次游戏结束后,并不�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
6418938293885245.zip (62个子文件)
huluwagame
src
pom.xml 2KB
src
test
java
GroundTest.java 1KB
main
resources
HuluWa.fxml 5KB
image
background.jpg 56KB
3.png 134KB
littlemonster.png 25KB
die.png 5KB
1.png 130KB
6.png 131KB
scorpio.png 26KB
5.png 140KB
4.png 132KB
snake.png 22KB
7.png 130KB
grandpa.png 28KB
2.png 134KB
java
sort
Sort.java 293B
BubbleSort.java 583B
imageView
cImageView.java 612B
annotation
Author.java 281B
gui
Controller.java 1KB
Main.java 5KB
ground
BattleField.java 6KB
Unit.java 542B
Ground.java 1KB
Replay.java 4KB
formation
FormationType.java 119B
Formation.java 7KB
creature
Monster.java 227B
Grandpa.java 2KB
Scorpio.java 244B
Creature.java 7KB
Snake.java 2KB
HuluWa.java 1KB
CalabashBrother.java 1KB
LittleMonster.java 263B
Rep
RealStory 709B
‘EasyVictory’ 561B
功亏一篑 917B
强者恒强 474B
.idea
description.html 188B
uiDesigner.xml 9KB
libraries
Maven__org_hamcrest_hamcrest_core_1_3.xml 520B
Maven__org_openjfx_javafx_controls_12_ea_6.xml 558B
Maven__junit_junit_4_12.xml 443B
Maven__org_openjfx_javafx_base_win_12_ea_6.xml 538B
Maven__org_openjfx_javafx_graphics_win_12_ea_6.xml 566B
Maven__org_openjfx_javafx_graphics_12_ea_6.xml 558B
Maven__org_openjfx_javafx_controls_win_12_ea_6.xml 566B
Maven__org_openjfx_javafx_fxml_win_12_ea_6.xml 538B
Maven__org_openjfx_javafx_fxml_12_ea_6.xml 530B
Maven__org_openjfx_javafx_base_12_ea_6.xml 530B
vcs.xml 166B
workspace.xml 53KB
misc.xml 567B
compiler.xml 940B
modules.xml 248B
gradle.xml 211B
encodings.xml 172B
Work.iml 2KB
LICENSE 1KB
README.md 16KB
共 62 条
- 1
资源评论
工具盒子
- 粉丝: 61
- 资源: 1313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功