Menu
CoddyTech

Rückblick – Gesundheitssystem

Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 39 von 65.

challenge icon

Aufgabe

Einfach

Erstelle ein Gesundheitssystem, in dem die Gesundheitskomponente jede Änderung meldet und ein Gesundheitsbalken darauf reagiert.

Health (health.gd) speichert max_hp und hp (beide beginnen mit dem dem Konstruktor übergebenen Wert) und deklariert drei Signale: damaged(amount, hp), healed(amount, hp) und died.

  • take_damage(amount) verringert hp, niemals unter 0, und löst damaged mit den tatsächlich verlorenen HP und dem neuen hp aus. Wenn hp 0 erreicht, löst es auch died aus.
  • heal(amount) erhöht hp, niemals über max_hp, und löst healed mit den tatsächlich wiederhergestellten HP und dem neuen hp aus. Heilung bei voller Gesundheit löst kein Signal aus.
  • Sobald hp 0 beträgt, tun beide Methoden nichts.

HealthBar (health_bar.gd) hat die Methode watch(health), die alle drei Signale mit den eigenen Methoden verbindet. Diese geben -8 HP [12/20], +5 HP [17/20] und Game over aus. Der Balken speichert die maximale HP-Anzahl, die er benötigt; behalte keine Referenz auf das Health-Objekt.

Der bereitgestellte Code liest die maximale HP-Anzahl und wie viele Befehle folgen (damage 8, heal 5) und gibt dann die endgültigen HP aus. Bei einem Maximum von 20 und damage 8, heal 5, heal 10, damage 30, heal 5 gibt er Folgendes aus:

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

Dein Code gehört in health.gd und health_bar.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.

Probier es selbst

extends Node

func _ready():
	# Vorgegebener Ein-/Ausgabecode: unverändert lassen
	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)

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-GDScript-Compiler