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

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

Сообщение Anonymous »

Я работаю над очень большим проектом, который требует создания специализированного кругового лабиринта. Я использую библиотеку PIL Python, чтобы нарисовать лабиринт на изображении. Насколько я вижу, есть только две проблемы, и они связаны с самим рисунком. Они заключаются в следующем:
Проблема первая:
Линии стен лабиринта неполные, но присутствуют. Длина линии не такая, как должна быть, что приводит к «полулабиринту».
Проблема вторая:
Из-за расширяющегося характера кругового лабиринта каждый слой (или " уровень», как я называю его в сценарии) определяет количество ячеек, помещаемых в указанный слой, что позволяет получить более естественный вид лабиринта вместо лабиринта с коридорами, которые продолжают увеличиваться в размерах по мере удаления от центра. Это вызывает небольшие расхождения при соединении двух слоев вместе. Это не на каждом уровне. Как раз тогда, когда необходимо увеличить количество ячеек.
Эти проблемы на несколько месяцев задержали рост моего проекта, и моя команда становится все менее и менее мотивированной продолжать работу над таким препятствием. Любая помощь очень ценится. Заранее спасибо!
Пример лабиринта, созданного из скрипта

Код: Выделить всё

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 

Подробнее здесь: [url]https://stackoverflow.com/questions/78669091/python-maze-generation-using-pil-going-wrong[/url]

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