Menu
CoddyTech

Изображения тайлов

Часть раздела Игровые миры путешествия по Pygame на Coddy. Урок 6 из 35.

Коричневые прямоугольники показывают, где находятся стены. Изображения превращают уровень в подобие места. Загрузите изображение каждой плитки один раз, после set_mode:

block_img = pygame.image.load("assets/images/block.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()

Размер каждой плитки — 36 на 36, как у плитки карты, поэтому она помещается в сетку без масштабирования. У изображения монеты есть пустая рамка, поэтому выводите его в углу плитки, и монета окажется посередине.

Храните данные о том, что нужно нарисовать, в одном списке пар: какое изображение и где. tiles.append((block_img, rect)) добавляет пару; игровой цикл выводит их все:

for image, rect in tiles:
    screen.blit(image, rect)

Цикл распаковывает каждую пару в image и rect.

challenge icon

Задание

Легко
  1. После set_mode загрузи assets/images/block.png в block_img, а assets/images/coin.png — в coin_img, применив к каждому convert_alpha().
  2. Перед игровым циклом создай список с именем tiles: для каждого # добавь пару (block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE)); для каждого C — (coin_img, ...) с таким же Rect.
  3. В игровом цикле выводи на экран каждую пару из tiles вместо рисования коричневых и жёлтых прямоугольников.

Попробуйте сами

import pygame

TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)

LEVEL = [
    "###.............",
    "###.............",
    "..........C.....",
    ".........####...",
    "..C.............",
    ".####......C....",
    "..........###...",
    "#....C.........#",
    "###..##...###.##",
    "######..########",
]

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Tiles")
clock = pygame.time.Clock()

walls = []
coins = []
for row, line in enumerate(LEVEL):
    for col, char in enumerate(line):
        if char == "#":
            walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))
        elif char == "C":
            coins.append(pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((140, 200, 240))
    for wall in walls:
        pygame.draw.rect(screen, WALL, wall)
    for coin in coins:
        pygame.draw.rect(screen, COIN, coin)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Игровые миры

Потренируйтесь самостоятельно: Песочница Pygame