← Каталог
Разработка игр на Python — Тайловый фон (Tilemap)
Фрагмент из «Разработка игр на Python»: Тайловый фон (Tilemap).
import pygame
TILE_SIZE = 64
MAP_WIDTH = 20 # Количество тайлов по ширине
MAP_HEIGHT = 15 # Количество тайлов по высоте
# Генерация карты (0 - земля, 1 - стена, 2 - вода)
# В реальности это загружается из JSON или текстового файла
simple_map = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,......], # Упрощено
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]
# Загрузка тайлов (для примера используем цвета)
tiles = {
0: pygame.Surface((TILE_SIZE, TILE_SIZE)), # Земля
1: pygame.Surface((TILE_SIZE, TILE_SIZE)), # Стена
2: pygame.Surface((TILE_SIZE, TILE_SIZE)) # Вода
}
for key in tiles:
if key == 0: tiles[key].fill((34, 139, 34)) # Forest Green
elif key == 1: tiles[key].fill((105, 105, 105)) # Gray
else: tiles[key].fill((65, 105, 225)) # Royal Blue
def draw_map(screen, map_data):
for row_idx, row in enumerate(map_data):
for col_idx, tile_type in enumerate(row):
screen.blit(tiles[tile_type], (col_idx * TILE_SIZE, row_idx * TILE_SIZE))
# ... в функции main() после инициализации ...
# draw_map(screen, simple_map)
import pygame
TILE_SIZE = 64
MAP_WIDTH = 20 # Количество тайлов по ширине
MAP_HEIGHT = 15 # Количество тайлов по высоте
# Генерация карты (0 - земля, 1 - стена, 2 - вода)
# В реальности это загружается из JSON или текстового файла
simple_map = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,......], # Упрощено
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]
# Загрузка тайлов (для примера используем цвета)
tiles = {
0: pygame.Surface((TILE_SIZE, TILE_SIZE)), # Земля
1: pygame.Surface((TILE_SIZE, TILE_SIZE)), # Стена
2: pygame.Surface((TILE_SIZE, TILE_SIZE)) # Вода
}
for key in tiles:
if key == 0: tiles[key].fill((34, 139, 34)) # Forest Green
elif key == 1: tiles[key].fill((105, 105, 105)) # Gray
else: tiles[key].fill((65, 105, 225)) # Royal Blue
def draw_map(screen, map_data):
for row_idx, row in enumerate(map_data):
for col_idx, tile_type in enumerate(row):
screen.blit(tiles[tile_type], (col_idx * TILE_SIZE, row_idx * TILE_SIZE))
# ... в функции main() после инициализации ...
# draw_map(screen, simple_map)