Menu
CoddyTech

Baris dan Kolom

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

Satu perulangan bergerak sepanjang satu baris. Perulangan kedua mengelilinginya dan bergerak ke bawah menyusuri baris-baris, sehingga keduanya mengunjungi setiap tile pada peta. Perulangan luar memberikan setiap string dari LEVEL sebagai line, beserta nomor barisnya; perulangan dalam menelusuri karakter pada baris tersebut.

walls = []
for row, line in enumerate(LEVEL):
    for col, char in enumerate(line):
        if char == "#":
            walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))

Buat dinding sekali sebelum perulangan game, sebagai list berisi Rect. Peta tidak berubah saat kamu bermain, dan Rect adalah objek yang nantinya akan kamu gunakan untuk menguji tabrakan. Dalam perulangan game, gambar setiap dinding:

for wall in walls:
    pygame.draw.rect(screen, WALL, wall)

row berasal dari perulangan luar, jadi menentukan y tile; col dari perulangan dalam menentukan x. Jika tertukar, level akan miring ke samping.

challenge icon

Tantangan

Sedang
  1. Sebelum perulangan game, buat list bernama walls.
  2. Ulangi setiap baris LEVEL dan setiap karakter di dalamnya dengan dua perulangan enumerate. Untuk setiap #, tambahkan pygame.Rect(col * TILE, row * TILE, TILE, TILE) ke walls.
  3. Di dalam perulangan game, gambar setiap Rect di walls dengan warna cokelat WALL, bukan hanya baris paling bawah.

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))
    for col, char in enumerate(LEVEL[9]):
        if char == "#":
            pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))
    pygame.draw.rect(screen, PLAYER, player)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dunia Game

Latihan sendiri: Playground Pygame