Menu
CoddyTech

Mange et grandis

Leçon 25 sur 40 du cours Créez des jeux avec Pygame de Coddy.

Lorsque la nouvelle tête atteint la nourriture, le serpent la mange. La croissance consiste à reprendre le déplacement que tu as déjà, en supprimant une ligne : lors d'un déplacement où le serpent mange, ne retire pas la queue, qui reste donc en place.

body.insert(0, (x, y))
if (x, y) == food:
    score += 1
    food = new_food(body)
else:
    body.pop()

Les tuples sont comparés élément par élément, donc (x, y) == food est vrai lorsque la colonne et la ligne correspondent.

Affiche le score comme dans le jeu précédent : une police créée avant la boucle, et f"Score: {score}" affiché à chaque image en (8, 6).

challenge icon

Défi

Moyen
  1. Avant la boucle, créez font = pygame.font.Font(None, 32) et score = 0.
  2. Après avoir inséré la nouvelle tête : si elle se trouve sur la nourriture, ajoutez 1 au score et placez une nouvelle nourriture ; sinon, retirez la queue.
  3. Affichez f"Score: {score}" dans (240, 240, 240) et affichez-le avec blit à (8, 6).

Essayez vous-même

import random
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))


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


body = [(5, 9), (4, 9), (3, 9)]
direction = (1, 0)
food = new_food(body)

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))
    draw_cell(food, (235, 80, 80))
    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()
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

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

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