Fix disallowed_direction logic and improved input responsiveness

This commit is contained in:
Zac Wilson 2025-07-06 16:15:30 +01:00
parent 5ac79ce0ce
commit e7157f58c1

View file

@ -83,34 +83,45 @@ fn main() -> Result<(), anyhow::Error> {
let mut apple = random_tile(); let mut apple = random_tile();
loop { loop {
let pressed_keys = keyboard.scan_pressed_keys()?; for _ in 0..10 {
dbg!(&pressed_keys); let pressed_keys = keyboard.scan_pressed_keys()?;
for key in pressed_keys { dbg!(&pressed_keys);
let new_direction = match key { for key in pressed_keys {
cardputer_bsc::keyboard::KeyImprint::SemiColon => (0, -1), let new_direction = match key {
cardputer_bsc::keyboard::KeyImprint::Comma => (-1, 0), cardputer_bsc::keyboard::KeyImprint::SemiColon => (0, -1),
cardputer_bsc::keyboard::KeyImprint::Period => (0, 1), cardputer_bsc::keyboard::KeyImprint::Comma => (-1, 0),
cardputer_bsc::keyboard::KeyImprint::Slash => (1, 0), cardputer_bsc::keyboard::KeyImprint::Period => (0, 1),
_ => continue, cardputer_bsc::keyboard::KeyImprint::Slash => (1, 0),
}; _ => continue,
match (snake_tiles.get(0), snake_tiles.get(1)) { };
(Some(&first), Some(&second)) => { match (snake_tiles.get(0), snake_tiles.get(1)) {
let disallowed_direction = ( (Some(&first), Some(&second)) => {
(second.0 - first.0).rem(GRID_WIDTH), let mut disallowed_direction = (
(second.1 - first.1).rem(GRID_HEIGHT), (second.0 - first.0).rem(GRID_WIDTH),
); (second.1 - first.1).rem(GRID_HEIGHT),
dbg!(disallowed_direction); );
if disallowed_direction != new_direction { if disallowed_direction.0 == GRID_WIDTH - 1 {
disallowed_direction.0 = -1;
} else if disallowed_direction.0 == 1 - GRID_WIDTH {
disallowed_direction.0 = 1;
} else if disallowed_direction.1 == GRID_HEIGHT - 1 {
disallowed_direction.1 = -1;
} else if disallowed_direction.1 == 1 - GRID_HEIGHT {
disallowed_direction.1 = 1;
}
dbg!(disallowed_direction);
if disallowed_direction != new_direction {
direction = new_direction;
}
}
_ => {
direction = new_direction; direction = new_direction;
} }
} }
_ => {
direction = new_direction;
}
} }
}
sleep(Duration::from_millis(200)); sleep(Duration::from_millis(20));
}
let front_file = *snake_tiles.get(0).unwrap(); let front_file = *snake_tiles.get(0).unwrap();