Game engine básico
Em jogos reais, você encontra sistemas de batalha por turnos em RPGs como Pokémon ou Final Fantasy. Dominar a modelagem de entidades com classes separadas (jogador, inimigo, item) permite reutilizar e estender comportamentos sem bagunçar o código. Usar encapsulamento com #campo garante que atributos como vida não sejam alterados indevidamente de fora.
O PROBLEMA
Crie engine de jogo RPG: Entity, Player, Enemy, Item. Batalha com turnos, vida, ataque, defesa, itens e XP.
EXEMPLO
const player = new Player("Herói", {vida:100, ataque:20, defesa:10});
player.atacar(goblin) → "Herói causou 15 de dano!"SOBRE O CONCEITO
A base é uma classe Entity com atributos privados (#vida, #ataque, #defesa) e métodos como receberDano(). Erro comum: dano negativo surge ao subtrair defesa do ataque sem limitar a zero — use Math.max(0, ataque - defesa). Outro erro: atacar um alvo morto. Antes de executar o ataque, verifique se alvo.estaVivo() (método que retorna this.#vida > 0). A herança com extends permite que Player e Enemy compartilhem lógica, enquanto cada um adiciona seus próprios comportamentos (ex: Player ganha XP; Enemy dropa item).
RESOLUÇÃO