Menu
CoddyTech

Comida

Parte de la sección Proyectos del Journey de Pygame de Coddy. Lección 6 de 31.

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: cada columna, y nunca una más allá del borde. return termina la función, y también el bucle, en cuanto aparece una celda libre.

cell not in body comprueba la lista entera de una sola 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 Proyectos

Practica por tu cuenta: Playground de Pygame