ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TURN-BASED BATTLE SYSTEM ARCHITECTURE β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GAME APPLICATION LAYER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β BattleSimulator (Interactive) BattleDemo (Automated) β
β - Player input handling - AI decision making β
β - Character selection - Automated demo β
β - Turn prompt - Statistics display β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BATTLE ENGINE CORE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Battle.java β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Key Methods: β β
β β β’ start() β determineTurnOrder() β initialize battle β β
β β β’ executePlayerAction() β skill validation β execution β β
β β β’ processStatusEffects() β update all active effects β β
β β β’ endTurn() β shift turn, regenerate FP β β
β β β’ isBattleFinished() β check victory conditions β β
β β β’ displayStatus() β visual battle state β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β β
βΌ βΌ
ββββββββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β State Management Layer β β Logging & Event Layer β
ββββββββββββββββββββββββββββββββββββββββ€ ββββββββββββββββββββββββββββββββ€
β BattleState (Enum) β β BattleLog.java β
β - WAITING β β - Stores all actions β
β - PLAYER1_TURN β β - Manages log records β
β - PLAYER2_TURN β β - Display capabilities β
β - FINISHED β β β
β β β BattleAction.java β
β Manages flow control & validation β β - Action metadata β
β β β - Damage/Healing tracking β
β β β - Timestamp recording β
ββββββββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββ
β β
ββββββββββββββββββββββ¬ββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CHARACTER & ENTITY LAYER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β BaseCharacter (Abstract) β
β ββ name, HP, FP, ATK, DEF, SPD β
β ββ skills: List<Skill> β
β ββ activeEffects: List<StatusEffect> β
β ββ Methods: β
β β β’ takeDamage() / takeDamageWithMechanics() β
β β β’ heal() β
β β β’ useFocusPoints() / regenFocusPoints() β
β β β’ addEffect() / processEffects() / updateStatusEffects() β
β β β’ canMove() β
β ββ getActiveEffectNames() β
β β
β Concrete Character Implementations: β
β ββ FireCharacter (HP:100, ATK:35, DEF:15, SPD:30) π₯ β
β ββ WaterCharacter (HP:120, ATK:25, DEF:25, SPD:10) π§ β
β ββ EarthCharacter (HP:140, ATK:25, DEF:30, SPD:5) π β
β ββ WindCharacter (HP:90, ATK:30, DEF:10, SPD:50) π¨ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββ ββββββββββββββββββββ
β SKILL EXECUTION LAYER β β EFFECT SYSTEM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββ€ ββββββββββββββββββββ€
β β β β
β Skill (Interface) β β StatusEffect β
β ββ getName() β β ββ apply() β
β ββ getFpCost() β β ββ tick() β
β ββ use(user, target) β β ββ remove() β
β β β ββ decreaseDur() β
β Common Skills: β β β
β ββ AttackSkill (0 FP) β β Concrete Effects:β
β ββ GuardSkill (0 FP) β β ββ BurnEffect β
β ββ HealSkill (10 FP) β β β (5 dmg/turn) β
β β β ββ FreezeEffect β
β Elemental Skills (Special): β β β (skip turn) β
β ββ FireballSkill (25 FP) β Burn Effect β β ββ AttackBuffEffβ
β ββ IceBlastSkill (30 FP) β Freeze Effect β β β
β ββ RockThrowSkill (20 FP) β β EffectType Enum:β
β ββ AirSlashSkill (25 FP) β β ββ DAMAGE β
β β β ββ CROWD_CONTROLβ
β β β ββ BUFF β
β β β ββ DEBUFF β
β β β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββ ββββββββββββββββββββ
β β
ββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β UTILITY LAYER β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ElementalAdvantage (Utility) β
β ββ getMultiplier(attacker, defender) β 0.75, 1.0, or 1.5 β
β ββ getEffectivenessMessage() β
β β
β ElementType (Enum) β
β ββ FIRE βββ β
β ββ WATER βββΌβ Rock-Paper-Scissors cycle β
β ββ EARTH βββ€ β
β ββ WIND βββ β
β ββ NEUTRAL β
β β
β Constants.java (Configuration) β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββ
β START β
ββββββββ¬βββββββ
β
βΌ
ββββββββββββββββββββββββββββββββ
β Create Battle(p1, p2) β
β BattleState = WAITING β
ββββββββββββ¬ββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββ
β battle.start() β
β - determine Turn Order β
β - check speed diff β
β - if equal: coin flip β
ββββββββββββ¬ββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββ
β Set CurrentState: β
β PLAYER1_TURN or PLAYER2_TURN β
ββββββββββββ¬ββββββββββββββββββββ
β
βΌ
ββββββββββββββββ
β MAIN LOOP β
ββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββ
β displayStatus() β
β - Show HP bars, FP bars β
β - Show active effects β
β - Show available skills β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β Check canMove() β
β - Frozen? β Skip turn β
β - Continue: get skill input β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β executePlayerAction(skillIndex) β
β - Validate skill index β
β - Check FP >= FpCost β
β - Execute: skill.use(user, target) β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββ
β Skill Executes β
ββββββββββββββββββ€
β β’ Calculate damage
β β’ Check dodge
β β’ Check crit
β β’ Apply elem bonus
β β’ Apply defense
β β’ Add effect
ββββββββββ¬ββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β processStatusEffects() β
β - Tick all active effects β
β - Apply damage/effects β
β - Remove expired effects β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β isBattleFinished()? β
β - HP <= 0? β END BATTLE β
β - Surrender? β END BATTLE β
β - Continue: next turn β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β endTurn() β
β - Switch player (P1βP2) β
β - Increment turn counter β
β - Regenerate FP (+10) β
ββββββββββββββββ¬βββββββββββββββββββββββ
β
Loop back to displayStatus()
ββββββββββββββββββββββββ
β Raw Damage = ATK β
ββββββββββββ¬ββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Check Critical Hit? β
β Chance = Speed / 4.0 (max 25%) β
β If crit: damage *= 1.5 β
ββββββββββββ¬ββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Apply Elemental Multiplier β
β 0.75x (disadvantage) β
β 1.0x (neutral) β
β 1.5x (advantage) β
ββββββββββββ¬ββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Apply Defense β
β finalDamage = damage - defense β
β min(0) β
ββββββββββββ¬ββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Apply to Target HP β
β target.HP -= finalDamage β
ββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββ
β dodgeChance = (defender.speed β
β - attacker.speed) / 100 * 100β
β max = 30% β
ββββββββββββββββ¬ββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββ
β random() * 100 < dodgeChance? β
β YES β "Dodge! Attack missed" β
β NO β Damage applied β
ββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β ββββββββββββββββ ββββββββββββββββ β
β β Battle βββββββββββ BattleState β β
β ββββββββββββββββ€ ββββββββββββββββ β
β β - state β β
β β - turnCount β ββββββββββββββββ β
β β - player1 βββββββββββ BaseCharacterβ β
β β - player2 β ββββββββββββββββ β
β β - battleLog βββββββββββ β
β ββββββββββββββββ β β
β β β β
β βΌ β β
β ββββββββββββββββ β β
β β BattleLog β β β
β ββββββββββββββββ€ β β
β β - actions[] β β β
β ββββββββββββββββ β β
β β β β
β βΌ β β
β ββββββββββββββββ β β
β βBattleAction β β β
β ββββββββββββββββ€ β β
β β - actor β β β
β β - skill β β β
β β - damage β β β
β ββββββββββββββββ β β
β β β
β BaseCharacterββββββ β
β ββ FireCharacter β
β ββ WaterCharacter β
β ββ EarthCharacter β
β ββ WindCharacter β
β β β
β ββ skills: Listββββββ β
β β β β
β β βββββββββββββββ΄βββββββββββββββ β
β β β β β
β β βΌ βΌ β
β β Skill (Interface) β β
β β ββ AttackSkill β β
β β ββ GuardSkill β β
β β ββ HealSkill β β
β β ββ *Elemental Skills β β
β β ββ FireballSkill β β
β β ββ IceBlastSkill β β
β β ββ RockThrowSkill β β
β β ββ AirSlashSkill β β
β β β β
β ββ activeEffects: Listβββββββββββββ€ β
β β β
β StatusEffect (Abstract)βββββββ β
β ββ BurnEffect β
β ββ FreezeEffect β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Purpose: Track battle state transitions
Implementation: Enum BattleState {WAITING, PLAYER1_TURN, ...}
Benefit: Clear state management, prevents invalid transitions
Purpose: Different skill implementations
Implementation: Skill interface with multiple implementations
Benefit: Easy to add new skills, polymorphic execution
Purpose: Record and replay events
Implementation: BattleLog observes all actions
Benefit: Decoupled logging, can extend with reports
Purpose: Define battle character structure
Implementation: Abstract class with abstract methods
Benefit: Consistent character interface, customizable skills
Purpose: Add effects to characters
Implementation: StatusEffect wrapper pattern
Benefit: Can stack effects, easy to add new effects
Purpose: Create character instances
Implementation: Switch statement creating characters
Benefit: Centralized character creation
| Operation | Complexity | Notes |
|---|---|---|
| Turn execution | O(n) | n = number of active effects |
| Skill selection | O(1) | Direct array access |
| Damage calculation | O(1) | Fixed set of operations |
| Battle log | O(1) | Capped at 100 entries |
| Status effect update | O(n) | n = active effects (usually 1-3) |
| Victory check | O(1) | Simple HP comparison |
Memory: ~5-10 KB per battle (excluding display)
Current implementation: Single-threaded
- All operations happen sequentially
- No concurrent modifications
If future multiplayer online:
- Use synchronized collections
- Add thread-safe queue for battle commands
- Implement message passing for turn validation
Level 1: Current (Single Player, 1v1)
ββ Interactive mode: β
ββ Demo mode: β
Level 2: Local Multiplayer
ββ Split screen display
ββ Controller input support
ββ Tournament mode
Level 3: Online Multiplayer
ββ Network serialization
ββ Latency compensation
ββ Server-side battle validation
Level 4: Advanced Features
ββ Item system
ββ Leveling/Experience
ββ Skill trees
ββ Campaign mode
Level 5: Meta Game
ββ Rank/Rating system
ββ Cosmetics/Skins
ββ Seasonal updates
ββ Esports integration
Development:
ββ mvn clean compile
ββ mvn test
ββ java -cp target/classes com.game.battle.BattleSimulator
Distribution:
ββ mvn package
ββ java -jar target/TurnBaseGameJava-1.0-SNAPSHOT.jar
ββ OR create standalone executable with Maven Assembly Plugin
Architecture Version: 1.0 Last Updated: 2025 Status: Production Ready β