如何设置整数的最小值和最大值?

6

我如何为整数添加最小值和最大值? 我希望整数永远不会变为负数,也永远不会超过100

以下是示例:

int hp = 100;

std::cout << "You cast healing magic to yourself!" << std::endl;
hp += 20;
mp -= 25;

例如,健康值为100,但当释放治疗魔法时,它变为了120。我想要的是,无论有多少治疗魔法被释放,它都保持为100。

4
你无法使用任何普通的整数类型来完成这个操作。你可以创建一个新类型,但这可能不值得。我建议在更新值时有时考虑调用 std::clamp - BoBTFish
在这种情况下(您知道变化的方向),一个简单的 std::min(hp + 20, 100) 就足够了。您应该事先检查法力值,并且如果角色不足,则不允许咒语成功。 - Sebastian
3个回答

15
您可以使用 std::clamp
hp = std::clamp(hp + 20, 0, 100);
mp = std::clamp(mp - 25, 0, 100);

1
使用 minmax 可以节省几条指令 :) - Ayxan Haqverdili

4

如果您使用支持C++ 17的编译器,您可以像@TedLyngmo建议的那样使用std::clamp。如果不支持,则可以编写一个简单的函数来管理hpmp的限制:

void change(int& orig, int val)
{
    int temp = orig + val;
    if (temp <= 0)
        temp = 0;
    else if (temp >= 100)
        temp = 100;
    orig = temp;
}

int main()
{
    int hp = 40, mp = 40;

    std::cout << "You cast healing magic to yourself!" << std::endl;
    
    change(hp, 50);
    change(mp, -25);

    std::cout << hp << " " << mp << std::endl;
}

-2

我相信你想表达的是,无论治疗魔法是什么,你都希望以100或你当前的生命值来展示它。如果是这样,你可以将20和25存储为变量,并创建另一个具有与原始变量相同值的变量,并对其进行操作。不要改变原始变量的值,这样你就可以展示它。


目前你的回答不够清晰,请进行[编辑]以添加更多详细信息,帮助其他人了解它如何回答所提出的问题。你可以在帮助中心找到更多关于如何撰写好回答的信息。 - Community
如果您需要撤销许多更改,这将特别有帮助,如果操作失败。将这些变量捆绑在一个类或结构中,并像事务一样复制所有变量可能是有意义的。这种情况可能更简单。 - Sebastian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接