在射击机器人程序中使用逻辑运算符

时间:2018-11-13 13:28:35

标签: c#

这是控制火炮射击机器人的C#代码。

static bool ShouldFire(bool enemyInFront, string enemyName, int robotHealth)
{
    bool shouldFire = true;
    if (enemyInFront == true)
    {
        if (enemyName == "boss")
        {
            if (robotHealth < 50) shouldFire = false;
            if (robotHealth > 100) shouldFire = true;
        }
    }
    else
    {
        return false;
    }
    return shouldFire;
}

该代码看起来有些尴尬,并且可以大大缩短重写时间。 stackoverflow上的社区可以建议一种c#方法,该方法与上面的代码相同,但是使用一个操作吗?请您提出建议。这是人们正在寻找的一些模板:

static bool ShouldFire2(bool enemyInFront, string enemyName, int robotHealth)
{
    return enemyInFront && (...);
}

我希望您能获得一些有关如何实现预期结果的解释。

2 个答案:

答案 0 :(得分:2)

我的建议是这样

static bool ShouldFire2(bool enemyInFront, string enemyName, int robotHealth)
{
    return enemyInFront && (enemyName == "boss" ? robotHealth >= 50 : true);
}

您首先要检查前方是否有敌人。如果是,请检查其是否为boss,并且其hp大于50,然后返回true,否则返回false。如果不是老板,请始终返回true。如果角色前面没有任何东西,则为false。

答案 1 :(得分:0)

“ if(robotHealth> 100)shouldFire = true;”行什么也没做。除非生命值低于50,否则shouldFire已经为真。

因此您可以将该部分缩小为:

static bool ShouldFire(bool enemyInFront, string enemyName, int robotHealth)
{
    bool shouldFire = true;
    if (enemyInFront == true)
    {
        return !(enemyName != "boss" && robotHealth < 50);      }
    else
    {
        return false;
    }
    return shouldFire;
}

可以简化为:

static bool ShouldFire(bool enemyInFront, string enemyName, int robotHealth)
{
    return enemyInFront && (enemyName != "boss" || robotHealth >= 50);
}