Menu
Coddy logo textTech

Personagem de RPG

Parte da seção Object Oriented Programming do Journey de C da Coddy — lição 58 de 61.

challenge icon

Desafio

Fácil

Vamos 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 struct Character com dois campos inteiros: health e damage. 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 ponteiro
    • attack — recebe dois ponteiros de Character (atacante e alvo), reduz a saúde do alvo pelo dano do atacante
    • is_alive — recebe um ponteiro const Character e retorna 1 se a saúde for maior que 0, caso contrário, retorna 0
    • print_status — recebe um ponteiro const Character e imprime a saúde do personagem no formato Health: X
    • free_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, imprima Hero wins! ou Enemy wins! dependendo de quem sobreviveu. Não se esqueça de liberar ambos os personagens.

Seu programa receberá quatro entradas:

  1. Saúde inicial do herói
  2. Dano por ataque do herói
  3. Saúde inicial do inimigo
  4. 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