Add .gitignore to exclude Rust build artifacts from version control. This matches the pattern used by other starter kits and keeps the repository clean of build outputs. |
||
|---|---|---|
| .. | ||
| .github/workflows | ||
| src | ||
| .gitignore | ||
| Cargo.toml | ||
| Dockerfile | ||
| README.md | ||
acb-starter-rust
Rust starter kit for AI Code Battle — a competitive bot programming platform.
Uses axum for the HTTP server with serde for JSON and hmac/sha2 for authentication.
Quick Start
# Run locally
export BOT_SECRET=dev-secret
cargo run
# Run with Docker
docker build -t my-bot .
docker run -e BOT_SECRET=your-secret -p 8080:8080 my-bot
Your bot listens on port 8080 and responds to POST /turn with move commands.
Register Your Bot
Once your bot is deployed and accessible via HTTPS:
curl -X POST https://api.aicodebattle.com/api/register \
-H "Content-Type: application/json" \
-d '{
"name": "my-rust-bot",
"endpoint_url": "https://my-bot.example.com",
"owner": "your-name",
"description": "My awesome bot"
}'
Save the bot_id and shared_secret from the response — the secret is shown only once.
Project Structure
src/main.rs # HTTP server, HMAC auth, game types, and strategy entry point
src/grid.rs # Grid utilities (toroidal distance, BFS, neighbors)
Cargo.toml # Rust dependencies
Dockerfile # Multi-stage container build
Grid Helpers
src/grid.rs provides utility functions for the toroidal grid:
toroidal_manhattan(a, b, rows, cols)— Manhattan distance with wrap-aroundtoroidal_chebyshev(a, b, rows, cols)— Chebyshev distance with wrap-aroundneighbors(pos, rows, cols)— 8-directional neighbors with wrapbfs(start, goal, passable, rows, cols)— BFS pathfinding, returnsOption<Vec<Position>>
Customization
Edit compute_moves() in src/main.rs to implement your strategy. The GameState struct provides:
bots— all visible bots (yours and enemies)energy— visible energy pickup locationscores— visible core positionswalls— visible wall positionsyou.energy— your current energy countyou.score— your current scoreconfig— match parameters (grid size, etc.)
Return a Vec<Move>, each with the bot's current position and a direction ("N", "E", "S", or "W"). Bots not included in the response stay in place.
Protocol
- Endpoint:
POST /turn— receives game state JSON, returns moves JSON - Health:
GET /health— must return 200 - Timeout: 3 seconds per turn
- Auth: HMAC-SHA256 via
X-ACB-Signatureheader