]> Untitled Git - axy/ft/a-maze-ing.git/commitdiff
Pacman algorithm tweak
authorAxy <gilliardmarthey.axel@gmail.com>
Tue, 10 Feb 2026 16:48:34 +0000 (17:48 +0100)
committerAxy <gilliardmarthey.axel@gmail.com>
Tue, 10 Feb 2026 16:48:34 +0000 (17:48 +0100)
__main__.py
amazeing/maze_make_pacman.py

index 2d8406b0c9ae265e899253116ec4032148cf3864..1a252ec93ae9abb385ee8251db46906fa1b03f63 100644 (file)
@@ -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)
index 2d194a5b56702f088402adcb44246f012bafad0c..622494a45566e2b81a624095501088ebbf56d69f 100644 (file)
@@ -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()