Menu
CoddyTech

Nourriture

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

La nourriture apparaît dans une cellule aléatoire, jamais sur le serpent. Choisis une cellule aléatoire et réessaie tant qu’elle tombe sur le corps :

def new_food(body):
    while True:
        cell = (random.randrange(COLS), random.randrange(ROWS))
        if cell not in body:
            return cell

random.randrange(COLS) est un nombre entier compris entre 0 et COLS - 1 : chaque colonne, sans jamais dépasser le bord. return met fin à la fonction, et à la boucle avec elle, dès qu’une cellule libre est trouvée.

cell not in body vérifie toute la liste en une seule fois.

challenge icon

Défi

Facile

Place la nourriture sur la grille.

  1. Ajoute import random en haut, puis new_food(body) comme ci-dessus, sous draw_cell.
  2. Après direction, définis food = new_food(body).
  3. Après le remplissage, dessine la nourriture en rouge (235, 80, 80).

Appuie sur « Jouer » : une cellule rouge apparaît quelque part en dehors du serpent. 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))


body = [(5, 9), (4, 9), (3, 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

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

    screen.fill((30, 30, 46))
    for cell in body[1:]:
        draw_cell(cell, (120, 220, 120))
    draw_cell(body[0], (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