Menu
Coddy logo textTech

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 propre et modulaire.

Tu organiseras ton code sur trois fichiers :

  • character.h : définir une structure Character avec deux champs entiers : health et damage. Déclarer les prototypes des fonctions permettant de créer un personnage, d’effectuer une attaque, de vérifier si un personnage est vivant et d’afficher l’état d’un personnage.
  • character.c : implémenter ton système de personnages :
    • create_character : prend les 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. Les deux attaques ont lieu au cours du même round : la contre-attaque de l’ennemi a donc quand même lieu, même si l’attaque du héros a déjà réduit sa santé à zéro ou moins. Continue jusqu’à ce qu’un personnage tombe. Après chaque round, affiche l’état des deux personnages (d’abord le héros, puis l’ennemi). Lorsque le combat se termine, affiche soit Hero wins!, soit Enemy wins! selon le survivant. N’oublie pas de libérer les deux personnages.

Ton programme recevra quatre entrées :

  1. Santé initiale du héros
  2. Dégâts du héros par attaque
  3. Santé initiale de l’ennemi
  4. Dégâts de l’ennemi par attaque

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’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 se contentent de lire les 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 héros et ennemi en utilisant create_character
    
    // TODO: Simuler les rounds de combat
    // - Le héros attaque en premier
    // - L'ennemi attaque s'il est encore en vie
    // - Afficher le statut des deux personnages après chaque round (héros en premier, puis ennemi)
    // - Continuer jusqu'à ce qu'un personnage tombe
    
    // TODO: Afficher le gagnant ("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