Чтобы создать случайно сгенерированный мир в Pygame, вы можете использовать различные техники. Например, можно применять шум Перлина для генерации ландшафта или просто использовать псевдослучайные числа для расстановки объектов.
Давайте рассмотрим простой пример, который создает карту мира с случайным распределением "земли" и "воды". Мы не будем использовать здесь шум Перлина, так как он требует более сложных вычислений, а ограничимся базовым примером с использованием встроенной библиотеки random.
Установите Pygame, если у вас его ещё нет:
```
pip install pygame
```
Вот простой пример кода на Pygame, который создает случайный мир:
```python
import pygame
import random
# Инициализация Pygame
pygame.init()
# Определение цветов
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
# Константы
TILE_SIZE = 20
GRID_WIDTH, GRID_HEIGHT = 40, 30
SCREEN_WIDTH, SCREEN_HEIGHT = GRID_WIDTH * TILE_SIZE, GRID_HEIGHT * TILE_SIZE
# Настройка дисплея
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Randomly Generated World")
def generate_level():
level = []
for row in range(GRID_HEIGHT):
level_row = []
for column in range(GRID_WIDTH):
tile_type = random.choice(['water', 'land'])
level_row.append(tile_type)
level.append(level_row)
return level
def draw_world(level):
for row in range(GRID_HEIGHT):
for column in range(GRID_WIDTH):
if level[row][column] == 'land':
color = GREEN
else:
color = BLUE
pygame.draw.rect(screen, color, [column * TILE_SIZE, row * TILE_SIZE, TILE_SIZE, TILE_SIZE])
# Генерация уровня
level = generate_level()
# Главный цикл
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Отрисовка мира
screen.fill(WHITE)
draw_world(level)
pygame.display.flip()
pygame.quit()
```
Этот код создает окно Pygame размером 800x600 (можете изменить значения `TILE_SIZE`, `GRID_WIDTH`, `GRID_HEIGHT` по вашему усмотрению), где каждый блок представляет либо "землю", либо "воду". В функции `generate_level` мы создаем двумерный список, который содержит информацию о типе каждого блока. Затем, используя функцию `draw_world`, мы отрисовываем каждый блок определенным цветом в зависимости от его типа.
Функция `generate_level` может быть дополнена и усложнена, чтобы создать более интересные и вариативные карты. Например, можно реализовать алгоритмы постобработки, которые будут объединять соседние одиночные блоки в более крупные сегменты, или использовать шум Перлина для более естественного распределения различных видов местности.