| Crates.io | no_std_tetris |
| lib.rs | no_std_tetris |
| version | 0.1.1 |
| created_at | 2025-05-08 16:59:13.594726+00 |
| updated_at | 2025-05-09 06:21:40.230937+00 |
| description | A flexible Tetris implementation for no_std and standard environments |
| homepage | |
| repository | https://github.com/Hahihula/no_std_tetris |
| max_upload_size | |
| id | 1665607 |
| size | 14,769 |
A minimalist, flexible Tetris implementation in Rust that works in both no_std and standard environments. This crate provides a core Tetris game engine that can be used on embedded systems, in terminal applications, or in any Rust project needing Tetris gameplay.
no_std environments, perfect for embedded systemsAdd this to your Cargo.toml:
[dependencies]
no_std_tetris = "0.1.0"
Tetris<R>: The main game state, generic over a random number generatorRandomGenerator: Trait for providing random numbers to select new piecesColor: Enum for piece colorsTetromino: Struct representing a tetromino pieces// Create a new game with a random number generator
let mut game = Tetris::new(rng);
// Game controls
game.move_left();
game.move_right();
game.move_down();
game.rotate();
// Check game status
if game.is_game_over() {
println!("Game Over! Score: {}", game.score);
}
The library provides a default text-based renderer, but you usually will implement your own. The example implementation is:
pub fn draw_on_screen<R: RandomGenerator>(
tetris: &Tetris<R>,
f: &mut impl fmt::Write,
) -> fmt::Result {
for y in 0..BOARD_HEIGHT {
write!(f, "|")?;
for x in 0..BOARD_WIDTH {
let mut occupied = tetris.board[y][x].is_some();
if !tetris.game_over {
for &(dx, dy) in &tetris.current_piece.shape {
if (tetris.piece_pos.0 + dx as i8) as usize == x
&& (tetris.piece_pos.1 + dy as i8) as usize == y
{
occupied = true;
}
}
}
write!(f, "{}", if occupied { "#" } else { " " })?;
}
writeln!(f, "|")?;
}
if tetris.game_over {
writeln!(f, "GAME OVER - Score: {}", tetris.score)
} else {
writeln!(f, "Score: {}", tetris.score)
}
}
no_std_tetris/
├── crate_project # the crate and terminal example
├── esp32_c3_example # example implementation on esp32-c3
├── LICENSE
└── README.md