89 votes

Comment peux j’incrémente une variable sans dépasser une valeur maximale ?

Je suis en train de travailler sur un jeu vidéo simple programme pour l'école et j'ai créé une méthode où le joueur reçoit 15 points de santé si la méthode est appelée. Je dois garder la santé à un maximum de 100 et avec mon peu de capacité de programmation à ce point, je suis en train de faire quelque chose comme cela.

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

Je comprends ma syntaxe propos n'est pas parfait, mais ma question est, ce que peut être une meilleure façon de le faire, parce que j'ai aussi à faire quelque chose de similaire avec les points de dommage et de ne pas descendre en dessous de 0.

222voto

ChrisForrence Points 5228

Je voudrais juste faire cela. Fondamentalement, il faut au minimum entre 100 (le PV max) et quelle serait la santé avec 15 points supplémentaires. Il veille à ce que la santé de l’utilisateur ne dépasse pas 100.

Pour s’assurer que les points de vie ne laissez pas tomber au-dessous de zéro, vous pouvez utiliser une fonction similaire : `` .

71voto

Jordan Points 1222

Il suffit d’ajouter 15 à la santé, donc :

Aussi fade a toutefois noté, parfois avec multi-threading (plusieurs blocs de code qui s’exécute à la fois) avoir la santé vont de plus de 100 en un point quelconque peut causer des problèmes, et modification de la propriété de santé plusieurs fois peut aussi être mauvaise. Dans ce cas, vous pourriez faire ceci, comme mentionné dans d’autres réponses.

45voto

rgettman Points 74908

Vous n’avez pas besoin une affaire distincte pour chaque plus haut . Juste avoir un , de sorte que si la santé est déjà ou supérieur, puis vient la définir directement à `` .

37voto

tieTYT Points 15326

Je pense qu'un idiomatiques, orientée objet de la façon de le faire est d'avoir un setHealth sur le Character classe. La mise en œuvre de cette méthode ressemble à ceci:

public void setHealth(int newValue) {
    health = Math.max(0, Math.min(100, newValue))
}

Cela empêche la santé de descendre en dessous de 0 ou supérieur à 100, quel que soit ce que vous.


Votre getHealed() mise en œuvre peut être simplement ceci:

public void getHealed() {
    setHealth(getHealth() + 15);
}

Si cela a du sens pour l' Character d'un getHealed() méthode est un exercice laissé au lecteur :)

14voto

5tar-Kaster Points 475

Je vais seulement vous donner une plus réutilisable tranche de code, de son pas le plus petit, mais vous pouvez l'utiliser avec n'importe quelle quantité, donc c'est toujours la peine d'être dit

health += amountToHeal;
if (health >= 100) 
{ 
    health = 100;
}

Vous pouvez également modifier l'ordre de 100 à un maxHealth variable si vous souhaitez ajouter des stats sur le jeu de vos décisions, de sorte que toute la méthode peut être quelque chose comme ceci

private int maxHealth = 100;
public void heal(int amountToHeal)
{
    health += amountToHeal;
    if (health >= maxHealth) 
    { 
        health = maxHealth;
    }
}

MODIFIER

Pour plus de renseignements

On pourrait faire la même lorsque le joueur est endommagé, mais vous n'avez pas besoin d'un minHealth parce que ce serait 0 façon que ce soit. Le faisant de cette façon vous serez en mesure de dommages et de guérir toute montants avec le même code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X