Menu
CoddyTech

Manger et grandir

Leçon 25 sur 41 du cours Créer 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 retirant une ligne : lors d’un déplacement où le serpent mange, ignore le retrait, et la queue reste en place.

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

Les tuples comparent leurs éléments un par un, donc (x, y) == food est vrai lorsque la colonne et la ligne correspondent toutes les deux.

Affiche le score comme tu l’as déjà fait : une police créée avant la boucle, et f"Score: {score}" affiché à chaque image à (8, 6).

challenge icon

Défi

Moyen

Fais manger et grandir le serpent.

  1. Avant la boucle, crée 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, ajoute 1 au score et place une nouvelle nourriture ; sinon, retire la queue.
  3. Affiche f"Score: {score}" en (240, 240, 240) et blit-le à (8, 6).

Appuie sur « Jouer » et dirige le serpent vers la nourriture : il grandit et le score augmente. Puis clique sur « Vérifier ».

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()

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

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