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 модель шахты с туннелями и залежами ископаемых и камней. Вы можете настраивать параметры для достижения более реалистичного результата.
Требуется сделать туннели как можно более реалистичными, так чтобы они имели определенное направление, но не были чересчур большими. Клетки туннеля это по сути воздух.
Камни и ископаемые лучше генерировать кучками, то есть в одном месте будет много касающихся ископаемых, типа залежи. Камни тоже лучше так.
Накидайте как можно реализовать или где почитать об этом, пожалуйста.