Ô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.
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ảmhp, nhưng không bao giờ thấp hơn0, rồi phát tín hiệudamagedvới lượng HP thực tế đã mất và giá trịhpmới. Khihpđạt0, hàm cũng phát tín hiệudied.heal(amount)tănghp, nhưng không bao giờ vượt quámax_hp, rồi phát tín hiệuhealedvới lượng HP thực tế được hồi và giá trịhpmới. Hồi máu khi đầy sẽ không phát tín hiệu nào.- Khi
hpbằng0, 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: 0Viế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
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa selfPhương thứcThuộc tínhHàm khởi tạo (_init)Ôn tập: máy tính đơn giản4Tính đa hình
Xem lại cách ghi đè phương thứcĐịnh kiểu vịtLớp và phương thức trừu tượngThiết kế interfaceÔn tập: máy tính hình học7Tín hiệu
Tín hiệu là gì?Khai báo và phát tín hiệuKết nối với tín hiệuTín hiệu có đối sốÔn tập: hệ thống sức khỏe10Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổng hợp2Thuộc tính của lớp
Biến instance và biến staticHàm staticPhương thức thiết lập thuộc tínhPhương thức lấy thuộc tínhQuy ước về tính riêng tưÔn tập: trình quản lý tài khoản ngân hàng5Tính đóng gói
Thành viên công khai và riêng tưXác thực bằng phương thức setterẨn thông tinThuộc tính chỉ đọcÔn tập: hệ thống hồ sơ học sinh8Khái niệm OOP nâng cao
Kết hợp và kế thừaLớp bên trongNode dưới dạng thành phầnRefCounted và NodeEnum trong lớpTự luyện tập: Trình biên dịch GDScript online