Ste*_*Eck 89 java if-statement switch-statement saturation-arithmetic
我正在为学校制作一个简单的视频游戏程序,我已经创建了一种方法,如果调用该方法,玩家将获得15个健康点.我必须保持最高100的健康状态,并且我现在有限的编程能力,我正在做这样的事情.
public void getHealed(){
if(health <= 85)
health += 15;
else if(health == 86)
health += 14;
else if(health == 87)
health += 13;
}// this would continue so that I would never go over 100
Run Code Online (Sandbox Code Playgroud)
我理解我的语法并不完美,但我的问题是,这可能是一个更好的方法,因为我还必须对损伤点做类似的事情,而不是低于0.
这称为饱和算术.
Chr*_*nce 222
我会这样做的.它基本上需要在100(最大生命值)和15点额外健康之间的最小值.它确保用户的健康不超过100.
public void getHealed() {
health = Math.min(health + 15, 100);
}
Run Code Online (Sandbox Code Playgroud)
为确保生命值不低于零,您可以使用类似的功能:Math.max.
public void takeDamage(int damage) {
if(damage > 0) {
health = Math.max(health - damage, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
Jor*_*dan 71
只需为健康添加15,所以:
health += 15;
if(health > 100){
health = 100;
}
Run Code Online (Sandbox Code Playgroud)
然而,正如bland所指出的,有时多线程(多个代码块同时执行),健康状况在任何时候都超过100 可能会导致问题,并且多次更改健康属性也可能很糟糕.在这种情况下,您可以这样做,如其他答案中所述.
if(health + 15 > 100) {
health = 100;
} else {
health += 15;
}
Run Code Online (Sandbox Code Playgroud)
rge*_*man 45
int上面的每一个都不需要单独的案例85.只有一个else,所以如果健康已经86或更高,那么只需将其直接设置为100.
if(health <= 85)
health += 15;
else
health = 100;
Run Code Online (Sandbox Code Playgroud)
Dan*_*lan 37
我认为这种惯用的,面向对象的方式是setHealth在Character课堂上有一个.该方法的实现如下所示:
public void setHealth(int newValue) {
health = Math.max(0, Math.min(100, newValue))
}
Run Code Online (Sandbox Code Playgroud)
无论您将其设置为什么,这都可以防止健康状况低于0或高于100.
您的getHealed()实现可以是这样的:
public void getHealed() {
setHealth(getHealth() + 15);
}
Run Code Online (Sandbox Code Playgroud)
Character对于有一个getHealed()方法是否有意义是一个练习留给读者:)
5ta*_*ter 14
我只是提供一个更可重复的代码片段,它不是最小的但你可以使用任何数量的它,所以它仍然值得说
health += amountToHeal;
if (health >= 100)
{
health = 100;
}
Run Code Online (Sandbox Code Playgroud)
如果你想为你制作的游戏添加统计数据,你也可以将100改为maxHealth变量,所以整个方法可能是这样的
private int maxHealth = 100;
public void heal(int amountToHeal)
{
health += amountToHeal;
if (health >= maxHealth)
{
health = maxHealth;
}
}
Run Code Online (Sandbox Code Playgroud)
有关其他信息
你可以做同样的事情,当玩家受到损害,但你不需要minHealth,因为无论如何这将是0.通过这种方式,您可以使用相同的代码损坏和治愈任何金额.