Menu
CoddyTech

Images de tuiles

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

Les rectangles marron indiquent où se trouvent les murs. Les images donnent au niveau l'apparence d'un lieu. Charge chaque image de tuile une seule fois, après set_mode :

block_img = pygame.image.load("assets/images/block.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()

Chaque tuile mesure 36 sur 36, soit la taille d'une tuile de la carte, elle s'adapte donc à la grille sans mise à l'échelle. L'image de la pièce a une bordure vide, alors blitte-la au coin de la tuile pour que la pièce soit au milieu.

Regroupe les éléments à dessiner dans une seule liste de paires : quelle image et où. tiles.append((block_img, rect)) ajoute une paire ; la boucle de jeu les blitte toutes :

for image, rect in tiles:
    screen.blit(image, rect)

La boucle décompose chaque paire en image et rect.

challenge icon

Défi

Facile
  1. Après set_mode, charge assets/images/block.png dans block_img et assets/images/coin.png dans coin_img, chacun avec convert_alpha().
  2. Avant la boucle de jeu, crée une liste nommée tiles : pour chaque #, la paire (block_img, pygame.Rect(col * TILE, row * TILE, TILE, TILE)) ; pour chaque C, (coin_img, ...) avec le même Rect.
  3. Dans la boucle de jeu, blitte chaque paire de tiles au lieu de dessiner les rectangles marron et jaunes.

Essayez vous-même

import pygame

TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)

LEVEL = [
    "###.............",
    "###.............",
    "..........C.....",
    ".........####...",
    "..C.............",
    ".####......C....",
    "..........###...",
    "#....C.........#",
    "###..##...###.##",
    "######..########",
]

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Tiles")
clock = pygame.time.Clock()

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

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((140, 200, 240))
    for wall in walls:
        pygame.draw.rect(screen, WALL, wall)
    for coin in coins:
        pygame.draw.rect(screen, COIN, coin)
    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