Menu
CoddyTech

Food

Lesson 24 of 41 in Coddy's Make Games with Pygame course.

Food appears in a random cell, never on the snake. Pick a random cell and try again while it lands on the body:

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

random.randrange(COLS) is a whole number from 0 up to COLS - 1: every column, and never one past the edge. return ends the function, and the loop with it, as soon as a free cell turns up.

cell not in body checks the whole list at once.

challenge icon

Challenge

Easy

Put food on the grid.

  1. Add import random at the top, and new_food(body) as above, below draw_cell.
  2. After direction, set food = new_food(body).
  3. After the fill, draw the food in red (235, 80, 80).

Press Play: a red cell shows somewhere off the snake. Then Check.

Try it yourself

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

All lessons in Make Games with Pygame

Practice on your own: Pygame playground