Генерация лабиринта Python с использованием PIL идет не такPython

Программы на Python
Anonymous
Генерация лабиринта Python с использованием PIL идет не так

Сообщение Anonymous »

Я работал над созданием специализированного кругового лабиринта, используя библиотеку PIL для рисования лабиринта на изображении.
Изображение

В приведенном выше выходном изображении есть две проблемы.
  • Линии стен лабиринта неполные, но присутствуют. Длина линии не такая, как должна быть, что приводит к «полулабиринту».
  • Из-за расширяющегося характера круглого лабиринта каждый Слой (или «уровень», как я называю его в сценарии) определяет количество ячеек, помещаемых в указанный слой, что позволяет создать более естественный вид лабиринта вместо лабиринта с коридорами, которые продолжают увеличиваться в размерах по мере удаления от уровня. центр. Это вызывает небольшие расхождения при соединении двух слоев. Это не на каждом уровне. Именно тогда, когда необходимо увеличить количество клеток.
Как я могу их решить? Ниже приведена текущая реализация.
from PIL import Image, ImageDraw
import math
import random
from collections import deque

class CircularMaze:

def __init__(self, levels, line_len, wall_width, corridor_size, canvas_size):
assert line_len > 0, "Line length must be greater than 0"
self.canvas_size = canvas_size
self.num_levels = levels
self.line_length = line_len
self.wall_width = wall_width
self.corridor_size = corridor_size
self.num_cells_at_level = self.cell_count_by_level()
self.total_cells = sum(self.num_cells_at_level)

def cell_count_by_level(self):
cells_by_level = [1]
for level in range(1, self.num_levels): cells_by_level.append(int(math.pow(2, math.floor(math.log2(level + 1)) + 3)))
return cells_by_level

def index_1d_from_2d(self, level, cell):
if level >= self.num_levels: raise Exception("level greater than maze levels")
idx = 0
for lvl in range(level): idx += self.num_cells_at_level[lvl]
idx += cell
return idx

def index_2d_from_1d(self, idx):
if idx >= self.total_cells: raise Exception("1D index greater than total number of cells")
level = 0
while idx - self.num_cells_at_level[level] >= 0:
idx -= self.num_cells_at_level[level]
level += 1
return level, idx

def parent_index_1d(self, level, cell):
if level

Подробнее здесь: https://stackoverflow.com/questions/786 ... oing-wrong

Вернуться в «Python»