Menu
CoddyTech

Repaso: sistema de salud

Parte de la sección Programación orientada a objetos del Journey de GDScript de Coddy. Lección 39 de 65.

challenge icon

Desafío

Fácil

Crea un sistema de salud en el que el componente de salud anuncie cada cambio y una barra de salud reaccione a él.

Health (health.gd) almacena max_hp y hp (ambos comienzan con el valor dado al constructor) y declara tres señales: damaged(amount, hp), healed(amount, hp) y died.

  • take_damage(amount) reduce hp, nunca por debajo de 0, y emite damaged con los HP perdidos realmente y los nuevos hp. Cuando hp llega a 0, también emite died.
  • heal(amount) aumenta hp, nunca por encima de max_hp, y emite healed con los HP restaurados realmente y los nuevos hp. Curarse teniendo la salud al máximo no emite nada.
  • Cuando hp es 0, ambos métodos no hacen nada.

HealthBar (health_bar.gd) tiene watch(health), que conecta las tres señales con sus propios métodos. Estos imprimen -8 HP [12/20], +5 HP [17/20] y Game over. La barra almacena el máximo de HP que necesita como número; no guardes una referencia al objeto Health.

El código proporcionado lee el máximo de HP y cuántos comandos siguen (damage 8, heal 5) y después imprime los HP finales. Para un máximo de 20 y damage 8, heal 5, heal 10, damage 30, heal 5, imprime:

-8 HP [12/20]
+5 HP [17/20]
+3 HP [20/20]
-20 HP [0/20]
Game over
Final HP: 0

Tu código va en health.gd y health_bar.gd. main.gd contiene el código de entrada/salida proporcionado y no se puede editar.

Pruébalo tú mismo

extends Node

func _ready():
	# Código de entrada/salida proporcionado: mantenlo tal como está
	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)

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de GDScript online