From 19d61702b64396dabc38fa16b9b07290d0c9821c Mon Sep 17 00:00:00 2001 From: Oxore Date: Wed, 2 Aug 2023 01:16:30 +0300 Subject: Run cargo fmt and slightly refactor --- src/main.rs | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/main.rs b/src/main.rs index 99898b3..66044bc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -142,6 +142,28 @@ impl Figure { } } +trait Cell { + fn is_ghost(&self) -> bool; + fn set_ghost(&mut self, ghost: bool); + fn color(&self) -> Self; +} + +impl Cell for u8 { + fn is_ghost(&self) -> bool { + *self & GHOST_MASK != 0 + } + fn set_ghost(&mut self, ghost: bool) { + if ghost { + *self |= GHOST_MASK; + } else { + *self &= !GHOST_MASK; + } + } + fn color(&self) -> Self { + self & !GHOST_MASK + } +} + #[derive(Clone)] struct Field { cells: [u8; FIELD_SIZE], @@ -164,11 +186,9 @@ impl Field { if f_x < 0 || f_x >= FIELD_COLS as isize || f_y < 0 || f_y >= FIELD_ROWS as isize { continue; } - let color = figure.cells[i] & !GHOST_MASK; + let color = figure.cells[i].color(); let current = f_x as usize + f_y as usize * FIELD_COLS; - let ghost_or_empty = - (self.cells[current] & GHOST_MASK != 0) || self.cells[current] == 0; - if color != 0 && ghost_or_empty { + if color != 0 && (self.cells[current].is_ghost() || self.cells[current] == 0) { self.cells[current] = figure.cells[i]; } } @@ -177,12 +197,12 @@ impl Field { for i in 0..FIGURE_SIZE { let f_x = (i % FIGURE_SIZE_COLS) as isize + x; let f_y = (i / FIGURE_SIZE_ROWS) as isize + y; - let color = figure.cells[i] & !GHOST_MASK; + let color = figure.cells[i].color(); if color != 0 { if f_x < 0 || f_x >= FIELD_COLS as isize || f_y < 0 || f_y >= FIELD_ROWS as isize { return true; } - let fcolor = self.cells[f_x as usize + f_y as usize * FIELD_COLS] & !GHOST_MASK; + let fcolor = self.cells[f_x as usize + f_y as usize * FIELD_COLS].color(); if fcolor != 0 { return true; } @@ -460,12 +480,10 @@ impl Tui { fn display_field(&self, field: &Field, y: usize) { print!("|"); for x in 0..FIELD_COLS { - let color = field.cells[(FIELD_ROWS_VISIBLE - 1 - y) * FIELD_COLS + x] & !GHOST_MASK; - let ghost = - field.cells[(FIELD_ROWS_VISIBLE - 1 - y) * FIELD_COLS + x] & GHOST_MASK != 0; - if color == 0 { + let cell = field.cells[(FIELD_ROWS_VISIBLE - 1 - y) * FIELD_COLS + x]; + if cell.color() == 0 { print!(" "); - } else if ghost { + } else if cell.is_ghost() { print!("░░"); } else { print!("██"); @@ -479,7 +497,7 @@ impl Tui { let mut field = game.field.clone(); let mut ghost = game.figure.clone(); for i in 0..FIGURE_SIZE { - ghost.cells[i] |= GHOST_MASK; + ghost.cells[i].set_ghost(true); } let mut y_ghost = game.y; while !field.has_collision(&ghost, game.x, y_ghost) { -- cgit v1.2.3