Menu
CoddyTech

Righe e colonne

Fa parte della sezione Mondi del percorso Pygame di Coddy. Lezione 2 di 35.

Un ciclo percorre una riga. Un secondo ciclo lo circonda e percorre le righe, così insieme visitano ogni tessera della mappa. Il ciclo esterno assegna a line ogni stringa di LEVEL, insieme al numero della riga; il ciclo interno percorre i caratteri di quella riga.

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

Costruisci i muri una sola volta, prima del ciclo di gioco, come un elenco di Rect. La mappa non cambia mentre giochi e un Rect è ciò con cui verificherai le collisioni in seguito. Nel ciclo di gioco, disegna ogni muro:

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

row viene dal ciclo esterno, quindi determina la coordinata y della tessera; col, dal ciclo interno, determina la coordinata x. Scambiarli mette il livello su un fianco.

challenge icon

Sfida

Medio
  1. Prima del ciclo di gioco, crea una lista chiamata walls.
  2. Scorri ogni riga di LEVEL e ogni carattere al suo interno con due cicli enumerate. Per ogni #, aggiungi pygame.Rect(col * TILE, row * TILE, TILE, TILE) a walls.
  3. Nel ciclo di gioco, disegna ogni Rect in walls in marrone WALL, invece di disegnare solo la riga inferiore.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Mondi

Esercitati da solo: Playground Pygame