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é.
Défi
Moyen- Avant la boucle de jeu, crée une liste nommée
walls. - Parcours chaque ligne de
LEVELet chaque caractère de celle-ci à l’aide de deux bouclesenumerate. Pour chaque#, ajoutepygame.Rect(col * TILE, row * TILE, TILE, TILE)àwalls. - Dans la boucle de jeu, dessine chaque Rect de
wallsen brunWALL, 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()
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
1Des cartes à partir de texte
Un niveau en texteLignes et colonnesDes lettres qui ont un sensOù commence le joueurUn écran à la fois4Collisions avec les plateformes
Murs à gauche et à droiteAtterrir sur les plateformesSe cogner la têteTomber hors du niveauUn axe à la foisEntraînez-vous par vous-même : Playground Pygame