def new_game(): cat_x = WIDTH // 2 - cat_w // 2 apple_x = random.randint(0, WIDTH - apple_w) return cat_x, apple_x, -apple_h, 0, 3, 4.0 cat_x, apple_x, apple_y, score, lives, speed = new_game() game_over = False # ... в цикле событий ... if event.type == pygame.KEYDOWN and game_over and event.key == pygame.K_SPACE: cat_x, apple_x, apple_y, score, lives, speed = new_game() game_over = False # ... в обновлении мира ... if cat_rect.colliderect(apple_rect): score += 1 speed += 0.3 # с каждым яблоком чуть быстрее apple_x = random.randint(0, WIDTH - apple_w) apple_y = -apple_h elif apple_y > HEIGHT: lives -= 1 # промах — минус жизнь apple_x = random.randint(0, WIDTH - apple_w) apple_y = -apple_h if lives <= 0: game_over = True
game_overКак в Змейке: переменная True/False. Пока False —
игра идёт. Стало True — кот и яблоко замирают, показываем надпись,
ждём пробел.
new_game() — «начать сначала»Она возвращает все стартовые значения сразу: позицию кота, яблоко, 0 очков, 3 жизни, скорость 4. И в начале игры, и при рестарте мы зовём одну и ту же функцию — не нужно дублировать код.
speed += 0.3 при каждой пойманной яблоке — игра становится всё
азартнее. Поэтому скорость дробная (4.0), а не целая.
0.6) — или убери совсем.