Tuiles de bordure
Fait partie de la section Les mondes du Journey Pygame de Coddy. Leçon 8 sur 35.
Une plateforme semble terminée lorsque ses extrémités sont arrondies. Le pack contient grass_left.png et grass_right.png pour les deux extrémités d’une surface herbeuse.
Maintenant, chaque tuile examine trois voisines : au-dessus, à gauche et à droite. Certaines d’entre elles se trouvent hors de la carte, aux bords. Une fonction auxiliaire donne la réponse pour n’importe quelle position, à l’intérieur ou non :
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] == "#"Tout ce qui se trouve hors de la carte est considéré comme vide. Avec la fonction auxiliaire, le choix suit la règle :
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)))Une tuile avec du sol des deux côtés, ou d’aucun côté, conserve l’herbe ordinaire. Au bord gauche de la carte, dans la colonne 0, la tuile située à gauche est hors de la carte ; elle est donc considérée comme vide, et le sol à cet endroit commence par grass_left_img.
Défi
MoyenLe code de départ charge grass_left.png dans grass_left_img et grass_right.png dans grass_right_img.
- Écrivez une fonction
solid(row, col)qui renvoieFalseen dehors de la carte etLEVEL[row][col] == "#"à l’intérieur. - Pour chaque
#:dirt_imglorsque la case au-dessus est solide ; sinongrass_left_imglorsque seule la case voisine de droite est solide ; sinongrass_right_imglorsque seule la case voisine de gauche est solide ; sinongrass_img.
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()
tiles = []
for row, line in enumerate(LEVEL):
for col, char in enumerate(line):
x, y = col * TILE, row * TILE
if char == "#":
if row == 0 or LEVEL[row - 1][col] != "#":
image = grass_img
else:
image = dirt_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()
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