#tetris #game-engine #ui #game #logic #rand #model

tetris_core

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

#200 in Games

Download history 9/week @ 2024-02-22 6/week @ 2024-02-29 29/week @ 2024-03-28 18/week @ 2024-04-04 26/week @ 2024-04-11

73 downloads per month

GPL-3.0-only

50KB
1.5K SLoC

tetris_core

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.

Usage:

  • 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

game.perform(Action::Rotate);

is_game_over(&self) -> bool

Checks if is game over.

get_score(&self) -> u64

Gets the current score.

No runtime deps