Rotating a tetrimino

Thanks to how we created the Tetrimino type, it's quite easy to do:

impl Tetrimino {
    fn rotate(&mut self) {
        self.current_state += 1;
        if self.current_state as usize >= self.states.len() {
            self.current_state = 0;

And we're done. However, we don't check anything: what happens if there is a block already used by another tetrimino? We'll just overwrite it. Such a thing cannot be accepted!

In order to perform this check, we'll need the game map as well. It's simply a vector line and a line is a vector of u8. Or, more simply:


Considering that it isn't too hard to read, we'll just keep it this way. Now let's write the method:

fn test_position(&self, game_map: &[Vec<u8>],
                 tmp_state: usize, x: isize, y: 

Get Rust Programming By Example now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.