store tile vacancy in grid

This commit is contained in:
Crispy 2024-12-08 23:16:45 +01:00
parent 353f5b74e5
commit 0275e0c9b5
4 changed files with 50 additions and 36 deletions

View file

@ -153,7 +153,7 @@ impl Machine {
continue;
}
let can_move_to = |tile| matches!(tile, Some(Tile::Blank | Tile::Digit(_)));
let can_move_to = |tile| matches!(tile, Some(Tile::Open(_, _)));
let can_move_over = |tile| match tile {
Tile::Mirror(mirror) => {
@ -228,7 +228,7 @@ impl Machine {
// resolve deletions of tiles
for (i, event) in self.events.iter().enumerate() {
if let Event::Remove = event {
self.board.set(self.marbles[i], Tile::Blank);
self.board.set(self.marbles[i], Tile::default());
}
}
@ -268,10 +268,10 @@ impl Machine {
match event {
Event::MoveTo(new_pos, new_dir) => {
let mut value = *value;
self.board.set(self.marbles[i], Tile::Blank);
self.board.set(self.marbles[i], Tile::default());
self.marbles[i] = new_pos;
let new_tile = self.board.get_mut(new_pos).unwrap();
if let Tile::Digit(n) = new_tile {
if let Tile::Open(OpenTile::Digit(n), _) = new_tile {
value = value.wrapping_mul(10).wrapping_add(*n as MarbleValue);
}
*new_tile = Tile::Marble {