Start drawing
This commit is contained in:
parent
6b7681bad6
commit
f650894988
120
maze/src/lib.rs
120
maze/src/lib.rs
@ -470,9 +470,42 @@ impl<'s> BufWriter<'s> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct BinaryMap<const X: usize, const Y: usize, const SIZE: usize>;
|
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||||
|
pub enum Direction {
|
||||||
|
North,
|
||||||
|
South,
|
||||||
|
East,
|
||||||
|
West,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct BinaryMap<const X: usize, const Y: usize, const SIZE: usize>(pub [MazePart; SIZE]);
|
||||||
|
|
||||||
impl<const X: usize, const Y: usize, const SIZE: usize> BinaryMap<X, Y, SIZE> {
|
impl<const X: usize, const Y: usize, const SIZE: usize> BinaryMap<X, Y, SIZE> {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self([MazePart::Noop; SIZE])
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn at(&self, x: usize, y: usize) -> MazePart {
|
||||||
|
self.0[y * X + x]
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn can_move(&self, player: (usize, usize), dir: Direction) -> bool {
|
||||||
|
match dir {
|
||||||
|
Direction::West if player.0 == 0 => false,
|
||||||
|
Direction::West => self.at(player.0 - 1, player.1) != MazePart::Wall,
|
||||||
|
Direction::East if player.0 == X - 1 => false,
|
||||||
|
Direction::East => self.at(player.0 + 1, player.1) != MazePart::Wall,
|
||||||
|
Direction::North if player.1 == 0 => false,
|
||||||
|
Direction::North => self.at(player.0, player.1 - 1) != MazePart::Wall,
|
||||||
|
Direction::South if player.1 == Y - 1 => false,
|
||||||
|
Direction::South => self.at(player.0, player.1 + 1) != MazePart::Wall,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct BinaryMapVisitor<const X: usize, const Y: usize, const SIZE: usize>;
|
||||||
|
|
||||||
|
impl<const X: usize, const Y: usize, const SIZE: usize> BinaryMapVisitor<X, Y, SIZE> {
|
||||||
fn format(&self, grid: &Grid<X, Y, SIZE>, buffer: &mut [MazePart]) {
|
fn format(&self, grid: &Grid<X, Y, SIZE>, buffer: &mut [MazePart]) {
|
||||||
let mut bw = BufWriter::new(buffer);
|
let mut bw = BufWriter::new(buffer);
|
||||||
|
|
||||||
@ -574,3 +607,88 @@ mod print_tests {
|
|||||||
println!("{result}");
|
println!("{result}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod bm_tests {
|
||||||
|
use crate::BinaryMap;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn move_n_valid() {
|
||||||
|
let player = (1, 1);
|
||||||
|
let bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::North), true);
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn move_n_invalid() {
|
||||||
|
let player = (0, 0);
|
||||||
|
let bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::North), false);
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn move_n_invalid_wall() {
|
||||||
|
let player = (1, 1);
|
||||||
|
let mut bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
bm.0.fill(crate::MazePart::Wall);
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::North), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn move_s_valid() {
|
||||||
|
let player = (1, 1);
|
||||||
|
let bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::South), true);
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn move_s_invalid() {
|
||||||
|
let player = (2, 2);
|
||||||
|
let bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::South), false);
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn move_s_invalid_wall() {
|
||||||
|
let player = (1, 1);
|
||||||
|
let mut bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
bm.0.fill(crate::MazePart::Wall);
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::South), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn move_e_valid() {
|
||||||
|
let player = (1, 1);
|
||||||
|
let bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::East), true);
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn move_e_invalid() {
|
||||||
|
let player = (2, 2);
|
||||||
|
let bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::East), false);
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn move_e_invalid_wall() {
|
||||||
|
let player = (1, 1);
|
||||||
|
let mut bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
bm.0.fill(crate::MazePart::Wall);
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::East), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn move_w_valid() {
|
||||||
|
let player = (1, 1);
|
||||||
|
let bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::West), true);
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn move_w_invalid() {
|
||||||
|
let player = (0, 0);
|
||||||
|
let bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::West), false);
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn move_w_invalid_wall() {
|
||||||
|
let player = (1, 1);
|
||||||
|
let mut bm = BinaryMap::<3, 3, 9>::new();
|
||||||
|
bm.0.fill(crate::MazePart::Wall);
|
||||||
|
assert_eq!(bm.can_move(player, crate::Direction::West), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -6,6 +6,8 @@ use display_interface_spi::SPIInterface;
|
|||||||
use embedded_graphics::{
|
use embedded_graphics::{
|
||||||
geometry::Point,
|
geometry::Point,
|
||||||
mono_font::MonoTextStyle,
|
mono_font::MonoTextStyle,
|
||||||
|
pixelcolor::Rgb565,
|
||||||
|
primitives::{Line, PrimitiveStyle},
|
||||||
text::{Text, TextStyle},
|
text::{Text, TextStyle},
|
||||||
Drawable,
|
Drawable,
|
||||||
};
|
};
|
||||||
@ -23,7 +25,6 @@ use esp_hal::{
|
|||||||
};
|
};
|
||||||
use heapless::String;
|
use heapless::String;
|
||||||
use profont::PROFONT_24_POINT;
|
use profont::PROFONT_24_POINT;
|
||||||
use shared::GenU32;
|
|
||||||
use weact_studio_epd::{graphics::Display290BlackWhite, Color};
|
use weact_studio_epd::{graphics::Display290BlackWhite, Color};
|
||||||
use weact_studio_epd::{graphics::DisplayRotation, WeActStudio290BlackWhiteDriver};
|
use weact_studio_epd::{graphics::DisplayRotation, WeActStudio290BlackWhiteDriver};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user