Menu
CoddyTech

Comida

Lección 24 de 40 del curso Crea juegos con Pygame de Coddy.

La comida aparece en una celda aleatoria, nunca sobre la serpiente. Elige una celda aleatoria y vuelve a intentarlo mientras caiga sobre el cuerpo:

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

random.randrange(COLS) es un número entero desde 0 hasta COLS - 1: todas las columnas, y nunca una más allá del borde. return termina la función y el bucle con ella en cuanto aparece una celda libre.

cell not in body comprueba toda la lista de una vez.

challenge icon

Desafío

Fácil
  1. Añade import random al principio.
  2. Escribe new_food(body) como arriba, debajo de draw_cell.
  3. Después de direction, establece food = new_food(body).
  4. Después del relleno, dibuja la comida en rojo (235, 80, 80).

Pruébalo tú mismo

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()
quiz iconPonte a prueba

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