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.
Tantangan
MudahKode awal memuat assets/backgrounds/clouds.png ke dalam background.
- Di dalam perulangan game, sebagai ganti
screen.fill, blitbackgroundpada setiap x dari 0 hingga 576 dengan langkah 72, untuk setiap y dari 0 hingga 360 dengan langkah 72. - 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
1Peta dari Teks
Level dalam TeksBaris dan KolomHuruf yang Memiliki MaknaTempat Pemain MemulaiSatu Layar Setiap KaliLatihan sendiri: Playground Pygame