Menu
CoddyTech

Mangia e cresci

Lezione 25 di 41 del corso Crea giochi con Pygame di Coddy.

Quando la nuova testa raggiunge il cibo, il serpente lo mangia. La crescita consiste nella mossa che hai già, meno una riga: durante una mossa in cui mangia, salta la rimozione e la coda resta al suo posto.

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

Le tuple confrontano gli elementi uno per uno, quindi (x, y) == food è vero quando corrispondono sia la colonna sia la riga.

Mostra il punteggio come hai fatto prima: un font creato prima del ciclo e f"Score: {score}" visualizzato a ogni fotogramma in (8, 6).

challenge icon

Sfida

Medio

Fai mangiare il serpente e fallo crescere.

  1. Prima del ciclo, crea font = pygame.font.Font(None, 32) e score = 0.
  2. Dopo aver inserito la nuova testa: se si trova sul cibo, aggiungi 1 al punteggio e posiziona nuovo cibo; altrimenti rimuovi la coda.
  3. Visualizza f"Score: {score}" in (240, 240, 240) e disegnalo in (8, 6).

Premi «Gioca» e guida il serpente verso il cibo: il serpente cresce e il punteggio aumenta. 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()


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

Tutte le lezioni di Crea giochi con Pygame

Esercitati da solo: Playground Pygame