Eat and Grow
Lesson 25 of 40 in Coddy's Make Games with Pygame course.
When the new head lands on the food, the snake eats it. Growing is the move you already have, minus one line: on a step that eats, skip the pop, and the tail stays.
body.insert(0, (x, y))
if (x, y) == food:
score += 1
food = new_food(body)
else:
body.pop()Tuples compare item by item, so (x, y) == food is true when both the column and the row match.
Show the score as in the last game: a font made before the loop, and f"Score: {score}" rendered each frame at (8, 6).
Challenge
Medium- Before the loop make
font = pygame.font.Font(None, 32)andscore = 0. - After inserting the new head: if it is on the food, add 1 to the score and place new food; otherwise pop the tail.
- Render
f"Score: {score}"in(240, 240, 240)and blit it at(8, 6).
Try it yourself
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()
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)
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))
draw_cell(food, (235, 80, 80))
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()
This lesson includes a short quiz. Start the lesson to answer it and track your progress.
All lessons in Make Games with Pygame
3Grids and Lists
A Grid of CellsStep by StepPractice on your own: Pygame playground