Menu
CoddyTech

Un arrière-plan en tuiles

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

Une couleur unie derrière le niveau donne une impression de vide. assets/backgrounds/clouds.png est une image de 72 sur 72 conçue pour être répétée : son bord gauche correspond à son bord droit, et son bord supérieur à son bord inférieur. Affichez-la en grille pour couvrir la fenêtre :

for y in range(0, 360, 72):
    for x in range(0, 576, 72):
        screen.blit(background, (x, y))

range(0, 576, 72) donne 0, 72, 144, et ainsi de suite jusqu’à 504, le dernier point de départ qui reste visible. 576 est un multiple de 72, donc la dernière copie se termine au bord de la fenêtre. L’arrière-plan remplace screen.fill : il couvre chaque pixel.

L’ordre compte. Tout ce que vous affichez ensuite recouvre ce qui se trouve déjà à l’écran ; dessinez donc d’abord l’arrière-plan, puis les tuiles par-dessus.

challenge icon

Défi

Facile

Le code de départ charge assets/backgrounds/clouds.png dans background.

  1. Dans la boucle de jeu, au lieu de screen.fill, affiche background à chaque x de 0 à 576 par pas de 72, pour chaque y de 0 à 360 par pas de 72.
  2. Dessine les tuiles après l’arrière-plan.

Essayez vous-même

import pygame

TILE = 36

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

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

grass_img = pygame.image.load("assets/images/grass.png").convert_alpha()
grass_left_img = pygame.image.load("assets/images/grass_left.png").convert_alpha()
grass_right_img = pygame.image.load("assets/images/grass_right.png").convert_alpha()
dirt_img = pygame.image.load("assets/images/dirt.png").convert_alpha()
coin_img = pygame.image.load("assets/images/coin.png").convert_alpha()
background = pygame.image.load("assets/backgrounds/clouds.png").convert_alpha()


def solid(row, col):
    if row < 0 or row >= len(LEVEL) or col < 0 or col >= len(LEVEL[0]):
        return False
    return LEVEL[row][col] == "#"


tiles = []
for row, line in enumerate(LEVEL):
    for col, char in enumerate(line):
        x, y = col * TILE, row * TILE
        if char == "#":
            if solid(row - 1, col):
                image = dirt_img
            elif not solid(row, col - 1) and solid(row, col + 1):
                image = grass_left_img
            elif solid(row, col - 1) and not solid(row, col + 1):
                image = grass_right_img
            else:
                image = grass_img
            tiles.append((image, pygame.Rect(x, y, TILE, TILE)))
        elif char == "C":
            tiles.append((coin_img, pygame.Rect(x, y, TILE, TILE)))

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

    screen.fill((140, 200, 240))
    for image, rect in tiles:
        screen.blit(image, rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Toutes les leçons de Les mondes

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