mirror of
https://github.com/Xevion/Pac-Man.git
synced 2025-12-06 19:15:45 -06:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 14b34db6de | |||
| 9238b53c40 |
22
Cargo.lock
generated
22
Cargo.lock
generated
@@ -17,6 +17,12 @@ version = "1.3.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "c_vec"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fdd7a427adc0135366d99db65b36dae9237130997e560ed61118041fb72be6e8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
@@ -160,11 +166,12 @@ checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sdl2"
|
name = "sdl2"
|
||||||
version = "0.35.2"
|
version = "0.38.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f7959277b623f1fb9e04aea73686c3ca52f01b2145f8ea16f4ff30d8b7623b1a"
|
checksum = "2d42407afc6a8ab67e36f92e80b8ba34cbdc55aaeed05249efe9a2e8d0e9feef"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
|
"c_vec",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
"sdl2-sys",
|
"sdl2-sys",
|
||||||
@@ -172,12 +179,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sdl2-sys"
|
name = "sdl2-sys"
|
||||||
version = "0.35.2"
|
version = "0.38.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e3586be2cf6c0a8099a79a12b4084357aa9b3e0b0d7980e3b67aaf7a9d55f9f0"
|
checksum = "3ff61407fc75d4b0bbc93dc7e4d6c196439965fbef8e4a4f003a36095823eac0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
|
"vcpkg",
|
||||||
"version-compare",
|
"version-compare",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -311,6 +319,12 @@ version = "0.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
|
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vcpkg"
|
||||||
|
version = "0.2.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "version-compare"
|
name = "version-compare"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
|
|||||||
14
Cargo.toml
14
Cargo.toml
@@ -7,8 +7,20 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
sdl2 = { version = "0.35", features = ["image", "ttf", "mixer"] }
|
|
||||||
spin_sleep = "1.1.1"
|
spin_sleep = "1.1.1"
|
||||||
tracing = { version = "0.1.37", features = ["max_level_debug", "release_max_level_warn"]}
|
tracing = { version = "0.1.37", features = ["max_level_debug", "release_max_level_warn"]}
|
||||||
tracing-error = "0.2.0"
|
tracing-error = "0.2.0"
|
||||||
tracing-subscriber = {version = "0.3.17", features = ["env-filter"]}
|
tracing-subscriber = {version = "0.3.17", features = ["env-filter"]}
|
||||||
|
|
||||||
|
[dependencies.sdl2]
|
||||||
|
version = "0.38"
|
||||||
|
default-features = false
|
||||||
|
features = ["ttf","image","gfx","mixer","static-link","use-vcpkg"]
|
||||||
|
|
||||||
|
[package.metadata.vcpkg]
|
||||||
|
dependencies = ["sdl2", "sdl2-image[libjpeg-turbo,tiff,libwebp]", "sdl2-ttf", "sdl2-gfx", "sdl2-mixer"]
|
||||||
|
git = "https://github.com/microsoft/vcpkg"
|
||||||
|
rev = "2024.05.24" # release 2024.05.24 # to check for a new one, check https://github.com/microsoft/vcpkg/releases
|
||||||
|
|
||||||
|
[package.metadata.vcpkg.target]
|
||||||
|
x86_64-pc-windows-msvc = { triplet = "x64-windows-static-md" }
|
||||||
111
src/helper.rs
111
src/helper.rs
@@ -1,15 +1,110 @@
|
|||||||
|
/// Checks if two grid positions are adjacent to each other
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
/// * `a` - First position as (x, y) coordinates
|
||||||
|
/// * `b` - Second position as (x, y) coordinates
|
||||||
|
/// * `diagonal` - Whether to consider diagonal adjacency (true) or only orthogonal (false)
|
||||||
|
///
|
||||||
|
/// # Returns
|
||||||
|
/// * `true` if positions are adjacent according to the diagonal parameter
|
||||||
|
/// * `false` otherwise
|
||||||
pub fn is_adjacent(a: (u32, u32), b: (u32, u32), diagonal: bool) -> bool {
|
pub fn is_adjacent(a: (u32, u32), b: (u32, u32), diagonal: bool) -> bool {
|
||||||
let (ax, ay) = a;
|
let (ax, ay) = a;
|
||||||
let (bx, by) = b;
|
let (bx, by) = b;
|
||||||
|
|
||||||
|
// Calculate absolute differences between coordinates
|
||||||
|
let dx = if ax > bx { ax - bx } else { bx - ax };
|
||||||
|
let dy = if ay > by { ay - by } else { by - ay };
|
||||||
|
|
||||||
if diagonal {
|
if diagonal {
|
||||||
(ax == bx && (ay == by + 1 || ay == by - 1))
|
// For diagonal adjacency: both differences must be ≤ 1 and at least one > 0
|
||||||
|| (ay == by && (ax == bx + 1 || ax == bx - 1))
|
dx <= 1 && dy <= 1 && (dx + dy) > 0
|
||||||
|| (ax == bx + 1 && ay == by + 1)
|
|
||||||
|| (ax == bx + 1 && ay == by - 1)
|
|
||||||
|| (ax == bx - 1 && ay == by + 1)
|
|
||||||
|| (ax == bx - 1 && ay == by - 1)
|
|
||||||
} else {
|
} else {
|
||||||
(ax == bx && (ay == by + 1 || ay == by - 1))
|
// For orthogonal adjacency: exactly one difference must be 1, the other 0
|
||||||
|| (ay == by && (ax == bx + 1 || ax == bx - 1))
|
(dx == 1 && dy == 0) || (dx == 0 && dy == 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_orthogonal_adjacency() {
|
||||||
|
// Test orthogonal adjacency (diagonal = false)
|
||||||
|
|
||||||
|
// Same position should not be adjacent
|
||||||
|
assert!(!is_adjacent((0, 0), (0, 0), false));
|
||||||
|
|
||||||
|
// Adjacent positions should be true
|
||||||
|
assert!(is_adjacent((0, 0), (1, 0), false)); // Right
|
||||||
|
assert!(is_adjacent((0, 0), (0, 1), false)); // Down
|
||||||
|
assert!(is_adjacent((1, 1), (0, 1), false)); // Left
|
||||||
|
assert!(is_adjacent((1, 1), (1, 0), false)); // Up
|
||||||
|
|
||||||
|
// Diagonal positions should be false
|
||||||
|
assert!(!is_adjacent((0, 0), (1, 1), false));
|
||||||
|
assert!(!is_adjacent((0, 1), (1, 0), false));
|
||||||
|
|
||||||
|
// Positions more than 1 step away should be false
|
||||||
|
assert!(!is_adjacent((0, 0), (2, 0), false));
|
||||||
|
assert!(!is_adjacent((0, 0), (0, 2), false));
|
||||||
|
assert!(!is_adjacent((0, 0), (2, 2), false));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_diagonal_adjacency() {
|
||||||
|
// Test diagonal adjacency (diagonal = true)
|
||||||
|
|
||||||
|
// Same position should not be adjacent
|
||||||
|
assert!(!is_adjacent((0, 0), (0, 0), true));
|
||||||
|
|
||||||
|
// Orthogonal adjacent positions should be true
|
||||||
|
assert!(is_adjacent((0, 0), (1, 0), true)); // Right
|
||||||
|
assert!(is_adjacent((0, 0), (0, 1), true)); // Down
|
||||||
|
assert!(is_adjacent((1, 1), (0, 1), true)); // Left
|
||||||
|
assert!(is_adjacent((1, 1), (1, 0), true)); // Up
|
||||||
|
|
||||||
|
// Diagonal adjacent positions should be true
|
||||||
|
assert!(is_adjacent((0, 0), (1, 1), true)); // Down-right
|
||||||
|
assert!(is_adjacent((1, 0), (0, 1), true)); // Down-left
|
||||||
|
assert!(is_adjacent((0, 1), (1, 0), true)); // Up-right
|
||||||
|
assert!(is_adjacent((1, 1), (0, 0), true)); // Up-left
|
||||||
|
|
||||||
|
// Positions more than 1 step away should be false
|
||||||
|
assert!(!is_adjacent((0, 0), (2, 0), true));
|
||||||
|
assert!(!is_adjacent((0, 0), (0, 2), true));
|
||||||
|
assert!(!is_adjacent((0, 0), (2, 2), true));
|
||||||
|
assert!(!is_adjacent((0, 0), (1, 2), true));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_edge_cases() {
|
||||||
|
// Test with larger coordinates
|
||||||
|
assert!(is_adjacent((100, 100), (101, 100), false));
|
||||||
|
assert!(is_adjacent((100, 100), (100, 101), false));
|
||||||
|
assert!(!is_adjacent((100, 100), (102, 100), false));
|
||||||
|
|
||||||
|
assert!(is_adjacent((100, 100), (101, 101), true));
|
||||||
|
assert!(!is_adjacent((100, 100), (102, 102), true));
|
||||||
|
|
||||||
|
// Test with zero coordinates
|
||||||
|
assert!(is_adjacent((0, 0), (1, 0), false));
|
||||||
|
assert!(is_adjacent((0, 0), (0, 1), false));
|
||||||
|
assert!(is_adjacent((0, 0), (1, 1), true));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_commutative_property() {
|
||||||
|
// The function should work the same regardless of parameter order
|
||||||
|
assert_eq!(
|
||||||
|
is_adjacent((1, 2), (2, 2), false),
|
||||||
|
is_adjacent((2, 2), (1, 2), false)
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
is_adjacent((1, 2), (2, 3), true),
|
||||||
|
is_adjacent((2, 3), (1, 2), true)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -12,6 +12,7 @@ mod constants;
|
|||||||
mod direction;
|
mod direction;
|
||||||
mod entity;
|
mod entity;
|
||||||
mod game;
|
mod game;
|
||||||
|
mod helper;
|
||||||
mod map;
|
mod map;
|
||||||
mod modulation;
|
mod modulation;
|
||||||
mod pacman;
|
mod pacman;
|
||||||
|
|||||||
Reference in New Issue
Block a user