Menu
CoddyTech

Personagem de RPG

Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 58 de 61.

challenge icon

Desafio

Fácil

Vamos criar um sistema de combate de Personagem de RPG: um exemplo clássico que reúne structs, métodos, construtores e interação entre objetos em um design limpo e modular.

Você vai 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 valores iniciais de vida e dano, aloca um Character no heap, inicializa seus campos e retorna um ponteiro
    • attack: recebe dois ponteiros para Character (atacante e alvo) e reduz a vida do alvo pelo dano do atacante
    • is_alive: recebe um ponteiro const para Character e retorna 1 se a vida for maior que 0; caso contrário, retorna 0
    • print_status: recebe um ponteiro const para Character e imprime a vida do personagem no formato Health: X
    • free_character: libera a memória alocada
  • main.c: Crie uma simulação de batalha! Leia quatro números inteiros que representam: a vida do herói, o dano do herói, a vida do inimigo e o dano do inimigo. Crie os dois personagens usando seu construtor. Em seguida, simule rodadas de combate: em cada rodada, o herói ataca primeiro e, depois, o inimigo revida. Se o ataque do herói reduzir a vida do inimigo a zero ou menos, o inimigo é derrotado e não revida nessa rodada. Continue até que um dos personagens caia. Após cada rodada, imprima o status dos dois personagens (primeiro o herói, depois o inimigo). Quando a batalha terminar, imprima Hero wins! ou Enemy wins!, dependendo de quem sobreviveu. Não se esqueça de liberar a memória dos dois personagens.

Seu programa receberá quatro entradas:

  1. Vida inicial do herói
  2. Dano do herói por ataque
  3. Vida inicial do inimigo
  4. Dano do inimigo por ataque

Exemplo de saída quando as entradas são 50, 20, 30, 15:

Health: 35
Health: 10
Health: 35
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 guardas de inclusão no arquivo de cabeçalho. A função attack demonstra como um objeto pode modificar o estado interno de outro: um conceito-chave no design orientado a objetos. Use ponteiros const adequadamente nas funções que apenas leem dados.

Experimente você mesmo

#include <stdio.h>
#include "character.h"

int main() {
    // Leia 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: Crie os personagens do herói e do inimigo usando create_character
    
    // TODO: Simule as rodadas de combate
    // - O herói ataca primeiro
    // - O inimigo ataca se ainda estiver vivo
    // - Imprima o status de ambos os personagens após cada rodada (primeiro o herói, depois o inimigo)
    // - Continue até que um dos personagens caia
    
    // TODO: Imprima o vencedor ("Hero wins!" ou "Enemy wins!")
    
    // TODO: Libere a memória de ambos os personagens
    
    return 0;
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C online