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 primaNota 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.
Sfida
MedioTermina la partita quando il serpente colpisce una parete.
- Imposta
alive = Trueprima del ciclo e inserisci il movimento sottoif alive:. - Se la nuova cella
(x, y)è fuori dalla griglia, impostaalive = False; altrimenti usa insert, mangia o usa pop come prima. - Quando
aliveè false, mostraGame overal 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