Menu
CoddyTech

Une liste de corps

Leçon 23 sur 41 du cours Créer des jeux avec Pygame de Coddy.

Le serpent est une liste de cellules, en commençant par la tête :

body = [(5, 9), (4, 9), (3, 9)]

Pour avancer, ajoute la nouvelle tête au début et supprime la dernière cellule. Chaque cellule intermédiaire reste à sa place, de sorte que le corps suit la tête :

x = body[0][0] + direction[0]
y = body[0][1] + direction[1]
body.insert(0, (x, y))
body.pop()

body.insert(0, item) place l’élément à l’index 0. body.pop() supprime le dernier élément. body[0] est la tête et body[1:] est le reste.

Dessine le reste en vert plus foncé, puis la tête en dernier, pour qu’elle soit au-dessus.

challenge icon

Défi

Facile

Donne au serpent un corps qui suit sa tête.

  1. Remplace head = (5, 9) par body = [(5, 9), (4, 9), (3, 9)].
  2. À chaque image, calcule la nouvelle tête (x, y) à partir de body[0], insère-la au début et supprime la queue.
  3. Dessine chaque cellule de body[1:] en (120, 220, 120), puis body[0] en (180, 255, 160).

Appuie sur « Jouer » : un serpent de trois cellules glisse à l’écran. Puis appuie sur « Vérifier ».

Essayez vous-même

import pygame

CELL = 20
COLS, ROWS = 24, 18
TURNS = {
    pygame.K_LEFT: (-1, 0),
    pygame.K_RIGHT: (1, 0),
    pygame.K_UP: (0, -1),
    pygame.K_DOWN: (0, 1),
}

pygame.init()
screen = pygame.display.set_mode((COLS * CELL, ROWS * CELL))
pygame.display.set_caption("Snake")
clock = pygame.time.Clock()


def draw_cell(cell, color):
    col, row = cell
    pygame.draw.rect(screen, color, (col * CELL + 1, row * CELL + 1, CELL - 2, CELL - 2))


head = (5, 9)
direction = (1, 0)

running = True
while running:
    moving = direction
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key in TURNS:
            turn = TURNS[event.key]
            if turn != (-moving[0], -moving[1]):
                direction = turn

    head = (head[0] + direction[0], head[1] + direction[1])

    screen.fill((30, 30, 46))
    draw_cell(head, (180, 255, 160))
    pygame.display.flip()
    clock.tick(10)

pygame.quit()

Toutes les leçons de Créer des jeux avec Pygame

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