Récapitulatif - système de santé
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 39 sur 65.
Défi
FacileConstruis un système de santé dans lequel le composant de santé annonce chaque changement et une barre de santé y réagit.
Health (health.gd) stocke max_hp et hp (les deux commencent à la valeur transmise au constructeur) et déclare trois signaux : damaged(amount, hp), healed(amount, hp) et died.
take_damage(amount)diminuehp, sans jamais descendre sous0, et émetdamagedavec les HP réellement perdus et le nouveauhp. Lorsquehpatteint0, elle émet égalementdied.heal(amount)augmentehp, sans jamais dépassermax_hp, et émethealedavec les HP réellement restaurés et le nouveauhp. Soigner lorsque la santé est au maximum n'émet rien.- Une fois que
hpvaut0, les deux méthodes ne font rien.
HealthBar (health_bar.gd) possède watch(health), qui connecte les trois signaux à ses propres méthodes. Celles-ci affichent -8 HP [12/20], +5 HP [17/20] et Game over. La barre stocke le nombre de HP maximum dont elle a besoin ; ne conserve pas de référence à l'objet Health.
Le code fourni lit le nombre maximal de HP et le nombre de commandes qui suivent (damage 8, heal 5), puis affiche les HP finaux. Pour un maximum de 20 et les commandes damage 8, heal 5, heal 10, damage 30, heal 5, il affiche :
-8 HP [12/20]
+5 HP [17/20]
+3 HP [20/20]
-20 HP [0/20]
Game over
Final HP: 0Ton code va dans health.gd et health_bar.gd. main.gd contient le code d'entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
extends Node
func _ready():
# Code d'entrée/sortie fourni : conservez-le tel quel
var health := Health.new(int(OS.read_string_from_stdin()))
var bar := HealthBar.new()
bar.watch(health)
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "damage":
health.take_damage(int(parts[1]))
elif parts[0] == "heal":
health.heal(int(parts[1]))
print("Final HP: ", health.hp)
Toutes les leçons de Programmation orientée objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne