Skip to content

WangGuox1n/Huluwa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

葫芦娃大战妖精

游戏介绍

玩法

葫芦娃七兄弟与妖精列阵与战场两侧,按下空格双方开始攻击。 各个生物初始血量固定,并拥有自己的攻击波,攻击波的攻击力随机。 攻击模式为发出攻击波,攻击目标死亡时自动攻击下一目标。击败蝎子精和小喽啰后开始葫芦娃与boss的战斗,击败boss则救出爷爷,游戏胜利,否则游戏失败。

  • 血量:boss>葫芦娃=蝎子精=小喽啰
  • 攻击力基础:boss>葫芦娃>=蝎子精>小喽啰(攻击力增量是随机的,总攻击力=攻击力基础+攻击力增量,因此想要赢得游戏,纯靠运气:)

存档

计算replay文件夹下已有存档数n,本次游戏存档为记录文件的文件名为“record”+(n+1)。

回放

按下L键可选择文件回放。

代码实现

类Ground(继承JFrame)为游戏窗口,Field(继承JPanel)为战场,游戏采用二维坐标。Thing2D有坐标、图片等属性,生物Creature和攻击波EnergyBlast均继承Thing2D,即每个需要显示的对象都有坐标。

生物

  • 葫芦娃和妖精和Boss均继承Creature类,Creatrue类实现了Runnable接口, Creatrue有四种状态:准备、攻击、受到攻击、死亡,对应四张图片。
  • 每个Creature有自己的专属攻击波EnergyBlast(聚合),攻击波有自己的坐标,可以move,移动的方向根据攻击目标确定。
  • run函数用于“攻击波的移动”、“判断攻击波是否击中敌人”、“目标死亡则寻找下一目标”,并更新生物的状态。run中使用Thread.sleep函数实现Timer功能。

阵形

  • 只实现了鹤翼阵形,阵形用于设置各个生物在战场中的坐标。

画图

  • Feild类继承JPanel,通过画各个对象(生物及其攻击波)的图片来显示游戏进程。
  • Feild中添加了键盘监听器,按下空格开启后除boss外所有生物的线程start,按下 L 开始回放。回放和开始游戏不同时进行。
  • Feild中添加了定时器Timer,定时判断各个生物的状态以开启boss章节或结束游戏。

回放

  • 在Field类中,每次触发Timer便自动在文件中记录所有生物的状态和攻击波的坐标,因为显示游戏进程只需要生物的状态(以获取不同的状态图片)和攻击波的坐标(显示攻击波的移动)。
  • 按下 L 键后弹出文件对话框,通过FileDialog直接选择回放文件,回放时每次触发Timer便读取一次记录,然后更新生物的状态和攻击波的坐标。

不足之处

  • 没有实现开始界面、结束界面、菜单栏等。
  • 攻击波的坐标移动不精确,我是通过设置X轴的移动速度,然后根据两个生物间的距离用除法运算得到Y轴的移动速度,但因为坐标是Integer型,所以得到的X轴和Y轴的移动速度可能不匹配,所以有时候看起来好像没有击中却被判断击中了。

结语

  • 我没有按原要求实现生物的移动,而转为了攻击波的移动,我认为它们的性质是一样的。
  • 检查作业需要的回放记录文件的文件名为 record.txt

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages