Java开发文字地牢RPG时敌方生命值击败后未重置问题
问题根因
- 程序启动时仅创建了1个
Enemy对象,整个战斗循环全程复用该实例,没有生成新的敌人实例 - 击败当前敌人后,仅更新了敌人类型名称
randomEnemy字段,没有重置enemyHealth(敌人生命值)、randomDamage(敌人攻击力)这类敌人专属属性,上一个敌人被击杀时的负血量直接被新敌人继承,就出现了新敌人血量为负的异常。
修复方案
有两种常用修复方式,选一种即可:
方式1:生成新敌人时创建新的Enemy实例
修改击败敌人后的逻辑,重新实例化Enemy对象,自动触发构造方法里的属性初始化:
if (enemy.enemyHealth < 1) { System.out.println("The " + enemy.randomEnemy + " has been defeated.\n"); // 新增:创建新的敌人实例,重置所有属性 enemy = new Enemy(); enemy.randomEnemy = enemy.enemyType[rand.nextInt(enemy.enemyType.length)]; System.out.println("# A " + enemy.randomEnemy + " appears! #"); }
方式2:手动重置敌人属性
如果不想频繁创建新对象,可以在Enemy类中新增初始化方法,或者刷怪时手动赋值初始血量:
if (enemy.enemyHealth < 1) { System.out.println("The " + enemy.randomEnemy + " has been defeated.\n"); enemy.randomEnemy = enemy.enemyType[rand.nextInt(enemy.enemyType.length)]; // 新增:手动重置敌人生命值为初始值,这里的数值替换为你Enemy类中设定的初始血量即可 enemy.enemyHealth = 30; // 也可以同步重置敌人攻击力 enemy.randomDamage = rand.nextInt(10) + 5; System.out.println("# A " + enemy.randomEnemy + " appears! #"); }
内容的提问来源于stack exchange,提问作者Epicskylegend
相关产品推荐
相关产品推荐

