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: