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("стена")
|
print("стена")
|
||||||
else:
|
else:
|
||||||
print("неизвестно")
|
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