#tetris #game


Simple Tetris game model with no UI or Game engine

3 unstable releases

0.2.1 Nov 22, 2022
0.2.0 Jun 30, 2019
0.1.0 Jun 16, 2019

#63 in Games

26 downloads per month


1.5K SLoC


Simple Tetris game logic (with no interface)

WARNING: This project was created on an early stage of learning RUST. It might lack many good practices.


  • Use any drawing library. (i.e: piston_window)
  • Use any randomizer library or method (i.e: rand)

As an example of implementation, you can check https://github.com/etoledom/rust_practice/blob/master/07_tetris/src/main.rs

Implement the Randomizer trait

struct Rand;
impl Randomizer for Rand {
    fn random_between(&self, lower: i32, higher: i32) -> i32 {
        let mut rng = rand::thread_rng();
        return rng.gen_range(lower, higher);

Instantiate a Tetris Game instance using an instance or your randomizer struct and the desired board size:

let game_size = Size {
    height: 20,
    width: 10,
let mut game = Game::new(&game_size, Box::new(rand));

update(&mut self, delta_time: f64)

Call game.update(delta_time); on every game loop.

draw(&self) -> Vec<Block>

Get the board model to be drawn:

let game_blocks = game.draw();

A block is a structure that specifies the block's position, size and color in rgba. Position and size are unitary, you can give it the unit and size you want.

struct Block {
	pub rect: Rect,
	pub color: Color,

perform(&mut self, action: Action)

Perform movement and rotation actions


is_game_over(&self) -> bool

Checks if is game over.

get_score(&self) -> u64

Gets the current score.

No runtime deps