Revenez au code de votre potion magique de l'exercice précédent. Vous devrez exécuter le code de guérison lorsque le joueur boit une potion de guérison, et le code de blessure lorsqu'il boit une potion de blessure.
Commencer par écrire du code
-
Dans la mesure où vous devez définir le type de potion, vous pouvez créer une nouvelle variable, notamment une chaîne appelée
PotionType.var PotionType: string = "heal" -
Vous pouvez maintenant demander si la variable
PotionTypeest égale à une autre chaîne. Si vous vous demandez siPotionTypeest égal à"heal", la réponse est oui. Le code de guérison est donc exécuté.if (PotionType = "heal"): set PlayerHealth = PlayerHealth + PotionHealAmount -
À présent, écrivez une expression if semblable pour le code de dégâts.
if (PotionType = "damage"): set PlayerHealth = PlayerHealth - PotionDamageAmountPas si vite ! Le code de guérison présente un problème.
Rien n'empêche un joueur de continuer à augmenter sa santé avec des potions. Vous pouvez définir des limites pour éviter cet écueil à l’aide de l’expression
if. -
Tout d'abord, déclarez une nouvelle constante de type
float. Appelez-laMaxHealthet définissez-la sur100.0.MaxHealth: float = 100.0Si la valeur de
PlayerHealthdépasse la valeur deMaxHealthlorsqu'un joueur boit la potion de guérison, vous devez définirPlayerHealthsurMaxHealth.# Code à exécuter si le joueur boit une potion de guérison # Si la santé du joueur ne dépasse pas MaxHealth lors de sa guérison, # guérissez-le avec la totalité de la valeur if (PotionType = "heal" and (PlayerHealth + PotionHealAmount) < MaxHealth): set PlayerHealth = PlayerHealth + PotionHealAmount else: set PlayerHealth = MaxHealthNotez que le code ci-dessus contient
andpour demander si lePotionTypeest égal à"heal"et siPlayerHealth + PotionAmountest inférieur àMaxHealth. Il est nécessaire de remplir ces deux conditions pour améliorer la santé du joueur en fonction du paramètre PotionHealAmount.Il est possible que d’autres personnes qui lisent ce code ne se rendent pas compte qu'il est destiné à empêcher PlayerHealth de dépasser MaxHealth. C’est là où les commentaires de code entrent en jeu. Notez les trois lignes de commentaires au-dessus du code proprement dit.
-
Le code de dégâts fonctionne, mais vous pouvez l'améliorer en utilisant
if...else if...else. Si les PV du joueur sont de0.0ou moins lorsqu'il boit une potion créant des dégâts, vous pouvez, si vous le souhaitez, définir PlayerHealth sur1.0. Si le paramètre PlayerHealth est déjà sur1.0, alors nous le réglons sur0.0. Le joueur apprend ainsi que la potion est nocive sans être trop destructrice.# Code à exécuter si le joueur boit une potion de blessure # Ne pas éliminer le joueur si sa santé est supérieure à MinHealth mais inférieure à PotionDamageAmount # Si elle est déjà égale ou inférieure à la valeur MinHealth, éliminez les joueurs. if (PotionType = "damage" and PlayerHealth > PotionDamageAmount): set PlayerHealth = PlayerHealth - PotionDamageAmount else if (PlayerHealth > MinHealth): # Donner au joueur une chance supplémentaire si ses PV sont faibles set PlayerHealth = 1.0 else: set PlayerHealth = 0.0
... Voici où se trouve le hic.
Vous trouverez ci-dessous tout le code de cet exercice, avec certains appels à la fonction Print() ajoutés à des fins de test. Essayez d'exécuter ce code. N'hésitez pas à changer les appels à Print() selon vos besoins. Avec la variable PotionType initialisée à "heal", il est très probable que seul le code de guérison s'exécute.
Mais pas si vite, un bogue s’est produit !
Exécutez le code ci-dessous pour voir si vous le trouvez.
MaxHealth: float = 100.0
MinHealth: float = 1.0
var PotionType: string = "heal"
# Code à exécuter si le joueur boit une potion de guérison
# Si la santé du joueur ne dépasse pas MaxHealth lors de sa guérison,
# guérissez-le avec la totalité de la valeur
if (PotionType = "heal" and (PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Full heal")
else:
# sinon, définir PlayerHealth sur MaxHealth
set PlayerHealth = MaxHealth
Print("PlayerHealth too high for full heal")
# Code à exécuter si le joueur boit une potion de blessure
# Ne pas éliminer le joueur si sa santé est supérieure à MinHealth mais inférieure à PotionDamageAmount
# Si elle est déjà égale ou inférieure à la valeur MinHealth, éliminez les joueurs.
if (PotionType = "damage" and PlayerHealth > PotionDamageAmount):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Full damage")
else if (PlayerHealth > MinHealth):
# Donner au joueur une chance supplémentaire si ses PV sont faibles
set PlayerHealth = 1.0
Print("PlayerHealth set to 1.0")
else:
# Éliminer le joueur
set PlayerHealth = 0.0
Print("Player eliminated!")
Si PotionType est défini sur heal, seul le code de guérison doit être exécuté. Cependant, les expressions if ... else if ... if dans le code de dégât sont toujours exécutées. Cela signifie que si PlayerHealth est supérieure à MinHealth, PlayerHealth est définie sur 1.0. Nous vous conseillons d’éviter ce cas de figure ; pour cela, imbriquez les autres vérifications dans des expressions if qui ne vérifient que PotionType.
# Code à exécuter si le joueur boit une potion de guérison
# Si la santé du joueur ne dépasse pas MaxHealth lors de sa guérison,
# guérissez-le avec la totalité de la valeur
if (PotionType = "heal"):
if ((PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Full heal")
else:
# définir PlayerHealth sur MaxHealth
set PlayerHealth = MaxHealth
Print("PlayerHealth too high for full heal")
# Code à exécuter si le joueur boit une potion de blessure
# Ne pas éliminer le joueur si sa santé est supérieure à MinHealth mais inférieure à PotionDamageAmount
# Si elle est déjà égale ou inférieure à la valeur MinHealth, éliminez les joueurs.
if (PotionType = "damage"):
if ((PlayerHealth > PotionDamageAmount)):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Full damage")
else if (PlayerHealth > MinHealth):
# Donner au joueur une chance supplémentaire si ses PV sont faibles
set PlayerHealth = 1.0
Print("PlayerHealth set to 1.0")
else:
# Éliminer le joueur
set PlayerHealth = 0.0
Print("Player eliminated!")
Maintenant, seul le bloc de code mis en retrait sous l'une des expressions if qui vérifie PotionType est exécuté. Testez ce code en définissant aussi PotionType sur "damage".
Bravo ! Vous avez dû changer pas mal de choses dans le code, mais vous avez réussi !
Faites une pause, buvez une potion – pardon, de l’eau –, et revenez quand vous serez prêt pour la prochaine leçon.
Script complet
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation } }
hello_world_device := class(creative_device):
# S'exécute à l'activation de l'appareil dans une partie en cours.
OnBegin<override>()<suspends> : void =
MaxHealth : float = 100.0
MinHealth : float = 1.0
var PotionType: string = "heal"
set PlayerHealth = 80.0
# Code à exécuter si le joueur boit une potion de guérison
# Si la santé du joueur ne dépasse pas MaxHealth lors de sa guérison,
# guérissez-le avec la totalité de la valeur
if (PotionType = "heal"):
if ((PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Full heal")
else:
# sinon, définir PlayerHealth sur MaxHealth
set PlayerHealth = MaxHealth
Print("PlayerHealth too high for full heal")
# Code à exécuter si le joueur boit une potion de blessure
# Ne pas éliminer le joueur si sa santé est supérieure à MinHealth mais inférieure à PotionDamageAmount
# Si elle est déjà égale ou inférieure à la valeur MinHealth, éliminez les joueurs.
if (PotionType = "damage"):
if ((PlayerHealth > PotionDamageAmount)):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Full damage")
else if (PlayerHealth > MinHealth):
# Donner au joueur une chance supplémentaire si ses PV sont faibles
set PlayerHealth = 1.0
Print("PlayerHealth set to 1.0")
else:
set PlayerHealth = 0.0
Print("Player eliminated!")
Print("PlayerHealth now {PlayerHealth}")