Level dalam Teks
Termasuk bagian Dunia Game dalam perjalanan Pygame di Coddy. Pelajaran 1 dari 35.
Menggambar dinding level satu per satu dengan angka lambat ditulis dan sulit diubah. Sebagai gantinya, tulis level sebagai teks: list string, satu string untuk setiap baris tile, satu karakter untuk setiap tile.
LEVEL = [
"################",
"#..............#",
"#....####......#",
"#..............#",
"#.........##...#",
"#..##.....##...#",
"#..##..........#",
"#.........###..#",
"#..............#",
"####..####..####",
]Di sini, # adalah dinding dan . adalah ruang kosong. LEVEL[9] adalah baris paling bawah, berupa string, dan LEVEL[9][4] adalah karakter kelimanya. Baris dihitung dari atas, kolom dari kiri, keduanya dimulai dari 0.
Dengan tile selebar TILE = 36 piksel, tile di kolom col dan baris row dimulai pada x = col * TILE, y = row * TILE. Untuk menelusuri satu baris, enumerate memberikan setiap karakter beserta indeksnya:
for col, char in enumerate(LEVEL[9]):
if char == "#":
pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))Dua celah di baris paling bawah tetap kosong, karena hanya # yang menggambar tile.
Tantangan
MudahProgram awal menggambar seluruh baris bawah sebagai satu balok cokelat. Gambar baris itu dari peta:
- Hapus baris yang menggambar balok tersebut.
- Lakukan perulangan pada
LEVEL[9]denganenumerate. - Untuk setiap
#, gambar persegi panjangWALLdi(col * TILE, 9 * TILE, TILE, TILE).
Biarkan peta seperti semula. Persegi hijau bergerak dengan tombol panah dan untuk saat ini menembus apa saja. Dinding yang menghentikannya akan dibahas nanti di bagian ini.
Coba sendiri
import pygame
TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)
LEVEL = [
"################",
"#..............#",
"#....####......#",
"#..............#",
"#.........##...#",
"#..##.....##...#",
"#..##..........#",
"#.........###..#",
"#..............#",
"####..####..####",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()
player = pygame.Rect(40, 40, 28, 28)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= 4
if keys[pygame.K_RIGHT]:
player.x += 4
if keys[pygame.K_UP]:
player.y -= 4
if keys[pygame.K_DOWN]:
player.y += 4
screen.fill((30, 30, 46))
pygame.draw.rect(screen, WALL, (0, 324, 576, 36))
pygame.draw.rect(screen, PLAYER, player)
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