ai-code-battle/PROGRESS.md
jedarden 6d3f3506b3 Implement Phase 1 core engine: grid, combat, fog of war, turn execution
- Add engine package with toroidal grid, game state, turn execution
- Implement focus-fire combat resolution with simultaneous deaths
- Add fog of war visibility filtering for bot state
- Implement energy collection (contested resources denied)
- Add bot spawning at active cores
- Implement win conditions: elimination, draw, dominance, turns
- Add replay JSON writer for match recording
- Add match runner with concurrent bot communication
- Add CLI tools: acb-local (match runner), acb-mapgen (map generator)
- Add comprehensive unit tests (26 tests passing)

Exit criteria met: can run complete 500-turn matches and produce valid replays

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-24 01:48:27 -04:00

3.9 KiB

AI Code Battle - Implementation Progress

Current Phase: Phase 1 - Core Engine

Status: In Progress (~80% complete)

Completed

  • Go module initialization (github.com/aicodebattle/acb)
  • Project structure (engine/, cmd/acb-local/, cmd/acb-mapgen/)
  • Core types (engine/types.go)
    • Position, Tile, Direction, Bot, Core, EnergyNode, Player
    • Config with default values
    • MatchResult, VisibleState (fog-filtered state)
  • Grid implementation (engine/grid.go)
    • Toroidal wrapping
    • Distance calculations (squared for performance)
    • Visibility computation
    • Wall/obstacle handling
  • Game state (engine/game.go)
    • State management for bots, cores, energy, players
    • Bot spawning and killing
    • Fog of war filtering
  • Turn execution (engine/turn.go)
    • Movement phase with collision detection
    • Focus-fire combat resolution
    • Core capture mechanics
    • Energy collection (contested resources)
    • Bot spawning at active cores
    • Energy node ticking
    • Win condition checking (elimination, draw, dominance, turns)
  • Replay writer (engine/replay.go)
    • Full replay JSON format
    • Turn-by-turn state recording
  • Match runner (engine/match.go)
    • Concurrent bot communication
    • Per-turn timeout
    • Symmetric map generation
  • Local bot interface (engine/bot_local.go)
    • RandomBot, IdleBot implementations
  • CLI runner (cmd/acb-local/main.go)
    • Configurable parameters (seed, size, turns)
    • Replay output
  • Map generator (cmd/acb-mapgen/main.go)
    • Rotational symmetry (2/3/4/6 players)
    • Configurable density
  • Unit tests for core engine
    • Grid operations, wrapping, distances
    • Combat resolution (1v1, 2v1, formations)
    • Core capture
    • Energy collection
    • Spawning
    • Win conditions

Remaining for Phase 1

  • Improve map generator with connectivity validation
  • Add property-based tests for determinism
  • Run full 500-turn match validation

Exit Criteria Progress

Criterion Status
Can run a complete 500-turn match locally Works
Produce a valid replay file Works
Comprehensive unit tests 26 tests passing

Next Phase: Phase 2 - HTTP Protocol & Strategy Bots

Not started.

File Structure

ai-code-battle/
├── go.mod
├── engine/
│   ├── types.go        # Core data types
│   ├── grid.go         # Toroidal grid implementation
│   ├── game.go         # Game state management
│   ├── turn.go         # Turn execution phases
│   ├── replay.go       # Replay recording
│   ├── match.go        # Match runner
│   ├── bot_local.go    # Local bot interface
│   ├── grid_test.go    # Grid tests
│   └── turn_test.go    # Turn execution tests
├── cmd/
│   ├── acb-local/      # CLI match runner
│   │   └── main.go
│   └── acb-mapgen/     # Map generator
│       └── main.go
└── docs/
    └── plan/
        └── plan.md     # Full implementation plan

Key Design Decisions

  1. Position-based moves: Bots are identified by their current position in the move protocol (not bot IDs), which works better with fog of war.

  2. Squared distances: Using squared distances throughout (Distance2, Radius2) avoids expensive square root operations.

  3. Simultaneous resolution: Combat deaths are computed first, then applied, ensuring true simultaneous resolution.

  4. Symmetric map generation: Maps are generated by creating one sector and rotating for all players.

Running Tests

go test ./engine/... -v

Building CLI Tools

go build ./cmd/acb-local
go build ./cmd/acb-mapgen

Example Usage

# Run a match
./acb-local -seed 42 -max-turns 100 -output replay.json -verbose

# Generate a map
./acb-mapgen -players 2 -rows 60 -cols 60 -output map.json