while循环在需要时不会结束

所以一些背景信息,我是编程的新手,我还在学习,所以我为我的琐碎错误制作道歉。 我正在制作自己的基于文本的游戏,以便进一步练习等。

以下是Dropbox上所有内容的链接,以获取更多信息: https : //www.dropbox.com/sh/uxy7vafzt3fwikf/B-FQ3VXfsR

我目前正在尝试为我的游戏实施战斗系统,并且我遇到了战斗序列的问题,在需要时没有结束。 “战斗序列”是一个while循环,如下所示:

public void startCombat() { inCombat = true; while(inCombat != false)// && herohealth > 0 && monsterhealth > 0) { checkAlive(); heroHitMonster(); checkAlive(); monsterHitHero(); } attackinghero.setHeroHealth(herohealth); attackedmonster.setMonsterHealth(monsterhealth); } 

其中checkAlive()方法如下:

 public void checkAlive() { if(herohealth <= 0) { System.out.println("You have died."); attackinghero.clearInventory(); inCombat = false; } else if(monsterhealth <= 0) { System.out.println("You have killed the "+attackedmonster.getmonsterName()+"!"); inCombat = false; combatlocation.removeMonster(attackedmonster.getmonsterName()); } else { // } } 

当’英雄’或’怪物’健康变得<= 0时,我试图让它结束战斗序列,但它现在正在完成while循环并因此产生英雄被击中的结果,即使他杀了他第一次击中怪物。

这就是目前正在“打印到屏幕”的内容

老鼠失去5健康! 你杀了老鼠!

英雄失去了1个健康!

非常感谢任何帮助,提前谢谢。

checkAlive不应该是void它应该是布尔值并且应该返回inCombat,并且在你的函数startCombat中你应该做inCombat = checkAlive();

while循环仅在两个动作之后进行评估。 在英雄击中怪物后,你需要一种方法来打破循环。 我个人会更改checkAlive方法返回一个布尔值,并将hit方法放在while循环的if语句中:

 if(checkAlive()) { heroHitMonster(); } if(checkAlive()) { monsterHitHero(); } 

您应该在checkAlive的末尾结束循环,而不是更改布尔值。 如果你在第一次击中时杀死了怪物,你甚至可以执行monsterHitHero(),如果怪物被杀死的话。 击中的function应该以英雄/怪物的生命为条件。