Menu
Coddy logo textTech

Personnage de RPG

Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 58 sur 61.

challenge icon

Défi

Facile

Construisons un système de combat de Personnage de RPG — un exemple classique qui rassemble les structures, les méthodes, les constructeurs et l'interaction entre objets dans une conception propre et modulaire.

Vous organiserez votre code sur trois fichiers :

  • character.h : Définissez une structure Character avec deux champs entiers : health et damage. Déclarez les prototypes de fonctions pour créer un personnage, effectuer une attaque, vérifier si un personnage est vivant et afficher le statut d'un personnage.
  • character.c : Implémentez votre système de personnage :
    • create_character — prend les valeurs initiales de santé et de dégâts, alloue un Character sur le tas (heap), initialise ses champs et retourne un pointeur
    • attack — prend deux pointeurs Character (attaquant et cible), réduit la santé de la cible par les dégâts de l'attaquant
    • is_alive — prend un pointeur Character constant et retourne 1 si la santé est supérieure à 0, sinon retourne 0
    • print_status — prend un pointeur Character constant et affiche la santé du personnage au format Health: X
    • free_character — libère la mémoire allouée
  • main.c : Créez une simulation de bataille ! Lisez quatre entiers représentant : la santé du héros, les dégâts du héros, la santé de l'ennemi et les dégâts de l'ennemi. Créez les deux personnages en utilisant votre constructeur. Ensuite, simulez des rounds de combat — le héros attaque en premier, puis l'ennemi attaque (s'il est toujours vivant). Continuez jusqu'à ce qu'un personnage tombe. Après chaque round, affichez le statut des deux personnages (le héros d'abord, puis l'ennemi). Lorsque la bataille se termine, affichez soit Hero wins! soit Enemy wins! selon qui a survécu. N'oubliez pas de libérer les deux personnages.

Votre programme recevra quatre entrées :

  1. Santé de départ du héros
  2. Dégâts par attaque du héros
  3. Santé de départ de l'ennemi
  4. Dégâts par attaque de l'ennemi

Exemple de sortie lorsque les entrées sont 50, 20, 30, 15 :

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

Exemple de sortie lorsque les entrées sont 20, 5, 100, 25 :

Health: -5
Health: 95
Enemy wins!

N'oubliez pas d'utiliser des gardes d'inclusion (include guards) dans votre fichier d'en-tête. La fonction attack démontre comment un objet peut modifier l'état interne d'un autre — un concept clé de la conception orientée objet. Utilisez des pointeurs const de manière appropriée pour les fonctions qui ne font que lire des données.

Essayez vous-même

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

int main() {
    // Lire les valeurs d'entrée
    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: Créer les personnages hero et enemy en utilisant create_character
    
    // TODO: Simuler les rounds de combat
    // - Le hero attaque en premier
    // - L'enemy attaque s'il est encore en vie
    // - Afficher le statut des deux personnages après chaque round (hero d'abord, puis enemy)
    // - Continuer jusqu'à ce qu'un personnage tombe
    
    // TODO: Afficher le vainqueur ("Hero wins!" ou "Enemy wins!")
    
    // TODO: Libérer les deux personnages
    
    return 0;
}

Toutes les leçons de Object Oriented Programming