Menu
CoddyTech

Rangkuman, Sistem Kesehatan

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 39 dari 65.

challenge icon

Tantangan

Mudah

Buat sistem health yang membuat komponen health mengumumkan setiap perubahan dan health bar meresponsnya.

Health (health.gd) menyimpan max_hp dan hp (keduanya dimulai dari nilai yang diberikan kepada constructor) dan mendeklarasikan tiga signal: damaged(amount, hp), healed(amount, hp), dan died.

  • take_damage(amount) mengurangi hp, tidak pernah kurang dari 0, dan mengeluarkan signal damaged dengan jumlah HP yang benar-benar hilang dan nilai baru hp. Saat hp mencapai 0, fungsi ini juga mengeluarkan signal died.
  • heal(amount) menambah hp, tidak pernah melebihi max_hp, dan mengeluarkan signal healed dengan jumlah HP yang benar-benar dipulihkan dan nilai baru hp. Memulihkan health saat health penuh tidak mengeluarkan signal apa pun.
  • Setelah hp bernilai 0, kedua fungsi tidak melakukan apa pun.

HealthBar (health_bar.gd) memiliki watch(health), yang menghubungkan ketiga signal ke method miliknya. Method tersebut mencetak -8 HP [12/20], +5 HP [17/20], dan Game over. Bar menyimpan HP maksimum yang dibutuhkannya sebagai angka. Jangan menyimpan referensi ke object Health.

Kode yang disediakan membaca HP maksimum dan jumlah perintah berikutnya (damage 8, heal 5), lalu mencetak HP akhir. Untuk HP maksimum 20 dan perintah damage 8, heal 5, heal 10, damage 30, heal 5, kode ini mencetak:

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

Tulis kodemu di health.gd dan health_bar.gd. main.gd berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

extends Node

func _ready():
	# Kode input/output yang disediakan: biarkan apa adanya
	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)

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler GDScript online