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.
Défi
FacileLe code de départ charge assets/backgrounds/clouds.png dans background.
- Dans la boucle de jeu, au lieu de
screen.fill, affichebackgroundà chaque x de 0 à 576 par pas de 72, pour chaque y de 0 à 360 par pas de 72. - 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
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