Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Генерация ландшафта для шахты в игре (Python)

Георгий Термос Гуру (3329), закрыт 1 месяц назад
Хочу сделать игру по типу копателя, где он добывает ископаемые в шахте. Шахта - это 2d поле. На нем есть земля, ископаемые, камни и туннели.
Требуется сделать туннели как можно более реалистичными, так чтобы они имели определенное направление, но не были чересчур большими. Клетки туннеля это по сути воздух.
Камни и ископаемые лучше генерировать кучками, то есть в одном месте будет много касающихся ископаемых, типа залежи. Камни тоже лучше так.

Накидайте как можно реализовать или где почитать об этом, пожалуйста.
Лучший ответ
Svat Farady Мастер (1995) 1 месяц назад
Это шумами делается. Например, для генерации поверхности мира майнкрафт используется шум Перлина. А так, лучше посмотреть, как другие делают подобные игры с генерацией
Георгий ТермосГуру (3329) 1 месяц назад
то есть просто поискать шумы, верно? спасибо большое
Svat Farady Мастер (1995) Георгий Унжаков, Там человек выше как раз упомянул шум Перлина
Георгий ТермосГуру (3329) 1 месяц назад
о, круто
Остальные ответы
tema4723 Гуру (3300) 1 месяц назад
Для генерации ландшафта шахты в 2D игре на Python можно использовать простую симуляцию с помощью алгоритма Перли, чтобы создать туннели, а также случайное распределение ископаемых и камней в виде залежей. Вот пример кода, который иллюстрирует этот процесс:

import numpy as np
import random
import matplotlib.pyplot as plt

# Определение параметров
width = 40 # Ширина шахты
height = 20 # Высота шахты
num_tunnels = 5 # Количество туннелей
tunnel_length = 10 # Длина каждого туннеля
min_cluster_size = 3 # Минимальный размер залежи
max_cluster_size = 6 # Максимальный размер залежи
num_clusters = 10 # Количество залежей

# Определение типов
EMPTY = 0
DIRT = 1
STONE = 2
ORE = 3
TUNNEL = 4

# Инициализация шахты
mines = np.full((height, width), EMPTY)

# Функция для генерации туннелей
def generate_tunnels():
for _ in range(num_tunnels):
x, y = random.randint(0, width - 1), random.randint(0, height - 1)
direction = random.choice([(1, 0), (0, 1), (-1, 0), (0, -1)]) # Вправо, вниз, влево, вверх
for _ in range(tunnel_length):
if 0 <= x < width and 0 <= y < height:
mines[y, x] = TUNNEL
x += direction[0]
y += direction[1]

# Функция для генерации залежей
def generate_clusters(material, num_clusters):
for _ in range(num_clusters):
cluster_size = random.randint(min_cluster_size, max_cluster_size)
x_start = random.randint(0, width - 1)
y_start = random.randint(0, height - 1)

for _ in range(cluster_size):
x = x_start + random.randint(-1, 1)
y = y_start + random.randint(-1, 1)
if 0 <= x < width and 0 <= y < height:
if mines[y, x] == EMPTY: # Заполняем только пустые клетки
mines[y, x] = material

# Генерация ландшафта
generate_tunnels()
generate_clusters(STONE, 5) # Генерация залежей камней
generate_clusters(ORE, 5) # Генерация залежей ископаемых

# Визуализация шахты
def plot_mines():
plt.imshow(mines, cmap='terrain')
plt.colorbar(ticks=[0, 1, 2, 3, 4], label='Types of terrain')
plt.clim(-0.5, 4.5)
plt.title('Модель шахты')
plt.xticks([])
plt.yticks([])
plt.show()

plot_mines()
--------------------------------------------------------------------------------------------------
Описание кода:
Параметры шахты: Устанавливаются ширина, высота, количество туннелей и другие параметры ландшафта.

Типы клеток: Определяются константы для различных типов клеток (пустота, земля, камни, ископаемые, туннели).

Генерация туннелей: Функция generate_tunnels создает туннели в случайных направлениях.

Генерация залежей: Функция generate_clusters создает залежи камней и ископаемых в заданном количестве и размере.

Визуализация: Используется библиотека Matplotlib для отображения сгенерированной шахты.

Запустив этот код, вы получите простую 2D модель шахты с туннелями и залежами ископаемых и камней. Вы можете настраивать параметры для достижения более реалистичного результата.
Похожие вопросы