Un système de combat RPG complet développé en C avec interface en ligne de commande, featuring un système d'initiative avancé, un système d'armure réaliste et une architecture modulaire.
- ✨ Fonctionnalités
- 🛠️ Installation
- 🎯 Utilisation
- ⚔️ Système de combat
- 📊 Système de stats
- 🎮 Commandes disponibles
- 🏗️ Architecture
- 🧪 Mode debug
- 📁 Structure du projet
- 🤝 Contribution
- Initiative basée sur les niveaux : Différence de ±5 niveaux = avantage automatique
- Tirage pondéré par l'énergie : Plus d'énergie = plus de chances de jouer en premier
- Ordre d'affichage intelligent : Les PV sont affichés au bon moment selon l'initiative
- Système d'armure réaliste : Réduction directe des dégâts avec minimum de 1 dégât
- Pénétration d'armure : Support pour contourner les défenses
- Dégâts physiques et magiques : Systèmes séparés avec leurs propres armures
- Vampirisme et régénération : Mécaniques de survie avancées
- Scaling par niveau : Progression équilibrée des statistiques
- Barres de vie dynamiques : Unicode blocks avec couleurs progressives
- Headers ASCII professionnels : Affichage de combat immersif
- Système de prompts adaptatif : Différents styles selon le contexte
- Messages détaillés : Calculs de dégâts transparents
- Système de commandes modulaire : Pointeurs de fonction pour extensibilité
- Gestion mémoire sécurisée : Protection contre les buffer overflows
- Parser robuste : Chargement d'ennemis depuis fichiers avec validation
- Code optimisé : Performance et maintenabilité
# Ubuntu/Debian
sudo apt-get install build-essential libreadline-dev
# Fedora/CentOS
sudo dnf install gcc readline-devel
# Arch Linux
sudo pacman -S gcc readlinegit clone https://github.com/xHemera/stat-system.git
cd stat-system
makemake clean # Supprime les fichiers objets
make fclean # Nettoyage complet
make re # Recompilation complète./stat-system- Entrez votre nom (lettres uniquement, max 19 caractères)
- Explorez les commandes avec
help - Activez le debug avec
/debugpour plus d'options - Commencez à combattre avec
fight
Entrez un nom de joueur :
> Aragorn
Bienvenue Aragorn!
Simple RPG combat management
> help
> /debug
[DEBUG] Mode debug activé.
> stats
> enemies
> fight goblin
Le système d'initiative détermine qui attaque en premier :
Différence de niveau = Niveau joueur - Niveau ennemi
Si différence ≤ -5 → Ennemi a l'initiative automatiquement
Si différence ≥ +5 → Joueur a l'initiative automatiquement
Sinon → Tirage aléatoire pondéré par l'énergie
Dégâts physiques = max(1, Attaque physique - Armure)
Dégâts magiques = max(1, Attaque magique - Armure magique)
Avec pénétration :
Armure effective = max(0, Armure - Pénétration)
🎲 Test d'initiative:
Aragorn (Niveau 5) vs Orc (Niveau 3)
Différence de niveau: +2
Calcul d'initiative basé sur l'énergie...
Aragorn énergie: 20
Orc énergie: 20
Aragorn gagne l'initiative! (tirage: 15/40)
╔═══════════════════════════════════════════════════════════════╗
║ COMBAT - Tour 1 ║
╚═══════════════════════════════════════════════════════════════╝
Aragorn (Niveau 5)
❤️ 500/500 [████████████████████] 100%
Orc (Niveau 3)
❤️ 360/360 [████████████████████] 100%
🎯 Tour de Aragorn:
╔═══════════════════════════════════════════════════════════════╗
║ Actions disponibles ║
╚═══════════════════════════════════════════════════════════════╝
🗡️ attack - Attaquer l'ennemi
🏃 run - Fuir le combat
| Stat | Description | Scaling |
|---|---|---|
| Health | Points de vie | × Niveau |
| Physical Dmg | Dégâts physiques | × Niveau |
| Armor | Réduction dégâts physiques | × Niveau |
| Magical Dmg | Dégâts magiques | × Niveau |
| Magic Armor | Réduction dégâts magiques | × Niveau |
| Energy | Ressource pour actions spéciales | + Base |
| Vampirism | Vol de vie en % | × Niveau |
Stat totale = (Stat de base × Niveau) + Bonus d'équipement
Énergie = Stat de base + Bonus d'équipement| Commande | Description |
|---|---|
help |
Affiche l'aide complète |
stats |
Affiche vos statistiques |
fight [cible] |
Combat contre un ennemi |
enemies |
Liste tous les ennemis |
exit / quit |
Quitte le jeu |
fight # Menu interactif
fight goblin # Combat par nom
fight 1 # Combat par index
fight random # Ennemi aléatoire| Commande | Description |
|---|---|
levelup / lvl |
Monte d'un niveau |
add_max_hp |
+20 PV max (en combat) |
| Commande | Description |
|---|---|
/debug |
Active/désactive le mode debug |
src/
├── core/ # Logique principale
│ ├── commands.c # Système de commandes
│ └── loop.c # Boucle principale
├── entities/ # Gestion des entités
│ ├── player.c # Joueur et stats
│ └── enemy.c # Ennemis et chargement
├── fight/ # Système de combat
│ ├── fight.c # Logique de combat
│ └── fight_utils.c # Utilitaires combat
└── utils/ # Fonctions utilitaires
├── utils.c # Fonctions générales
├── debug.c # Mode debug
└── print_stats.c # Affichage stats
typedef struct s_stats {
float health, physical_dmg, armor;
float magical_dmg, magic_armor;
float vampirism, heal_shield_power;
int energy, energy_regen;
} t_stats;
typedef struct s_player {
char name[MAX_NAME_LENGTH];
int level;
t_stats base, bonus, total;
} t_player;
typedef struct s_command {
char *name;
int (*handler)(t_player*, t_enemy*, int, char*);
int admin_only;
char *description;
} t_command;Activez le mode debug avec /debug pour accéder à :
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
│ SUPER STATS de Aragorn (Niveau 5) │
│───────────────────────────────────────────────────────────────────────────│
│ Health │ Total: 500.0 │ Base: 500.0 │ Bonus: 0.0 │
│ Physical Dmg │ Total: 50.0 │ Base: 50.0 │ Bonus: 0.0 │
│ Armor │ Total: 50.0 │ Base: 50.0 │ Bonus: 0.0 │
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- levelup : Montée de niveau instantanée
- add_max_hp : Boost de PV en plein combat
- Détails combat : Calculs d'initiative détaillés
stat-system/
├── README.md
├── Makefile
├── .gitignore
├── include/
│ └── hemera.h # Header principal
├── src/
│ ├── core/ # Cœur du système
│ ├── entities/ # Gestion joueur/ennemis
│ ├── fight/ # Système de combat
│ └── utils/ # Utilitaires
├── data/
│ └── enemies # Base de données ennemis
└── obj/ # Fichiers objets (généré)
Le fichier data/enemies utilise le format pipe-separated :
# Nom|Niveau|HP|HealPwr|Vamp|MagDmg|MagArmor|MagPen|PhysDmg|Armor|ArmorPen|Energy|EnergyRegen|XP|Gold
Goblin|1|50|1|0|0|5|0|8|4|0|10|1|10|5
Orc|3|120|1|0|5|15|0|15|8|0|20|2|50|25
float calculate_physical_damage(float attack, float armor, float armor_pen) {
float effective_armor = armor - armor_pen;
if (effective_armor < 0) effective_armor = 0;
float damage = attack - effective_armor;
return damage > 1.0f ? damage : 1.0f; // Minimum 1 dégât
}- Ctrl+C : Affiche un message mais ne quitte pas
- Ctrl+D : Sortie propre avec nettoyage mémoire
- Gestion mémoire : Protection buffer overflow avec
strncpy - Performance : Boucles optimisées et structures efficaces
- Validation : Parsing robuste avec nettoyage des données
- Extensibilité : Architecture modulaire pour ajouts futurs
- Fork le repository
- Créez une branche feature (
git checkout -b feature/amazing-feature) - Committez vos changements (
git commit -m 'Add amazing feature') - Push vers la branche (
git push origin feature/amazing-feature) - Ouvrez une Pull Request
- Style : Code en anglais, commentaires en français
- Naming :
snake_casepour fonctions,t_pour types - Sécurité : Toujours valider les entrées utilisateur
- Memory : Libérer toute mémoire allouée
- Système d'expérience et de progression
- Équipements et inventaire
- Sauvegarde/chargement de parties
- Plus de types d'attaques spéciales
- Interface graphique simple
Développé avec ❤️ en C
Un projet éducatif démontrant les concepts avancés de programmation système, la gestion mémoire et l'architecture logicielle.