Menu
CoddyTech

Ôn tập: hệ thống sức khỏe

Thuộc phần Lập trình hướng đối tượng trong hành trình GDScript của Coddy. Bài học 39 trên 65.

challenge icon

Thử thách

Dễ

Xây dựng hệ thống máu, trong đó thành phần quản lý máu thông báo mỗi khi có thay đổi và thanh máu phản ứng với thông báo đó.

Health (health.gd) lưu max_hp và hp (cả hai đều bắt đầu bằng giá trị được truyền cho hàm khởi tạo) và khai báo ba tín hiệu: damaged(amount, hp), healed(amount, hp) và died.

  • take_damage(amount) giảm hp, nhưng không bao giờ thấp hơn 0, rồi phát tín hiệu damaged với lượng HP thực tế đã mất và giá trị hp mới. Khi hp đạt 0, hàm cũng phát tín hiệu died.
  • heal(amount) tăng hp, nhưng không bao giờ vượt quá max_hp, rồi phát tín hiệu healed với lượng HP thực tế được hồi và giá trị hp mới. Hồi máu khi đầy sẽ không phát tín hiệu nào.
  • Khi hp bằng 0, cả hai phương thức đều không làm gì.

HealthBar (health_bar.gd) có watch(health), phương thức này kết nối cả ba tín hiệu với các phương thức riêng của nó. Các phương thức đó in ra -8 HP [12/20], +5 HP [17/20] và Game over. Thanh máu lưu lượng HP tối đa cần dùng dưới dạng một con số; đừng giữ tham chiếu đến đối tượng Health.

Code được cung cấp đọc HP tối đa và số lượng lệnh tiếp theo (damage 8, heal 5), rồi in HP cuối cùng. Với HP tối đa là 20 và các lệnh damage 8, heal 5, heal 10, damage 30, heal 5, chương trình in ra:

-8 HP [12/20]
+5 HP [17/20]
+3 HP [20/20]
-20 HP [0/20]
Game over
Final HP: 0

Viết code của bạn trong health.gd và health_bar.gd. main.gd chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

extends Node

func _ready():
	# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
	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)

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch GDScript online