Personnage de RPG
Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 58 sur 61.
Défi
FacileConstruisons 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 structureCharacteravec deux champs entiers :healthetdamage. 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 pointeurattack— prend deux pointeurs Character (attaquant et cible), réduit la santé de la cible par les dégâts de l'attaquantis_alive— prend un pointeur Character constant et retourne 1 si la santé est supérieure à 0, sinon retourne 0print_status— prend un pointeur Character constant et affiche la santé du personnage au formatHealth: Xfree_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 soitHero wins!soitEnemy wins!selon qui a survécu. N'oubliez pas de libérer les deux personnages.
Votre programme recevra quatre entrées :
- Santé de départ du héros
- Dégâts par attaque du héros
- Santé de départ de l'ennemi
- 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
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 cercle