Personnage de RPG
Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 58 sur 61.
Défi
FacileConstruisons 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 structureCharacteravec deux champs entiers :healthetdamage. 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 pointeurattack: 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’attaquantis_alive: prend un pointeur const vers un Character et renvoie 1 si la santé est supérieure à 0, sinon renvoie 0print_status: prend un pointeur const vers un Character et affiche la santé du personnage au formatHealth: Xfree_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, afficheHero wins!ouEnemy wins!selon le personnage qui a survécu. N’oublie pas de libérer les deux personnages.
Ton programme recevra quatre entrées :
- La santé initiale du héros
- Les dégâts du héros par attaque
- La santé initiale de l’ennemi
- 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
1Bases de la programmation modulaire
Fichiers d'en-têteGardes d'inclusionFichiers sourcesFonctions statiquesRécapitulatif : Calculatrice modulaire4Encapsulation
Concept des pointeurs opaquesDéfinir des structures opaquesGetters et settersValidation dans les settersRécapitulatif : La boîte secrète2Objets et méthodes
Structs comme objetsLe pointeur 'Self'Rigueur du mot-clé constPointeur vs ValeurMéthodes utilitairesRécapitulatif : Point Manager5Projet : Compte bancaire simple
Configuration du projetImplémentation du compte8Polymorphisme
Pointeurs de fonctions dans les structuresSimulation de méthodesLe concept d'interfaceImplémentation d'interfacesItération polymorphiqueRécapitulatif : Greeter11Patrons de conception en C
Patron SingletonPatron FabriquePatron ItérateurRécapitulatif : Logger Factory3Cycle de vie des objets
Pattern de constructeurPattern de destructeurInitialisation sur la pileCopie profondeRécapitulatif : String Wrapper6Héritage par composition
Imbrication de structLa règle du premier membreAccès aux membres parentsUpcastingRécapitulatif : Hiérarchie des formes9Projet : Dessinateur de formes
Aperçu du projetImplémentation du cercleImplémentation du rectangleUtilisation polymorpheConteneur de formesEntraînez-vous par vous-même : Compilateur C en ligne