- Add Client/Server Modulaire architecture (Point 4) with V1/V2 progression and user/dev implications - Add Distribution Performance-Based system (Point 5) with Critical/Strategic module classification - Update CLAUDE.md to reflect modular architecture transition - Consolidate documentation: move specialized docs to toCheck/ for systematic integration - Remove obsolete architecture files replaced by integrated specifications 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
11 KiB
Architecture Modulaire pour Game Development avec Claude Code
Vue d'Ensemble
L'architecture modulaire triple interface révolutionne le développement de jeux complexes en rendant le code Claude Code friendly tout en maintenant la performance et la scalabilité.
🏗️ Architecture Core : Triple Interface Pattern
Les 4 Interfaces Fondamentales
IEngine → Coordination générale (DebugEngine → HighPerfEngine → DataOrientedEngine)
IModuleSystem → Stratégie d'exécution (Sequential → Threaded → Multithread → Cluster)
IModule → Logique métier pure (TankModule.so, EconomyModule.so)
IIO → Communication (IntraIO → LocalIO → NetworkIO)
Séparation des Responsabilités
IModule : Pure Game Logic
class IModule {
virtual json process(const json& input) = 0; // PURE FUNCTION
virtual void initialize(const json& config) = 0;
virtual void shutdown() = 0;
};
Contraintes strictes :
- 200-300 lignes maximum par module
- Aucune dépendance infrastructure (threading, network, etc.)
- JSON in/out uniquement pour communication
- Logic métier pure sans effets de bord
IModuleSystem : Execution Strategy
// Même interface, performance différente
SequentialModuleSystem → Debug/test (1 module à la fois)
ThreadedModuleSystem → Chaque module dans son thread
MultithreadedModuleSystem → Pool de threads pour tasks
ClusterModuleSystem → Distribution sur plusieurs machines
IIO : Transport Layer
// Même interface, transport différent
IntraIO → Appel direct (même processus)
LocalIO → Named pipes/sockets (même machine)
NetworkIO → TCP/WebSocket (réseau)
🎯 Objectif Principal : Claude Code Optimized Development
Problème Résolu : Contexte Énorme
Avant : Claude Code doit comprendre 50K+ lignes interconnectées Après : Claude Code travaille sur TankModule.cpp (200 lignes isolées)
Workflow Révolutionnaire
Développement Parallèle
# Instance Claude Code A
cd modules/tank/
cmake . && make tank-module # Autonome, 0 dépendance
# Instance Claude Code B
cd modules/economy/
cmake . && make economy-module # Parallèle, 0 conflit
# Instance Claude Code C
cd modules/ai/
cmake . && make ai-module # Simultané, 0 friction
Testing Isolé
[Test] TankModule_ReceiveAttackCommand_ShouldFire()
{
auto tank = LoadModule("tank.so");
auto input = json{{"type", "attack"}, {"target", "enemy_1"}};
auto result = tank->process(input);
EXPECT_EQ(result["action"], "fire");
// Zero dépendance externe, test ultra-rapide
}
Hot-Swappable Infrastructure
Debugging → Performance → Scale
// Bug multithread dans TankModule ?
// 1. Keep TankModule.so unchanged
// 2. Switch: MultithreadedModuleSystem → SequentialModuleSystem
// 3. Isolate: logic bug vs threading bug
// Bug réseau ?
// 1. Keep TankModule.so unchanged
// 2. Switch: NetworkIO → IntraIO
// 3. Isolate: network bug vs game logic bug
Avantage énorme : Debug infrastructure sans toucher à la logique métier !
🚀 Évolution Progressive Sans Régression
Performance Scaling
// Phase 1 : Prototype
DebugEngine + SequentialModuleSystem + IntraIO
→ Développement ultra-rapide, Claude Code 100% focus logique
// Phase 2 : Optimization
DebugEngine + ThreadedModuleSystem + IntraIO
→ Performance boost sans changer 1 ligne de game logic
// Phase 3 : Production
HighPerfEngine + MultithreadedModuleSystem + LocalIO
→ Scale transparent, TankModule.so inchangé
// Phase 4 : MMO Scale
DataOrientedEngine + ClusterModuleSystem + NetworkIO
→ Distribution massive, même logique métier
Migration Zero-Risk
- TankModule.so reste identique à travers toutes les phases
- Interface contracts préservés → pas de régression possible
- A/B testing facile : deux configurations en parallèle
🛠️ Choix Architecturaux Pragmatiques
1. Modding → YAGNI (You Aren't Gonna Need It)
Problème du Modding :
- Hooks system = complexité architecturale énorme
- Maintenance nightmare (API stability)
- Performance overhead permanent
- Cas d'usage incertain pré-release
Solution pragmatique :
- Faire un jeu qui marche AVANT de le rendre moddable
- 90% des "mods" = tweaker des valeurs → Config system suffit
2. Config System = "Modding Gratuit"
Architecture Smart Config
Player edit → Server validation → Engine dispatch → Background recalc
Smart Recalculation System
// Exemple : player modifie steel_plating.weight
ConfigChange steel_plating.weight →
ComponentTracker.getDependents() → [tank_mk1, tank_mk2, heavy_tank] →
DesignerModule.scheduleRecalc() →
Background processing (spread over frames)
Hot-Reload Paradise
// config/tanks.json
{
"tank_mk1": {
"armor": 50, // ← Edit this
"speed": 35, // ← Or this
"cost": 1000 // ← Or this
}
}
Save file → Auto-reload → See changes instantly
3. Mode-Based Security System
Dev Mode
- Config changes autorisés partout
- Hot-reload paradise pour développement
- Debugging tools exposés
Solo Mode
- Player peut modder son expérience
- Local config override autorisé
- Cheat-friendly pour expérimentation
Multiplayer Mode
- Server autoritaire sur toutes les configs
- Anti-cheat automatique via validation
- Zero tolerance pour modifications
4. Anti-Cheat Psychologique 😈
Stratégie : Cheat attempts → "bugs" simulés progressifs
class AntiCheatPsycho {
void onCheatDetected(CheatType type) {
switch(type) {
case SPEED_HACK:
simulateRandomLag(50ms, 500ms);
break;
case RESOURCE_HACK:
simulateVisualGlitches(tanks, 5%);
break;
case DAMAGE_HACK:
simulateDesync(movement, 2%);
break;
}
// Cheater se punit lui-même → abandon plutôt que ban+retry
}
};
Résultat : Cheaters abandonnent d'eux-mêmes, expérience propre pour légitimes.
⚙️ Config System Intelligent
Architecture Technique
Client Config Editor → WebSocket →
Server Validation →
Config Dispatcher →
[TankModule, EconomyModule, FactoryModule] →
Background Recalculation →
Live Update
Component Dependency Tracking
class ConfigDependencyGraph {
// steel_plating change affects:
std::map<ConfigKey, std::vector<ComponentID>> dependencies = {
{"materials.steel_plating.weight", {tank_mk1, tank_mk2, heavy_tank}},
{"materials.steel_plating.cost", {economy_steel, factory_line_2}},
{"weapons.cannon_75mm.damage", {tank_mk1, artillery_piece}}
};
void onConfigChange(ConfigKey key, json newValue) {
auto affected = dependencies[key];
for(auto component : affected) {
DesignerModule::scheduleRecalc(component);
}
}
};
Background Processing Smart
- Frame-spread recalculation : 1 tank par frame max
- Priority queue : tanks en combat = priorité haute
- Lazy evaluation : recalc seulement si component utilisé
🎮 Workflow de Développement Révolutionnaire
Avant : Architecture Monolithique
Edit code → Full compile (2-5 min) → Restart system → Load save → Test
Total : 5-10 minutes par iteration
Après : Architecture Modulaire
Edit TankModule.cpp → Hot-reload (5 sec) → Test immediately
Edit config/tanks.json → Auto-reload (instant) → See changes live
Total : 5 seconds par iteration
Claude Code Development Paradise
Contexte Ultra-Simple
- TankModule.cpp : 200 lignes de logique tank pure
- EconomyModule.cpp : 250 lignes de market simulation
- FactoryModule.cpp : 180 lignes de production logic
Zéro infrastructure dans le contexte Claude Code !
Autonomous Build System
cd modules/tank/
cmake . # PAS cmake .. !
make tank-module # → tank.so
./build/tank-module # Test isolé
Parallel Development
- 3+ instances Claude Code travaillent simultanément
- Zero conflicts entre modules
- Rapid iteration sur logique pure
🔄 Integration avec Système Existant
Migration Strategy
- Garder ancien code comme fallback
- Créer modules petit à petit
- A/B test ancien vs nouveau
- Switch progressif module par module
- Retire ancien une fois validé
Backward Compatibility
class LegacyTankSystem; // Ancien code
class TankModule; // Nouveau code
class TankSystemProxy {
bool useNewSystem = config.getBool("use_new_tank_system");
json process(json input) {
if(useNewSystem) {
return newTankModule->process(input);
} else {
return legacyTankSystem->process(input);
}
}
};
📊 Métriques de Succès
Développement
- Context size : 50K+ lignes → 200-300 lignes
- Iteration time : 5-10 minutes → 5 seconds
- Parallel development : 1 dev → 3+ Claude instances
- Bug isolation : Weeks → Hours
Performance
- Hot-reload time : N/A → <5 seconds
- Config changes : Restart required → Instant
- A/B testing : Impossible → Trivial
- Debugging : Needle in haystack → Surgical precision
Maintenance
- Module independence : Tightly coupled → Zero dependencies
- Testing : Integration hell → Unit paradise
- Deployment : Monolith → Microservices-like
- Scaling : Rewrite → Configuration change
Conclusion
L'architecture modulaire triple interface résout 4 problèmes majeurs du développement de jeux complexes :
- Claude Code Efficiency : Contextes micro-simples (200 lignes vs 50K+)
- Development Velocity : Hot-reload + config system + parallel dev
- Performance Scaling : Évolution progressive sans régression
- Security & Deployment : Anti-cheat intégré + mode-based system
Résultat : Développement 10x plus rapide avec maintien de la qualité et performance AAA.
Cette architecture est particulièrement révolutionnaire pour le développement avec IA, où la limitation principale est la taille du contexte que l'IA peut traiter efficacement.