Rückblick – Gesundheitssystem
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 39 von 65.
Aufgabe
EinfachErstelle 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)verringerthp, niemals unter0, und löstdamagedmit den tatsächlich verlorenen HP und dem neuenhpaus. Wennhp0erreicht, löst es auchdiedaus.heal(amount)erhöhthp, niemals übermax_hp, und lösthealedmit den tatsächlich wiederhergestellten HP und dem neuenhpaus. Heilung bei voller Gesundheit löst kein Signal aus.- Sobald
hp0beträ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: 0Dein 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
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort selfMethodenEigenschaftenKonstruktor (_init)Wiederholung – Einfacher Taschenrechner4Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypisierungAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner7Signale
Was ist ein Signal?Deklarieren und AuslösenMit Signalen verbindenSignale mit ArgumentenRückblick – Gesundheitssystem2Klassenattribute
Instanz- vs. statische VariablenStatische FunktionenProperty-SetterProperty-GetterPrivat nach KonventionWiederholung – Bankkontenverwaltung5Kapselung
Öffentliche und private MemberValidierung mit SetternInformationsverbergenSchreibgeschützte EigenschaftenRückblick – System zur Schülerverwaltung8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungInnere KlassenNodes als KomponentenRefCounted vs. NodeEnums in Klassen11Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungVererbungskettenTypprüfungen mit isWiederholung – Mitarbeiterhierarchie6Spezielle Methoden
Einführung in virtuelle MethodenDie _to_string-MethodeBenutzerdefinierte IteratorenRückblick – Benutzerdefinierte Liste9Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBeobachter-MusterStrategie-Muster12Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungÜbe selbstständig: Online-GDScript-Compiler