Menu
CoddyTech

Latar Belakang Berubin

Termasuk bagian Dunia Game dalam perjalanan Pygame di Coddy. Pelajaran 9 dari 35.

Warna polos di belakang level terlihat kosong. assets/backgrounds/clouds.png adalah gambar berukuran 72 kali 72 yang dibuat untuk diulang: tepi kirinya cocok dengan tepi kanannya, dan bagian atasnya cocok dengan bagian bawahnya. Blit gambar itu dalam kisi yang menutupi jendela:

for y in range(0, 360, 72):
    for x in range(0, 576, 72):
        screen.blit(background, (x, y))

range(0, 576, 72) menghasilkan 0, 72, 144, dan seterusnya hingga 504, posisi awal terakhir yang masih terlihat. 576 adalah kelipatan 72, sehingga salinan terakhir berakhir tepat di tepi jendela. Latar belakang menggantikan screen.fill: gambar ini menutupi setiap piksel.

Urutan itu penting. Apa pun yang kamu blit belakangan akan menutupi yang sudah ada, jadi gambar latar belakang terlebih dahulu, lalu gambar tile di atasnya.

challenge icon

Tantangan

Mudah

Kode awal memuat assets/backgrounds/clouds.png ke dalam background.

  1. Di dalam perulangan game, sebagai ganti screen.fill, blit background pada setiap x dari 0 hingga 576 dengan langkah 72, untuk setiap y dari 0 hingga 360 dengan langkah 72.
  2. Gambar ubin setelah background.

Coba sendiri

import pygame

TILE = 36

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

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

grass_img = pygame.image.load("assets/images/grass.png").convert_alpha()
grass_left_img = pygame.image.load("assets/images/grass_left.png").convert_alpha()
grass_right_img = pygame.image.load("assets/images/grass_right.png").convert_alpha()
dirt_img = pygame.image.load("assets/images/dirt.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()
background = pygame.image.load("assets/backgrounds/clouds.png").convert_alpha()


def solid(row, col):
    if row < 0 or row >= len(LEVEL) or col < 0 or col >= len(LEVEL[0]):
        return False
    return LEVEL[row][col] == "#"


tiles = []
for row, line in enumerate(LEVEL):
    for col, char in enumerate(line):
        x, y = col * TILE, row * TILE
        if char == "#":
            if solid(row - 1, col):
                image = dirt_img
            elif not solid(row, col - 1) and solid(row, col + 1):
                image = grass_left_img
            elif solid(row, col - 1) and not solid(row, col + 1):
                image = grass_right_img
            else:
                image = grass_img
            tiles.append((image, pygame.Rect(x, y, TILE, TILE)))
        elif char == "C":
            tiles.append((coin_img, pygame.Rect(x, y, TILE, TILE)))

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

    screen.fill((140, 200, 240))
    for image, rect in tiles:
        screen.blit(image, rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Semua pelajaran di Dunia Game

Latihan sendiri: Playground Pygame