Комментарии 4
Прикольно. Ещё бы логику для гор придумать.
Чтобы не писать копипаст, можно сделать цикл по сдвигам от текущей ячейки
offsets = [
(-1,-1),(0,-1),(1,-1),
(-1, 0),(0, 0),(1, 0),
(-1, 1),(0, 1),(1, 1),
]
# y current and x current
for yc in range(height):
for xc in range(width):
# x offset and y offset
for (xo, yo) in offsets:
x = xc + xo
y = yc + yo
# проверяем границы
if x < 0 or x >= width: continue
if y < 0 or y >= height: continue
# для текущей ячейки своя логика
if x == xc and y == yc:
if self.matrix[x][y] == BiomesType.SEA:
if counter_land in (3, 6, 7, 8):
self.matrix[x][y] = BiomesType.LAND
self.paint_pixel_element(self.matrix[x][y], x, y)
# в вашем коде земля перетирала воду,
# поэтому проще сразу на неё проверить
continue;
if self.matrix[x][y] == BiomesType.LAND:
if counter_sea in (3, 6, 7, 8):
self.matrix[x][y] = BiomesType.SEA
self.paint_pixel_element(self.matrix[x][y], x, y)
# логика для окружающих ячеек
else:
if self.matrix[x][y] == BiomesType.SEA:
counter_sea += 1
else:
counter_land += 1
Спасибо за доходчивое и наглядное изложение!
Есть вопрос с позиции, скорее, "художника", чем программиста, но как считаете: возможно ли в данных, из которых рендерится карта, заранее раскинуть, условно говоря, предподчительные области — чтобы разбить однообразность распределения биомных групп? А то даже на "архипелаг островов" распределение, которое вы так назвали, похоже с некоторой натяжкой (по крайней мере, если сравнивать с землёй); кроме того, в историях (если генерируемые карты предполагают использование как декораций для какого-то сюжета) разнообразный как в декорациях, так и их в масштабах и дальностях пейзаж может обусловливать всякие интересные вещи культурного и/или походно-приключенческого плана.
Мне кажется, особенно в сочетании с использованием относительной адресации, можно было бы до запуска рандома назначить более продолжительные пространства воды и суши — а потом, может быть, очертить и пояса применения неодинаковых правил перекрашивания — для достижения более нюансированной картины.
В общем, заставил задуматься ваш проект!
Генерация 2D мира с помощью клеточного автомата на Python