From 7f54c67546213d23d1c946bb758b02f5798ee1dc Mon Sep 17 00:00:00 2001 From: Axy Date: Tue, 10 Feb 2026 17:48:34 +0100 Subject: [PATCH] Pacman algorithm tweak --- __main__.py | 4 ++-- amazeing/maze_make_pacman.py | 34 +++++++++++++--------------------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/__main__.py b/__main__.py index 2d8406b..1a252ec 100644 --- a/__main__.py +++ b/__main__.py @@ -31,8 +31,8 @@ def display_maze(maze: Maze) -> None: sleep(0.05) +# maze_make_perfect(maze, callback=display_maze) maze_make_perfect(maze) -display_maze(maze) -maze_make_pacman(maze, walls_const) +maze_make_pacman(maze, walls_const, callback=display_maze) maze._rebuild() display_maze(maze) diff --git a/amazeing/maze_make_pacman.py b/amazeing/maze_make_pacman.py index 2d194a5..622494a 100644 --- a/amazeing/maze_make_pacman.py +++ b/amazeing/maze_make_pacman.py @@ -9,29 +9,21 @@ def maze_make_pacman( callback: Callable[[Maze], None] = lambda _: None, iterations: int = 10, ) -> None: - def walls_full_apply( - f: Callable[[WallCoord, list[WallCoord]], Any], - len_pred: Callable[[int], bool], - ) -> None: + for _ in range(0, iterations): walls = [wall for wall in maze.walls_full() if wall not in walls_const] random.shuffle(walls) + n = 0 for wall in walls: leaf_neighbours = maze.wall_leaf_neighbours(wall) - if maze.wall_cuts_cycle(wall) and len_pred(len(leaf_neighbours)): - f(wall, leaf_neighbours) - callback(maze) - - def wall_move(wall: WallCoord, leaf_neighbours: list[WallCoord]) -> None: - maze._remove_wall(wall) - maze.fill_wall(random.choice(leaf_neighbours)) - - for _ in range(0, iterations): - walls_full_apply( - lambda wall, _: maze._remove_wall(wall), - lambda n: n == 0, - ) - walls_full_apply( - wall_move, - lambda n: n != 0, - ) + if not maze.wall_cuts_cycle(wall): + continue + if len(leaf_neighbours) == 0: + maze._remove_wall(wall) + else: + maze._remove_wall(wall) + maze.fill_wall(random.choice(leaf_neighbours)) + n += 1 + callback(maze) + if n == 0: + break maze._rebuild() -- 2.52.0