Paredes
Lección 26 de 41 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
IntermedioTermina el juego cuando la serpiente choque contra una pared.
- Establece
alive = Trueantes del bucle y coloca el movimiento dentro deif alive:. - Si la nueva celda
(x, y)está fuera de la cuadrícula, establecealive = False; de lo contrario, inserta, come o elimina como antes. - Cuando
alivesea falso, muestraGame overcentrado en(240, 180).
Pulsa «Jugar» y choca contra una pared: aparece Game over y la serpiente se detiene. Después, pulsa «Comprobar».
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()
Todas las lecciones de Crea juegos con Pygame
Practica por tu cuenta: Playground de Pygame