Menu
CoddyTech

Satırlar ve Sütunlar

Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 2 / 35.

Bir döngü bir satır boyunca ilerler. Etrafındaki ikinci bir döngü satırlar boyunca aşağı iner; böylece birlikte haritadaki her karoyu ziyaret ederler. Dış döngü, LEVEL içindeki her dizgeyi satır numarasıyla birlikte line olarak verir; iç döngü ise o satırdaki karakterler boyunca ilerler.

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))

Duvarları, oyun döngüsünden önce, bir kez Rect listesi olarak oluştur. Oynarken harita değişmez ve Rect, çarpışmaları daha sonra denetleyeceğin şeydir. Oyun döngüsünde her duvarı çiz:

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

row dış döngüden gelir, bu yüzden karonun y değerini belirler; iç döngüden gelen col ise x değerini belirler. Bunları karıştırmak, seviyeyi yan yatırır.

challenge icon

Görev

Orta
  1. Oyun döngüsünden önce, walls adlı bir liste oluştur.
  2. LEVEL içindeki her satır ve satırdaki her karakter üzerinde iki enumerate döngüsüyle yinele. Her # için pygame.Rect(col * TILE, row * TILE, TILE, TILE) değerini walls listesine ekle.
  3. Oyun döngüsünde, yalnızca en alt sırayı çizmek yerine walls içindeki her Rect'i kahverengi WALL rengiyle çiz.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Dünyalar bölümündeki tüm dersler

Kendi başına pratik yap: Pygame playground