葫芦娃七兄弟与妖精列阵与战场两侧,按下空格双方开始攻击。 各个生物初始血量固定,并拥有自己的攻击波,攻击波的攻击力随机。 攻击模式为发出攻击波,攻击目标死亡时自动攻击下一目标。击败蝎子精和小喽啰后开始葫芦娃与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