thrust_rl/env/games/snake.rs
1//! Multi-player Snake environment
2//!
3//! A competitive N-player snake game where agents compete for food.
4//! - Grid-based world
5//! - Each snake grows when eating food
6//! - Game ends when all snakes die (collision with wall/self/others)
7//! - Rewards: +1 for food, -1 for death, small time penalty to encourage
8//! efficiency
9
10// TODO: Fix multi-agent implementation - temporarily disabled
11// #[cfg(feature = "training")]
12// use crate::multi_agent::environment::{MultiAgentEnvironment,
13// MultiAgentResult};
14pub use environment::SnakeEnv;
15pub use snake::{Food, Snake};
16// Re-export main components
17pub use types::{Cell, Direction, GameState, Position};
18// TODO: Re-enable after fixing multi-agent code
19// #[cfg(feature = "training")]
20// pub use multi_agent::MultiAgentSnakeEnv;
21
22// Submodules
23mod environment;
24// The `snake` submodule holds the core `Snake`/`Food` types; renaming it to
25// avoid the same-name parent module would churn every re-export for no benefit.
26#[allow(clippy::module_inception)]
27mod snake;
28mod types;
29// TODO: Re-enable after fixing multi-agent code
30// #[cfg(feature = "training")]
31// mod multi_agent;
32
33// Legacy aliases for backward compatibility
34/// Backward-compatible alias for [`SnakeEnv`]; kept so older training scripts
35/// that imported `SnakeEnvSingle` continue to compile. Prefer `SnakeEnv` in new
36/// code.
37pub type SnakeEnvSingle = SnakeEnv;
38// TODO: Re-enable after fixing multi-agent code
39// #[cfg(feature = "training")]
40// pub type SnakeEnvMulti = MultiAgentSnakeEnv;
41
42/// Create single-agent snake environment
43pub fn make_snake_env(width: i32, height: i32) -> SnakeEnv {
44 SnakeEnv::new(width, height)
45}
46
47// TODO: Re-enable multi-agent snake environment after fixing multi-agent code
48// #[cfg(feature = "training")]
49// pub fn make_multi_snake_env(width: i32, height: i32, num_agents: usize) ->
50// MultiAgentSnakeEnv { MultiAgentSnakeEnv::new(width, height, num_agents)
51// }