Ubin Tepi
Termasuk bagian Dunia Game dalam perjalanan Pygame di Coddy. Pelajaran 8 dari 35.
Sebuah platform tampak selesai saat ujung-ujungnya membulat. Paket ini menyediakan grass_left.png dan grass_right.png untuk kedua ujung permukaan berumput.
Sekarang setiap tile memeriksa tiga tetangga: atas, kiri, dan kanan. Beberapa di antaranya berada di luar peta, di bagian tepi. Sebuah fungsi pembantu memberikan jawaban untuk posisi mana pun, baik di dalam maupun di luar peta:
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] == "#"Bagian di luar peta dianggap kosong. Dengan fungsi pembantu ini, pemilihan gambar mengikuti aturan berikut:
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)))Tile yang memiliki tanah di kedua sisinya, atau tidak di sisi mana pun, tetap menggunakan rumput biasa. Di tepi kiri peta, kolom 0, tile di sebelah kiri berada di luar peta, jadi dianggap kosong dan tanah di sana dimulai dengan grass_left_img.
Tantangan
SedangKode awal memuat grass_left.png ke dalam grass_left_img dan grass_right.png ke dalam grass_right_img.
- Tulis fungsi
solid(row, col)yang mengembalikanFalsedi luar peta danLEVEL[row][col] == "#"di dalam peta. - Untuk setiap
#: gunakandirt_imgsaat tile di atasnya solid; jika tidak, gunakangrass_left_imgsaat hanya tetangga di kanan yang solid; jika tidak, gunakangrass_right_imgsaat hanya tetangga di kiri yang solid; jika tidak, gunakangrass_img.
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()
tiles = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
x, y = col * TILE, row * TILE
if char == "#":
if row == 0 or LEVEL[row - 1][col] != "#":
image = grass_img
else:
image = dirt_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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dunia Game
1Peta dari Teks
Level dalam TeksBaris dan KolomHuruf yang Memiliki MaknaTempat Pemain MemulaiSatu Layar Setiap KaliLatihan sendiri: Playground Pygame