while循环在需要时不结束

时间:2014-02-16 09:29:17

标签: java while-loop bluej text-based

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

以下是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点健康!

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

3 个答案:

答案 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(),如果怪物被杀死的话。击中的功能应该以英雄/怪物的生命为条件。