Menu
CoddyTech

Ripasso - Sistema della salute

Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 39 di 65.

challenge icon

Sfida

Facile

Realizza un sistema di salute in cui il componente della salute annunci ogni cambiamento e una barra della salute reagisca.

Health (health.gd) memorizza max_hp e hp (entrambi iniziano con il valore passato al costruttore) e dichiara tre segnali: damaged(amount, hp), healed(amount, hp) e died.

  • take_damage(amount) riduce hp, senza mai scendere sotto 0, ed emette damaged con gli HP effettivamente persi e il nuovo valore di hp. Quando hp raggiunge 0, emette anche died.
  • heal(amount) aumenta hp, senza mai superare max_hp, ed emette healed con gli HP effettivamente ripristinati e il nuovo valore di hp. Curare quando la salute è al massimo non emette nulla.
  • Quando hp è 0, entrambi i metodi non fanno nulla.

HealthBar (health_bar.gd) ha il metodo watch(health), che collega tutti e tre i segnali ai propri metodi. Questi stampano -8 HP [12/20], +5 HP [17/20] e Game over. La barra memorizza come numero gli HP massimi di cui ha bisogno; non mantenere un riferimento all'oggetto Health.

Il codice fornito legge gli HP massimi e il numero di comandi successivi (damage 8, heal 5), quindi stampa gli HP finali. Per un massimo di 20 e i comandi damage 8, heal 5, heal 10, damage 30, heal 5, stampa:

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

Il tuo codice va inserito in health.gd e health_bar.gd. main.gd contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

extends Node

func _ready():
	# Codice di input/output fornito: lascialo così com'è
	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)

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore GDScript online