Menu
CoddyTech

Comida

Lección 24 de 41 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

Coloca comida en la cuadrícula.

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

Pulsa «Jugar»: aparece una celda roja en algún lugar fuera de la serpiente. Después, pulsa «Comprobar».

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()

Todas las lecciones de Crea juegos con Pygame

Practica por tu cuenta: Playground de Pygame