Podsumowanie — system zdrowia
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 39 z 65.
Wyzwanie
ŁatwyZbuduj 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)zmniejszahp, ale nigdy poniżej0, i emituje sygnałdamagedz faktycznie utraconą liczbą HP oraz nową wartościąhp. Gdyhposiągnie0, emituje również sygnałdied.heal(amount)zwiększahp, ale nigdy powyżejmax_hp, i emituje sygnałhealedz faktycznie przywróconą liczbą HP oraz nową wartościąhp. Leczenie przy pełnym zdrowiu niczego nie emituje.- Gdy
hpwynosi0, 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: 0Twó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
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online