Menu
CoddyTech

Podsumowanie — system zdrowia

Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 39 z 65.

challenge icon

Wyzwanie

Łatwy

Zbuduj system zdrowia, w którym komponent zdrowia informuje o każdej zmianie, a pasek zdrowia na nią reaguje.

Health (health.gd) przechowuje max_hp i hp (obie wartości początkowe są równe wartości przekazanej do konstruktora) oraz deklaruje trzy sygnały: damaged(amount, hp), healed(amount, hp) i died.

  • take_damage(amount) zmniejsza hp, ale nigdy poniżej 0, i emituje sygnał damaged z faktycznie utraconą liczbą HP oraz nową wartością hp. Gdy hp osiągnie 0, emituje również sygnał died.
  • heal(amount) zwiększa hp, ale nigdy powyżej max_hp, i emituje sygnał healed z faktycznie przywróconą liczbą HP oraz nową wartością hp. Leczenie przy pełnym zdrowiu niczego nie emituje.
  • Gdy hp wynosi 0, obie metody nic nie robią.

HealthBar (health_bar.gd) ma metodę watch(health), która łączy wszystkie trzy sygnały z własnymi metodami. Metody te wyświetlają -8 HP [12/20], +5 HP [17/20] i Game over. Pasek przechowuje maksymalną liczbę HP, której potrzebuje, jako liczbę; nie przechowuj odwołania do obiektu Health.

Dostarczony kod odczytuje maksymalną liczbę HP i liczbę kolejnych poleceń (damage 8, heal 5), a następnie wyświetla końcową liczbę HP. Dla maksymalnej liczby 20 oraz poleceń damage 8, heal 5, heal 10, damage 30, heal 5 wyświetla:

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

Twój kod umieść w plikach health.gd i health_bar.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

extends Node

func _ready():
	# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
	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)

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator GDScript online