Menu
CoddyTech

Personnage de RPG

Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 58 sur 61.

challenge icon

Défi

Facile

Construisons un système de combat pour un personnage de RPG : un exemple classique qui réunit les structures, les méthodes, les constructeurs et l’interaction entre objets dans une conception claire et modulaire.

Tu organiseras ton code dans trois fichiers :

  • character.h : définis une structure Character avec deux champs entiers : health et damage. Déclare les prototypes des fonctions permettant de créer un personnage, d’effectuer une attaque, de vérifier si un personnage est en vie et d’afficher le statut d’un personnage.
  • character.c : implémente ton système de personnages :
    • create_character : prend des valeurs initiales de santé et de dégâts, alloue un Character sur le tas, initialise ses champs et renvoie un pointeur
    • attack : prend deux pointeurs vers des Character (l’attaquant et la cible) et réduit la santé de la cible des dégâts de l’attaquant
    • is_alive : prend un pointeur const vers un Character et renvoie 1 si la santé est supérieure à 0, sinon renvoie 0
    • print_status : prend un pointeur const vers un Character et affiche la santé du personnage au format Health: X
    • free_character : libère la mémoire allouée
  • main.c : crée une simulation de combat ! Lis 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ée les deux personnages à l’aide de ton constructeur. Simule ensuite des rounds de combat : à chaque round, le héros attaque en premier, puis l’ennemi riposte. Si l’attaque du héros réduit la santé de l’ennemi à zéro ou moins, l’ennemi est vaincu et ne riposte pas pendant ce round. Continue jusqu’à ce qu’un des personnages tombe. Après chaque round, affiche le statut des deux personnages (le héros d’abord, puis l’ennemi). À la fin du combat, affiche Hero wins! ou Enemy wins! selon le personnage qui a survécu. N’oublie pas de libérer les deux personnages.

Ton programme recevra quatre entrées :

  1. La santé initiale du héros
  2. Les dégâts du héros par attaque
  3. La santé initiale de l’ennemi
  4. Les dégâts de l’ennemi par attaque

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

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

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

Health: -5
Health: 95
Enemy wins!

N’oublie pas d’utiliser des gardes d’inclusion dans ton fichier d’en-tête. La fonction attack montre comment un objet peut modifier l’état interne d’un autre : un concept clé de la conception orientée objet. Utilise 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 saisies
    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 du héros et de l'ennemi avec create_character
    
    // TODO: Simuler les tours de combat
    // - Le héros attaque en premier
    // - L'ennemi attaque s'il est encore en vie
    // - Afficher l'état des deux personnages après chaque tour (le héros d'abord, puis l'ennemi)
    // - Continuer jusqu'à ce que l'un des personnages tombe
    
    // TODO: Afficher le vainqueur ("Hero wins!" ou "Enemy wins!")
    
    // TODO: Libérer les deux personnages
    
    return 0;
}

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C en ligne