Menu
CoddyTech

Cibo

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

Il cibo appare in una cella casuale, mai sul serpente. Scegli una cella casuale e riprova finché non finisce sul corpo:

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

random.randrange(COLS) è un numero intero da 0 fino a COLS - 1: ogni colonna, senza mai andare oltre il bordo. return termina la funzione e con essa il ciclo, non appena viene trovata una cella libera.

cell not in body controlla l'intero elenco in una volta sola.

challenge icon

Sfida

Facile

Metti il cibo sulla griglia.

  1. Aggiungi import random in cima e new_food(body) come sopra, sotto draw_cell.
  2. Dopo direction, imposta food = new_food(body).
  3. Dopo il riempimento, disegna il cibo in rosso (235, 80, 80).

Premi «Gioca»: una cella rossa appare da qualche parte lontano dal serpente. Poi premi «Verifica».

Provalo tu

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


body = [(5, 9), (4, 9), (3, 9)]
direction = (1, 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))
    body.pop()

    screen.fill((30, 30, 46))
    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