Torna al codice della tua pozione magica dell'ultimo esercizio. Dovrai eseguire il codice di guarigione quando il giocatore beve una pozione curativa e il codice di danno quando beve una pozione dannosa.
Prima scrivi un po' di codice...
-
Sembra che dovrai rispondere a una domanda sul tipo di pozione, quindi puoi creare una nuova variabile per tenerne traccia, ovvero una stringa chiamata
PotionType.var PotionType: string = "guarigione" -
Ora puoi chiedere se la variabile
PotionTypeè uguale a un'altra stringa. Quando chiedi sePotionTypeè uguale a"heal", la risposta sarà sì. Il codice di guarigione verrebbe quindi eseguito.if (PotionType = "guarigione"): set PlayerHealth = PlayerHealth + PotionHealAmount -
Ora scrivi un'espressione if simile per il codice di danno.
if (PotionType = "danno"): set PlayerHealth = PlayerHealth - PotionDamageAmountMa un attimo! C'è un problema con il codice di guarigione!
Nulla qui impedisce a un giocatore di continuare a migliorare la propria salute con pozioni. È una buona idea limitare questo, e ora puoi farlo con
if! -
Innanzitutto, dichiara una nuova costante di tipo
float. ChiamalaMaxHealthe impostala su100.0.MaxHealth: float = 100.0Se il valore di
PlayerHealthsupera il valore diMaxHealthquando un giocatore beve la pozione curativa, dovrai impostarePlayerHealthsuMaxHealth.# Codice da eseguire se il giocatore beve una pozione curativa # Se la salute del giocatore non superasse MaxHealth se fosse guarito, # lo guarisce per l'intera quantità if (PotionType = "guarigione" and (PlayerHealth + PotionHealAmount) < MaxHealth): set PlayerHealth = PlayerHealth + PotionHealAmount else: set PlayerHealth = MaxHealthTieni presente che il codice precedente ha una
andper chiedere sePotionTypeè uguale a"guarigione"e sePlayerHealth + PotionAmountè inferiore aMaxHealth. Entrambe queste condizioni devono avere successo per aumentare PlayerHealth di PotionHealAmount.A qualcuno che legge questo codice potrebbe non risultare chiaro che ha lo scopo di impedire a PlayerHealth di superare MaxHealth. È qui che entrano in gioco i commenti sul codice. Tieni presenti le tre righe di commenti sopra il codice corrente.
-
Il codice di danno funziona, ma può essere migliorato con l'uso di
if…else if…else. Se un giocatore beve una pozione di danno che renderebbe PlayerHealth0.0o meno, allora impostiamo PlayerHealth su1.0. Se PlayerHealth è già1.0, allora si imposta su0.0. Questo insegna al giocatore che la pozione è dannosa senza essere troppo punitiva.# Codice da eseguire se il giocatore beve una pozione dannosa # Non elimina il giocatore se la sua salute è superiore a MinHealth ma inferiore a PotionDamageAmount # Se è già uguale o inferiore a MinHealth, lo elimina if (PotionType = "danno" and PlayerHealth > PotionDamageAmount): set PlayerHealth = PlayerHealth - PotionDamageAmount else if (PlayerHealth > MinHealth): # Dà al giocatore un'altra possibilità se la sua salute è bassa set PlayerHealth = 1.0 else: set PlayerHealth = 0.0
... Quindi trovi il bug
Di seguito troverai tutto il codice di questo esercizio, con alcune chiamate di funzione Print() aggiunte per il test. Prova a eseguire questo codice. Cambia pure le chiamate Print() in quello che preferisci. Con la variabile PotionType inizializzata su “heal”, puoi aspettarti che venga eseguito soltanto il codice di guarigione.
Ma aspetta, c'è un bug!
Esegui il codice qui sotto e vedi se riesci a trovarlo.
MaxHealth: float = 100.0
MinHealth: float = 1.0
var PotionType: string = "guarigione"
# Codice da eseguire se il giocatore beve una pozione curativa
# Se la salute del giocatore non superasse MaxHealth se fosse guarito,
# lo guarisce per l'intera quantità
if (PotionType = "guarigione" and (PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Guarigione completa")
else:
# altrimenti, imposta PlayerHealth su MaxHealth
set PlayerHealth = MaxHealth
Print("Salute del giocatore troppo alta per una guarigione completa")
# Codice da eseguire se il giocatore beve una pozione dannosa
# Non elimina il giocatore se la sua salute è superiore a MinHealth ma inferiore a PotionDamageAmount
# Se è già uguale o inferiore a MinHealth, lo elimina
if (PotionType = "danno" and PlayerHealth > PotionDamageAmount):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Danno completo")
else if (PlayerHealth > MinHealth):
# Dà al giocatore un'altra possibilità se la sua salute è bassa
set PlayerHealth = 1.0
Print("Salute del giocatore impostata su 1.0")
else:
# Elimina il giocatore
set PlayerHealth = 0.0
Print("Giocatore eliminato!")
Se PotionType è impostato per guarire, deve essere eseguito soltanto il codice di guarigione. Tuttavia, le espressioni if … else if … if nel codice di danno sono ancora in esecuzione. Ciò significa che se PlayerHealth è maggiore di MinHealth, PlayerHealth verrà impostato su 1.0. Questo non è quello che vuoi, ma puoi risolverlo nidificando gli altri controlli all'interno di espressioni if che controllano soltanto PotionType.
# Codice da eseguire se il giocatore beve una pozione curativa
# Se la salute del giocatore non superasse MaxHealth se fosse guarito,
# lo guarisce per l'intera quantità
if (PotionType = "guarigione"):
if ((PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Guarigione completa")
else:
# imposta PlayerHealth su MaxHealth
set PlayerHealth = MaxHealth
Print("Salute del giocatore troppo alta per una guarigione completa")
# Codice da eseguire se il giocatore beve una pozione dannosa
# Non elimina il giocatore se la sua salute è superiore a MinHealth ma inferiore a PotionDamageAmount
# Se è già uguale o inferiore a MinHealth, lo elimina
if (PotionType = "danno"):
if ((PlayerHealth > PotionDamageAmount)):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Danno completo")
else if (PlayerHealth > MinHealth):
# Dà al giocatore un'altra possibilità se la sua salute è bassa
set PlayerHealth = 1.0
Print("Salute del giocatore impostata su 1.0")
else:
# Elimina il giocatore
set PlayerHealth = 0.0
Print("Giocatore eliminato!")
Ora, verrà eseguito soltanto il blocco di codice rientrato sotto una delle espressioni if che controllano l'esecuzione di PotionType. Prova questo codice anche con PotionType impostato su "danno".
Fiù! Nonostante le molteplici modifiche al codice, ce l'hai fatta!
Fai una pausa, bevi un po'... d'acqua e torna quando vuoi affrontare la prossima lezione.
Script completo
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
hello_world_device := class(creative_device):
# Viene eseguito quando il dispositivo viene avviato in un gioco in esecuzione
OnBegin<override>()<suspends> : void =
MaxHealth : float = 100.0
MinHealth : float = 1.0
var PotionType: string = "guarigione"
set PlayerHealth = 80.0
# Codice da eseguire se il giocatore beve una pozione curativa
# Se la salute del giocatore non superasse MaxHealth se fosse guarito,
# lo guarisce per l'intera quantità
if (PotionType = "guarigione"):
if ((PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Guarigione completa")
else:
# altrimenti, imposta PlayerHealth su MaxHealth
set PlayerHealth = MaxHealth
Print("Salute del giocatore troppo alta per una guarigione completa")
# Codice da eseguire se il giocatore beve una pozione dannosa
# Non elimina il giocatore se la sua salute è superiore a MinHealth ma inferiore a PotionDamageAmount
# Se è già uguale o inferiore a MinHealth, lo elimina
if (PotionType = "danno"):
if ((PlayerHealth > PotionDamageAmount)):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Danno completo")
else if (PlayerHealth > MinHealth):
# Dà al giocatore un'altra possibilità se la sua salute è bassa
set PlayerHealth = 1.0
Print("Salute del giocatore impostata su 1.0")
else:
set PlayerHealth = 0.0
Print("Giocatore eliminato!")
Print("PlayerHealth now {PlayerHealth}")