Menu
CoddyTech

복습 - 체력 시스템

Coddy GDScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 65개 중 39번째.

challenge icon

챌린지

쉬움

체력 구성 요소가 모든 변경 사항을 알리고 체력 바가 이에 반응하는 체력 시스템을 만드세요.

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 컴파일러