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.
Desafío
FácilCrea 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)reducehp, nunca por debajo de0, y emitedamagedcon los HP perdidos realmente y los nuevoshp. Cuandohpllega a0, también emitedied.heal(amount)aumentahp, nunca por encima demax_hp, y emitehealedcon los HP restaurados realmente y los nuevoshp. Curarse teniendo la salud al máximo no emite nada.- Cuando
hpes0, 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: 0Tu 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
1Fundamentos de la programación orientada a objetos
Archivos externosIntroducción a la programación orientada a objetosClases vs. objetosLa palabra clave selfMétodosPropiedadesConstructor (_init)Repaso: calculadora sencilla4Polimorfismo
Repaso de la sobrescritura de métodosTipado patoClases y métodos abstractosDiseño de interfacesRepaso: calculadora de formas7Señales
¿Qué es una señal?Declarar y emitirConectarse a las señalesSeñales con argumentosRepaso: sistema de salud10Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite2Propiedades de clase
Variables de instancia y estáticasFunciones estáticasMétodos setter de propiedadesMétodos getter de propiedadesPrivado por convenciónRepaso: administrador de cuentas bancarias5Encapsulación
Miembros públicos y privadosValidación con settersOcultación de informaciónPropiedades de solo lecturaRepaso: sistema de registros de estudiantes8Conceptos avanzados de POO
Composición frente a herenciaClases internasNodos como componentesRefCounted frente a NodeEnums en clases3Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosCadenas de herenciaComprobaciones de tipo con isRepaso: jerarquía de empleados6Métodos especiales
Introducción a los métodos virtualesEl método _to_stringIteradores personalizadosRepaso: lista personalizada9Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de GDScript online