Menu
CoddyTech

Muri

Lezione 26 di 41 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

Termina la partita quando il serpente colpisce una parete.

  1. Imposta alive = True prima del ciclo e inserisci il movimento sotto if alive:.
  2. Se la nuova cella (x, y) è fuori dalla griglia, imposta alive = False; altrimenti usa insert, mangia o usa pop come prima.
  3. Quando alive è false, mostra Game over al centro di (240, 180).

Premi «Gioca» e colpisci una parete: appare Game over e il serpente si ferma. Poi premi «Verifica».

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

Tutte le lezioni di Crea giochi con Pygame

Esercitati da solo: Playground Pygame