Повторение — система здоровья
Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 39 из 65.
Задание
ЛегкоСоздай систему здоровья, в которой компонент здоровья сообщает о каждом изменении, а индикатор здоровья реагирует на него.
Health (health.gd) хранит max_hp и hp (оба изначально равны значению, переданному конструктору) и объявляет три сигнала: damaged(amount, hp), healed(amount, hp) и died.
take_damage(amount)уменьшаетhp, не опуская его ниже0, и отправляет сигналdamagedс фактически потерянным количеством HP и новым значениемhp. Когдаhpдостигает0, также отправляется сигналdied.heal(amount)увеличиваетhp, не превышаяmax_hp, и отправляет сигналhealedс фактически восстановленным количеством HP и новым значениемhp. При полном здоровье восстановление ничего не отправляет.- Если
hpравно0, оба метода ничего не делают.
HealthBar (health_bar.gd) содержит метод watch(health), который подключает все три сигнала к собственным методам. Они выводят -8 HP [12/20], +5 HP [17/20] и Game over. Индикатор хранит максимальное количество HP, которое ему нужно, как число; не сохраняй ссылку на объект Health.
Предоставленный код считывает максимальное количество HP и число следующих команд (damage 8, heal 5), а затем выводит итоговое количество HP. Для максимума 20 и команд damage 8, heal 5, heal 10, damage 30, heal 5 он выводит:
-8 HP [12/20]
+5 HP [17/20]
+3 HP [20/20]
-20 HP [0/20]
Game over
Final HP: 0Твой код нужно поместить в health.gd и health_bar.gd. Файл main.gd содержит предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
extends Node
func _ready():
# Предоставленный код ввода/вывода: оставьте его без изменений
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)
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово selfМетодыСвойстваКонструктор (_init)Повторение: простой калькулятор4Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур7Сигналы
Что такое сигнал?Объявление и отправкаПодключение к сигналамСигналы с аргументамиПовторение — система здоровья10Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»2Свойства классов
Переменные экземпляра и классаСтатические функцииСеттеры свойствГеттеры свойствПриватность по соглашениюПовторение — менеджер банковского счёта5Инкапсуляция
Открытые и закрытые членыПроверка данных с помощью сеттеровСокрытие информацииСвойства только для чтенияПовторение — система учета студентов8Продвинутые концепции ООП
Композиция и наследованиеВнутренние классыУзлы как компонентыRefCounted и NodeПеречисления в классах11Проект: Управление библиотекой
Обзор проектаКлассы книг и пользователей3Наследование
Основы наследованияКлючевое слово superПереопределение методовЦепочки наследованияПроверка типов с помощью isПовторение — иерархия сотрудников6Специальные методы
Введение в виртуальные методыМетод _to_stringПользовательские итераторыПовторение: пользовательский список9Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор GDScript