Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Program awal menggambar seluruh baris bawah sebagai satu balok cokelat. Gambar baris itu dari peta:

  1. Hapus baris yang menggambar balok tersebut.
  2. Lakukan perulangan pada LEVEL[9] dengan enumerate.
  3. Untuk setiap #, gambar persegi panjang WALL di (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

Latihan sendiri: Playground Pygame