🎮 Все игры 🐍 Змейка
1 2 3 4 5 6 7
Урок 6

Еда и рост

Что ты увидишь Красное яблоко. Когда змейка его съедает — растёт на 1 и в заголовке окна растут очки. Файл: step6_food.py
⬇️ Скачать код урока

🔍 Функция — это твоя собственная команда

Нам нужно ставить яблоко в случайное место. Чтобы не писать это дважды, заведём функцию — кусок кода с именем, который можно вызывать.

def spawn_food(snake):
    """Случайная клетка, в которой НЕТ змейки."""
    while True:
        pos = (random.randint(0, COLS - 1), random.randint(0, ROWS - 1))
        if pos not in snake:
            return pos

📝 Код урока

food = spawn_food(snake)   # первое яблоко
score = 0

while True:
    # ... события, новая голова ...
    snake.insert(0, new_head)

    # Съели яблоко? Растём — хвост НЕ убираем.
    if new_head == food:
        score += 1
        food = spawn_food(snake)
        pygame.display.set_caption(f"Змейка — {score}")
    else:
        snake.pop()     # не съели — убираем хвост как обычно

    # Рисуем яблоко красным
    food_rect = pygame.Rect(food[0] * CELL, food[1] * CELL, CELL, CELL)
    pygame.draw.rect(screen, RED, food_rect)
    # ... потом рисуем змейку ...

⭐ Трюк роста — он очень простой

Помнишь урок 4? Обычный шаг = вставить голову + убрать хвост (длина не меняется). А чтобы змейка выросла, мы просто не убираем хвост в тот кадр, когда съели яблоко.

обычный шаг: insert + pop длина та же
съели яблоко: только insert длина +1 🎉

То есть «съесть яблоко» = «пропустить один pop()». Вот и весь секрет роста.

f-строка для заголовка

f"Змейка — {score}" — это «форматированная строка». То, что в фигурных скобках {score}, заменяется на значение переменной. Если score = 3, получится "Змейка — 3". Мы пишем счёт прямо в заголовок окна — это проще, чем рисовать текст.

🎮 Попробуй сам 1. Сделай яблоко дороже: score += 5.
2. Добавь второе яблоко — заведи переменную food2 и нарисуй его тоже. Не забудь проверять оба!
← НазадУрок 5 — Стрелки