Menu
CoddyTech

Lignes et colonnes

Fait partie de la section Les mondes du Journey Pygame de Coddy. Leçon 2 sur 35.

Une boucle parcourt une ligne. Une deuxième boucle autour de celle-ci parcourt les lignes, de sorte qu’ensemble, elles visitent chaque tuile de la carte. La boucle externe fournit chaque chaîne de LEVEL sous le nom de line, avec son numéro de ligne ; la boucle interne parcourt les caractères de cette ligne.

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

Construis les murs une seule fois, avant la boucle de jeu, sous forme de liste de Rect. La carte ne change pas pendant la partie, et un Rect est ce qui te servira ensuite à tester les collisions. Dans la boucle de jeu, dessine chaque mur :

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

row vient de la boucle externe, donc il détermine le y de la tuile ; col, de la boucle interne, détermine le x. Les intervertir met le niveau sur le côté.

challenge icon

Défi

Moyen
  1. Avant la boucle de jeu, crée une liste nommée walls.
  2. Parcours chaque ligne de LEVEL et chaque caractère de celle-ci à l’aide de deux boucles enumerate. Pour chaque #, ajoute pygame.Rect(col * TILE, row * TILE, TILE, TILE) à walls.
  3. Dans la boucle de jeu, dessine chaque Rect de walls en brun WALL, au lieu de dessiner uniquement la rangée du bas.

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Les mondes

Entraînez-vous par vous-même : Playground Pygame