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:

Vec<Vec<u8>>

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 the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.