Now the maze has rooms, and was pretty easy to add.

master
Zed A. Shaw 1 week ago
parent 04ed77494e
commit 8a6d231565
  1. 17
      phase_six.py

@ -10,9 +10,18 @@ class Map:
self.width = width self.width = width
self.height = height self.height = height
grid = self.make_grid() grid = self.make_grid()
dead_ends = self.hunt_and_kill(grid)
grid = self.sample_rooms(grid, dead_ends, 4, int(len(dead_ends) * 0.6))
self.hunt_and_kill(grid) self.hunt_and_kill(grid)
self.render_map(grid) self.render_map(grid)
def sample_rooms(self, grid, dead_ends, size, count):
grid = self.make_grid()
for x, y in random.sample(dead_ends, count):
if x < self.width - size and y < self.height - size:
self.make_room(grid, x, y, size)
return grid
def make_grid(self): def make_grid(self):
grid = [] grid = []
for y in range(0, self.height): for y in range(0, self.height):
@ -20,6 +29,11 @@ class Map:
return grid return grid
def make_room(self, grid, x, y, size):
for row in range(y, y+size):
for col in range(x, x+size):
grid[row][col] = SPACE
def find_coord(self, grid): def find_coord(self, grid):
for y in range(1, self.height, 2): for y in range(1, self.height, 2):
for x in range(1, self.width, 2): for x in range(1, self.width, 2):
@ -69,10 +83,12 @@ class Map:
def hunt_and_kill(self, grid): def hunt_and_kill(self, grid):
on_x = 1 on_x = 1
on_y = 1 on_y = 1
dead_ends = []
while True: while True:
n = self.neighbors(grid, on_x, on_y) n = self.neighbors(grid, on_x, on_y)
if len(n) == 0: if len(n) == 0:
dead_ends.append([on_x, on_y])
t = self.find_coord(grid) t = self.find_coord(grid)
if t == None: break if t == None: break
on_x, on_y = t[0] on_x, on_y = t[0]
@ -90,6 +106,7 @@ class Map:
on_x, on_y = nb_x, nb_y on_x, on_y = nb_x, nb_y
assert self.complete(grid), "Maze is not complete." assert self.complete(grid), "Maze is not complete."
return dead_ends
def render_map(self, grid): def render_map(self, grid):

Loading…
Cancel
Save