Skip to content

Commit 8906b0b

Browse files
committed
Fixed maze generation not being random at all.
1 parent 5c8b0fd commit 8906b0b

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

src/maze.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::{
22
cell::RefCell,
3-
collections::HashMap,
3+
collections::{BinaryHeap, HashMap},
44
rc::{Rc, Weak},
55
};
66

@@ -118,7 +118,7 @@ fn unwrap_index<const DIMS: usize>(lengths: &[usize; DIMS], index: usize) -> Opt
118118
// Generate a maze with the provided number of side lengths.
119119
pub fn generate_maze<const DIMS: usize>(
120120
lengths: &[usize; DIMS],
121-
rng: impl rand::Rng,
121+
rng: &mut impl rand::Rng,
122122
) -> impl Maze<DIMS> {
123123
let mut maze = WalkMaze::<DIMS> {
124124
lengths: lengths.clone(),
@@ -134,14 +134,14 @@ pub fn generate_maze<const DIMS: usize>(
134134
cells.insert(pos, MazeGenCell::new(index));
135135
}
136136

137-
let mut pending_edges = Vec::with_capacity(cell_count * DIMS);
137+
let mut pending_edges = BinaryHeap::with_capacity(cell_count * DIMS);
138138
for index in 0..cell_count {
139139
for dim in 0..DIMS {
140-
pending_edges.push((index, dim))
140+
pending_edges.push((rng.next_u32(), index, dim))
141141
}
142142
}
143143

144-
while let Some((target_index, dim)) = pending_edges.pop() {
144+
while let Some((_, target_index, dim)) = pending_edges.pop() {
145145
let a = unwrap_index(lengths, target_index).unwrap();
146146
if a[dim] == lengths[dim] {
147147
continue;
@@ -202,8 +202,8 @@ mod tests {
202202

203203
#[test]
204204
fn verify_generates() {
205-
let rng = StdRng::seed_from_u64(684153987);
206-
let maze = generate_maze(&[5, 5, 5, 5, 5], rng);
205+
let mut rng = StdRng::seed_from_u64(684153987);
206+
let maze = generate_maze(&[5, 5, 5, 5, 5], &mut rng);
207207

208208
assert_eq!(
209209
maze.can_move(&[1, 2, 3214, 2, 2], 2, MazeMoveDir::Forward),
@@ -213,8 +213,8 @@ mod tests {
213213

214214
#[test]
215215
fn verify_generates_single() {
216-
let rng = StdRng::seed_from_u64(684153987);
217-
let maze = generate_maze(&[5, 1, 1], rng);
216+
let mut rng = StdRng::seed_from_u64(684153987);
217+
let maze = generate_maze(&[5, 1, 1], &mut rng);
218218

219219
assert_eq!(
220220
maze.can_move(&[0, 0, 0], 0, MazeMoveDir::Forward),

0 commit comments

Comments
 (0)