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 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
Medio- Imposta
alive = Trueprima del ciclo. - Inserisci tutto il movimento sotto
if alive:. Calcolaxey; se quella casella è fuori dalla griglia, impostaalive = False, altrimenti inseriscila, mangia o rimuovila come prima. - Quando
aliveè falso, mostraGame overcentrato 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()
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