所以一些背景信息,我是编程新手,我还在学习,所以我为我的琐碎错误道歉而道歉。我正在制作自己的基于文本的游戏,以便进一步练习等。
以下是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
{
//
}
}
当'英雄'或'怪物'健康成为&lt; = 0时,我试图让它结束战斗序列, 然而它正在完成while循环,因此即使他在第一次击中时杀死了怪物,也会产生英雄被击中的结果。
目前正在“打印到屏幕”
老鼠失去了5个健康! 你杀死了老鼠!英雄失去1点健康!
非常感谢任何帮助,提前谢谢。
答案 0 :(得分:1)
checkAlive不应该是void它应该是布尔值并且应该返回inCombat,并且在你的函数startCombat中你应该做inCombat = checkAlive();
答案 1 :(得分:1)
while循环仅在两个动作之后进行评估。在英雄击中怪物后你需要一种方法来打破循环。我个人会更改checkAlive方法返回一个布尔值,并将hit方法放在while循环的if语句中:
if(checkAlive())
{
heroHitMonster();
}
if(checkAlive())
{
monsterHitHero();
}
答案 2 :(得分:0)
您应该在checkAlive结尾处结束循环,而不是更改布尔值。 如果你在第一次击中时杀死怪物,你甚至可以执行monsterHitHero(),如果怪物被杀死的话。击中的功能应该以英雄/怪物的生命为条件。