복습 - 체력 시스템
Coddy GDScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 65개 중 39번째.
챌린지
쉬움체력 구성 요소가 모든 변경 사항을 알리고 체력 바가 이에 반응하는 체력 시스템을 만드세요.
Health (health.gd)는 max_hp와 hp를 저장하며(둘 다 생성자에 전달된 값으로 시작함), 세 가지 신호를 선언합니다: damaged(amount, hp), healed(amount, hp), died.
take_damage(amount)는hp를 낮추되0미만으로 내려가지 않게 하고, 실제로 잃은 체력과 새로운hp를 전달해damaged를 발생시킵니다.hp가0에 도달하면died도 발생시킵니다.heal(amount)는hp를 높이되max_hp를 초과하지 않게 하고, 실제로 회복한 체력과 새로운hp를 전달해healed를 발생시킵니다. 체력이 가득 찬 상태에서 회복하면 아무 신호도 발생하지 않습니다.hp가0이면 두 메서드 모두 아무것도 하지 않습니다.
HealthBar (health_bar.gd)에는 세 신호를 모두 자체 메서드에 연결하는 watch(health)가 있습니다. 각 메서드는 -8 HP [12/20], +5 HP [17/20], Game over를 출력합니다. 바는 필요한 최대 체력을 숫자로 저장해야 합니다. Health 객체에 대한 참조를 유지하지 마세요.
제공된 코드는 최대 체력과 이어지는 명령의 개수(damage 8, heal 5)를 읽은 다음 최종 체력을 출력합니다. 최대 체력이 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)
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러