Menu
Coddy logo textTech

Personaje de RPG

Parte de la sección Programación Orientada a Objetos del Journey de C de Coddy. Lección 58 de 61.

challenge icon

Desafío

Fácil

Construyamos un sistema de combate de personajes de RPG: un ejemplo clásico que reúne estructuras, métodos, constructores e interacción entre objetos en un diseño limpio y modular.

Organizarás tu código en tres archivos:

  • character.h: Define una estructura Character con dos campos enteros: health y damage. Declara los prototipos de las funciones para crear un personaje, realizar un ataque, comprobar si un personaje está vivo e imprimir el estado de un personaje.
  • character.c: Implementa tu sistema de personajes:
    • create_character: recibe los valores iniciales de salud y daño, reserva un Character en el montón, inicializa sus campos y devuelve un puntero
    • attack: recibe dos punteros a Character (atacante y objetivo) y reduce la salud del objetivo según el daño del atacante
    • is_alive: recibe un puntero const a Character y devuelve 1 si la salud es mayor que 0; de lo contrario, devuelve 0
    • print_status: recibe un puntero const a Character e imprime la salud del personaje con el formato Health: X
    • free_character: libera la memoria reservada
  • main.c: ¡Crea una simulación de batalla! Lee cuatro enteros que representan: la salud del héroe, el daño del héroe, la salud del enemigo y el daño del enemigo. Crea ambos personajes usando tu constructor. Después, simula rondas de combate; en cada ronda, el héroe ataca primero y después el enemigo contraataca. Ambos golpes ocurren dentro de la misma ronda, por lo que el contraataque del enemigo impacta aunque el ataque del héroe ya lo haya reducido a cero o menos. Continúa hasta que caiga uno de los personajes. Después de cada ronda, imprime el estado de ambos personajes (primero el héroe y después el enemigo). Cuando termine la batalla, imprime Hero wins! o Enemy wins! según quién haya sobrevivido. No olvides liberar ambos personajes.

Tu programa recibirá cuatro entradas:

  1. Salud inicial del héroe
  2. Daño del héroe por ataque
  3. Salud inicial del enemigo
  4. Daño del enemigo por ataque

Salida de ejemplo cuando las entradas son 50, 20, 30, 15:

Health: 35
Health: 10
Health: 20
Health: -10
Hero wins!

Salida de ejemplo cuando las entradas son 20, 5, 100, 25:

Health: -5
Health: 95
Enemy wins!

Recuerda usar protectores de inclusión en tu archivo de encabezado. La función attack demuestra cómo un objeto puede modificar el estado interno de otro: un concepto clave del diseño orientado a objetos. Usa punteros const adecuadamente en las funciones que solo leen datos.

Pruébalo tú mismo

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

int main() {
    // Lee los 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: Crea los personajes del héroe y del enemigo usando create_character
    
    // TODO: Simula las rondas de combate
    // - El héroe ataca primero
    // - El enemigo ataca si sigue vivo
    // - Imprime el estado de ambos personajes después de cada ronda (héroe primero, luego enemigo)
    // - Continúa hasta que un personaje caiga
    
    // TODO: Imprime el ganador ("Hero wins!" or "Enemy wins!")
    
    // TODO: Libera ambos personajes
    
    return 0;
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C online