Paredes
Lección 26 de 40 del curso Crea juegos con Pygame de Coddy.
El juego termina cuando la cabeza saldría de la cuadrícula. Una celda está en la cuadrícula cuando su columna va de 0 a COLS - 1 y su fila va de 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:
# inserta, come o elimina, como antesFíjate en x >= COLS, no en x > COLS: las columnas se numeran desde 0, así que la columna COLS ya está más allá del borde.
Comprueba antes de moverte. La cabeza nunca sale de la cuadrícula y, una vez que alive es false, la serpiente se queda donde estaba. Muestra Game over centrado en (240, 180) mientras sea false.
Desafío
Intermedio- Establece
alive = Trueantes del bucle. - Pon todo el movimiento dentro de
if alive:. Calculaxey; si esa celda está fuera de la cuadrícula, establecealive = False; de lo contrario, inserta, come o elimina el último elemento como antes. - Cuando
alivesea falso, muestraGame overcentrado en(240, 180).
Pruébalo tú mismo
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()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Crea juegos con Pygame
Practica por tu cuenta: Playground de Pygame