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 Personagens 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ê 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 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 será derrotado e não revidará naquela rodada. Continue até que um dos personagens seja derrotado. 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 proteções de inclusão no 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 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
    // - Exiba o estado dos dois personagens após cada rodada (primeiro o herói, depois o inimigo)
    // - Continue até que um dos personagens caia
    
    // TODO: Exiba o vencedor ("Hero wins!" ou "Enemy wins!")
    
    // TODO: Libere os dois personagens
    
    return 0;
}

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

Pratique por conta própria: Compilador de C online