Revisão - Sistema de saúde
Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 39 de 65.
Desafio
FácilCrie um sistema de vida no qual o componente de vida anuncie cada alteração e uma barra de vida reaja a ela.
Health (health.gd) armazena max_hp e hp (ambos começam com o valor fornecido ao construtor) e declara três sinais: damaged(amount, hp), healed(amount, hp) e died.
take_damage(amount)reduzhp, sem nunca ficar abaixo de0, e emitedamagedcom o HP realmente perdido e o novo valor dehp. Quandohpchega a0, também emitedied.heal(amount)aumentahp, sem nunca ultrapassarmax_hp, e emitehealedcom o HP realmente restaurado e o novo valor dehp. Curar com a vida cheia não emite nada.- Quando
hpé0, ambos os métodos não fazem nada.
HealthBar (health_bar.gd) tem o método watch(health), que conecta os três sinais aos próprios métodos. Eles exibem -8 HP [12/20], +5 HP [17/20] e Game over. A barra armazena o HP máximo de que precisa como um número; não mantenha uma referência ao objeto Health.
O código fornecido lê o HP máximo e quantos comandos vêm em seguida (damage 8, heal 5), e então exibe o HP final. Para um máximo de 20 e os comandos damage 8, heal 5, heal 10, damage 30, heal 5, ele exibe:
-8 HP [12/20]
+5 HP [17/20]
+3 HP [20/20]
-20 HP [0/20]
Game over
Final HP: 0Seu código deve ficar em health.gd e health_bar.gd. main.gd contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
extends Node
func _ready():
# Código de entrada/saída fornecido: mantenha-o como está
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)
Todas as lições de Programação orientada a objetos
1Fundamentos da POO
Arquivos externosIntrodução à POOClasses vs. objetosA palavra-chave selfMétodosPropriedadesConstrutor (_init)Revisão - Calculadora simples4Polimorfismo
Revisitando a Sobrescrita de MétodosDuck TypingClasses e Métodos AbstratosDesign de InterfacesRevisão - Calculadora de Formas7Sinais
O que é um sinal?Declarando e emitindoConectando-se a sinaisSinais com argumentosRevisão - Sistema de saúde10Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite2Propriedades de Classe
Variáveis de Instância vs. EstáticasFunções EstáticasMétodos Setters de PropriedadeMétodos Getters de PropriedadePrivado por ConvençãoRecapitulando: Gerenciador de Conta Bancária5Encapsulamento
Membros públicos e privadosValidação com settersOcultação de informaçõesPropriedades somente para leituraRevisão - Sistema de registros de alunos8Conceitos Avançados de POO
Composição vs. HerançaClasses InternasNós como ComponentesRefCounted vs. NodeEnums em Classes3Herança
Herança básicaA palavra-chave superSobrescrita de métodosCadeias de herançaVerificações de tipo com isRevisão - Hierarquia de funcionários6Métodos especiais
Introdução aos métodos virtuaisO método _to_stringIteradores personalizadosRevisão - Lista personalizada9Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão StrategyPratique por conta própria: Compilador de GDScript online