Menu
CoddyTech

Muri

Lezione 26 di 40 del corso Crea giochi con Pygame di Coddy.

La partita termina quando la testa uscirebbe dalla griglia. Una cella si trova sulla griglia quando la sua colonna va da 0 a COLS - 1 e la sua riga da 0 a ROWS - 1.

if alive:
    x = body[0][0] + direction[0]
    y = body[0][1] + direction[1]
    if x < 0 or x >= COLS or y < 0 or y >= ROWS:
        alive = False
    else:
        # inserisci, mangia o rimuovi, come prima

Nota x >= COLS, non x > COLS: le colonne sono numerate a partire da 0, quindi la colonna COLS è già oltre il bordo.

Verifica prima di muoverti. La testa non esce mai dalla griglia e, una volta che alive è false, il serpente resta dov'era. Mostra Game over centrato in (240, 180) mentre è false.

challenge icon

Sfida

Medio
  1. Imposta alive = True prima del ciclo.
  2. Inserisci tutto il movimento sotto if alive:. Calcola x e y; se quella casella è fuori dalla griglia, imposta alive = False, altrimenti inseriscila, mangia o rimuovila come prima.
  3. Quando alive è falso, mostra Game over centrato in (240, 180).

Provalo tu

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()
font = pygame.font.Font(None, 32)


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)
score = 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))
    if (x, y) == food:
        score += 1
        food = new_food(body)
    else:
        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))
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (8, 6))
    pygame.display.flip()
    clock.tick(10)

pygame.quit()
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Crea giochi con Pygame

Esercitati da solo: Playground Pygame