Ripasso - Sistema della salute
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 39 di 65.
Sfida
FacileRealizza 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)riducehp, senza mai scendere sotto0, ed emettedamagedcon gli HP effettivamente persi e il nuovo valore dihp. Quandohpraggiunge0, emette anchedied.heal(amount)aumentahp, senza mai superaremax_hp, ed emettehealedcon gli HP effettivamente ripristinati e il nuovo valore dihp. 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: 0Il 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
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggetti a confrontoLa parola chiave selfMetodiProprietàCostruttore (_init)Riepilogo - Calcolatrice semplice4Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme7Segnali
Che cos'è un segnale?Dichiarare ed emettereCollegarsi ai segnaliSegnali con argomentiRipasso - Sistema della salute10Pattern di progettazione, parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern Composite2Proprietà delle classi
Variabili di istanza e staticheFunzioni staticheSetter delle proprietàGetter delle proprietàPrivato per convenzioneRiepilogo - Gestore di conti bancari5Incapsulamento
Membri pubblici e privatiValidazione con i setterNascondimento delle informazioniProprietà di sola letturaRiepilogo - Sistema di gestione dei dati degli studenti8Concetti avanzati di OOP
Composizione vs ereditarietàClassi interneNodi come componentiRefCounted vs NodeEnum nelle classi11Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiCatene di ereditarietàControlli di tipo con isRipasso - Gerarchia dei dipendenti6Metodi speciali
Introduzione ai metodi virtualiIl metodo _to_stringIteratori personalizzatiRiepilogo - Lista personalizzata9Modelli di progettazione, parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore GDScript online