Menu
CoddyTech

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.

challenge icon

Défi

Facile

Construis 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) diminue hp, sans jamais descendre sous 0, et émet damaged avec les HP réellement perdus et le nouveau hp. Lorsque hp atteint 0, elle émet également died.
  • heal(amount) augmente hp, sans jamais dépasser max_hp, et émet healed avec les HP réellement restaurés et le nouveau hp. Soigner lorsque la santé est au maximum n'émet rien.
  • Une fois que hp vaut 0, 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: 0

Ton 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

Entraînez-vous par vous-même : Compilateur GDScript en ligne