forked from UNN/2026-rff_mp
[2] Генерация лабиринтов
This commit is contained in:
parent
062a96a0b4
commit
4427e6d0a1
|
|
@ -457,3 +457,87 @@ def run_game(maze, path=None):
|
|||
print("стена")
|
||||
else:
|
||||
print("неизвестно")
|
||||
|
||||
def generate_empty_maze(width, height):
|
||||
|
||||
maze = Maze(width, height)
|
||||
for x in range(width):
|
||||
for y in range(height):
|
||||
maze.getCell(x, y).isWall = False
|
||||
maze.setStart(0, 0)
|
||||
maze.setExit(width-1, height-1)
|
||||
return maze
|
||||
|
||||
def generate_maze_with_walls(width, height, wall_probability=0.3):
|
||||
|
||||
maze = Maze(width, height)
|
||||
for x in range(width):
|
||||
for y in range(height):
|
||||
if random.random() < wall_probability:
|
||||
maze.getCell(x, y).isWall = True
|
||||
else:
|
||||
maze.getCell(x, y).isWall = False
|
||||
|
||||
|
||||
maze.getCell(0, 0).isWall = False
|
||||
maze.getCell(width-1, height-1).isWall = False
|
||||
|
||||
maze.setStart(0, 0)
|
||||
maze.setExit(width-1, height-1)
|
||||
return maze
|
||||
|
||||
def generate_maze_no_exit(width, height):
|
||||
|
||||
maze = generate_maze_with_walls(width, height, 0.3)
|
||||
|
||||
exit_cell = maze.getCell(width-1, height-1)
|
||||
exit_cell.isWall = True
|
||||
maze.exit = None
|
||||
return maze
|
||||
|
||||
def save_maze_to_file(maze, filename):
|
||||
|
||||
with open(filename, 'w') as f:
|
||||
for y in range(maze.height):
|
||||
for x in range(maze.width):
|
||||
cell = maze.getCell(x, y)
|
||||
if cell == maze.start:
|
||||
f.write('s')
|
||||
elif cell == maze.exit:
|
||||
f.write('e')
|
||||
elif cell.isWall:
|
||||
f.write('#')
|
||||
else:
|
||||
f.write(' ')
|
||||
f.write('\n')
|
||||
|
||||
def create_test_mazes():
|
||||
|
||||
mazes = []
|
||||
|
||||
|
||||
small = generate_maze_with_walls(10, 10, 0.2)
|
||||
save_maze_to_file(small, "maze_small.txt")
|
||||
mazes.append(('маленький (10x10)', small))
|
||||
|
||||
|
||||
medium = generate_maze_with_walls(50, 50, 0.3)
|
||||
save_maze_to_file(medium, "maze_medium.txt")
|
||||
mazes.append(('средний (50x50)', medium))
|
||||
|
||||
|
||||
large = generate_maze_with_walls(100, 100, 0.3)
|
||||
save_maze_to_file(large, "maze_large.txt")
|
||||
mazes.append(('большой (100x100)', large))
|
||||
|
||||
|
||||
empty = generate_empty_maze(50, 50)
|
||||
save_maze_to_file(empty, "maze_empty.txt")
|
||||
mazes.append(('пустой (50x50)', empty))
|
||||
|
||||
|
||||
no_exit = generate_maze_no_exit(20, 20)
|
||||
save_maze_to_file(no_exit, "maze_no_exit.txt")
|
||||
mazes.append(('без выхода (20x20)', no_exit))
|
||||
|
||||
return mazes
|
||||
Loading…
Reference in New Issue
Block a user