Как стать автором
Обновить

Комментарии 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

Да, вы правы. Спасибо за комментарий!

Спасибо за доходчивое и наглядное изложение!

Есть вопрос с позиции, скорее, "художника", чем программиста, но как считаете: возможно ли в данных, из которых рендерится карта, заранее раскинуть, условно говоря, предподчительные области — чтобы разбить однообразность распределения биомных групп? А то даже на "архипелаг островов" распределение, которое вы так назвали, похоже с некоторой натяжкой (по крайней мере, если сравнивать с землёй); кроме того, в историях (если генерируемые карты предполагают использование как декораций для какого-то сюжета) разнообразный как в декорациях, так и их в масштабах и дальностях пейзаж может обусловливать всякие интересные вещи культурного и/или походно-приключенческого плана.

Мне кажется, особенно в сочетании с использованием относительной адресации, можно было бы до запуска рандома назначить более продолжительные пространства воды и суши — а потом, может быть, очертить и пояса применения неодинаковых правил перекрашивания — для достижения более нюансированной картины.

В общем, заставил задуматься ваш проект!

Спасибо за комментарий! Я планирую новый проект с использованием нескольких алгоритмов, которые будут учитывать погоду, группы биомов, плавный переход между ними и климатические пояса.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации