Personagem de RPG
Parte da seção Object Oriented Programming do Journey de C da Coddy — lição 58 de 61.
Desafio
FácilVamos construir um sistema de combate de RPG Character — um exemplo clássico que reúne structs, métodos, construtores e interação de objetos em um design limpo e modular.
Você organizará seu código em três arquivos:
character.h: Defina uma structCharactercom dois campos inteiros:healthedamage. Declare os protótipos das funções para criar um personagem, realizar um ataque, verificar se um personagem está vivo e imprimir o status de um personagem.character.c: Implemente seu sistema de personagens:create_character— recebe os valores iniciais de saúde e dano, aloca um Character na heap, inicializa seus campos e retorna um ponteiroattack— recebe dois ponteiros de Character (atacante e alvo), reduz a saúde do alvo pelo dano do atacanteis_alive— recebe um ponteiro const Character e retorna 1 se a saúde for maior que 0, caso contrário, retorna 0print_status— recebe um ponteiro const Character e imprime a saúde do personagem no formatoHealth: Xfree_character— libera a memória alocada
main.c: Crie uma simulação de batalha! Leia quatro inteiros representando: a saúde do herói, o dano do herói, a saúde do inimigo e o dano do inimigo. Crie ambos os personagens usando seu construtor. Em seguida, simule rodadas de combate — o herói ataca primeiro, depois o inimigo ataca (se ainda estiver vivo). Continue até que um personagem caia. Após cada rodada, imprima o status de ambos os personagens (herói primeiro, depois o inimigo). Quando a batalha terminar, imprimaHero wins!ouEnemy wins!dependendo de quem sobreviveu. Não se esqueça de liberar ambos os personagens.
Seu programa receberá quatro entradas:
- Saúde inicial do herói
- Dano por ataque do herói
- Saúde inicial do inimigo
- Dano por ataque do inimigo
Exemplo de saída quando as entradas são 50, 20, 30, 15:
Health: 35
Health: 10
Health: 20
Health: -10
Hero wins!Exemplo de saída quando as entradas são 20, 5, 100, 25:
Health: -5
Health: 95
Enemy wins!Lembre-se de usar guards de inclusão em seu arquivo de cabeçalho. A função attack demonstra como um objeto pode modificar o estado interno de outro — um conceito fundamental no design orientado a objetos. Use ponteiros const adequadamente para funções que apenas leem dados.
Experimente você mesmo
#include <stdio.h>
#include "character.h"
int main() {
// Ler os valores de entrada
int hero_health, hero_damage, enemy_health, enemy_damage;
scanf("%d", &hero_health);
scanf("%d", &hero_damage);
scanf("%d", &enemy_health);
scanf("%d", &enemy_damage);
// TODO: Criar os personagens hero e enemy usando create_character
// TODO: Simular rodadas de combate
// - Hero ataca primeiro
// - Enemy ataca se ainda estiver vivo
// - Imprimir o status de ambos os personagens após cada rodada (hero primeiro, depois enemy)
// - Continuar até que um personagem caia
// TODO: Imprimir o vencedor ("Hero wins!" ou "Enemy wins!")
// TODO: Liberar ambos os personagens
return 0;
}
Todas as lições de Object Oriented Programming
1Fundamentos da Programação Modular
Arquivos de CabeçalhoInclude GuardsArquivos-FonteFunções EstáticasRecapitulação: Calculadora Modular4Encapsulamento
Conceito de Ponteiros OpacosDefinindo Structs OpacasGetters e SettersValidação em SettersRecapitulação: Caixa Secreta2Objetos e Métodos
Structs como ObjetosO Ponteiro 'Self'Const CorrectnessPonteiro vs ValorMétodos AuxiliaresRecapitulação: Point Manager5Projeto: Conta Bancária Simples
Configuração do ProjetoImplementação da Conta3Ciclo de Vida de Objetos
Padrão de ConstrutorPadrão de DestrutorInicialização na StackCópia ProfundaRecapitulação: String Wrapper6Herança via Composição
Incorporação de StructsA Regra do Primeiro MembroAcessando Membros PaiUpcastingRecapitulação: Hierarquia de Formas9Projeto: Desenhador de Formas
Visão Geral do ProjetoImplementação do Círculo