Вместо одного флага game_over заведём переменную
state с тремя значениями: "play" (играем),
"over" (проигрыш), "win" (победа).
def new_game(): paddle_x = WIDTH // 2 - PADDLE_W // 2 bx, by = WIDTH / 2, HEIGHT / 2 dx, dy = 4.0, 4.0 return paddle_x, bx, by, dx, dy, make_bricks(), 0, 3 state = "play" # "play" | "over" | "win" # Промахнулся мимо мяча — минус жизнь if by > HEIGHT: lives -= 1 bx, by = WIDTH / 2, HEIGHT / 2 dx, dy = 4.0, 4.0 if lives <= 0: state = "over" # Кирпичей не осталось — победа! if not bricks: state = "win"
state, а не game_over?В прошлых играх хватало «да/нет». Здесь концовки две — победа и проигрыш. Удобно хранить одно слово-состояние и по нему решать, что рисовать и что делать.
if not bricks: — список пуст?Пустой список в Python считается «ложью», поэтому if not bricks
значит «если кирпичей не осталось». Все разбил — победа.
Пробел работает, только когда state != "play": зовём
new_game() и снова ставим state = "play".
| Идея | Чему научишься |
|---|---|
| Звук при отскоке/разбитии | pygame.mixer (как в «Ловком коте») |
| Ускорение мяча со временем | работа со скоростью |
| Прочные кирпичи (2 удара) | счётчик прочности у кирпича |
| Бонус: ракетка шире на 10 сек | таймеры |
| Уровни: разные стены кирпичей | несколько раскладок |
Чтобы игра ощущалась как настоящая — разверни её на весь монитор. Мы добавили
флаг pygame.SCALED и две клавиши:
screen = pygame.display.set_mode((WIDTH, HEIGHT)) fullscreen = False # ... в цикле событий ... if event.type == pygame.KEYDOWN: if event.key == pygame.K_f: # F — вкл/выкл полный экран fullscreen = not fullscreen flags = (pygame.SCALED | pygame.FULLSCREEN) if fullscreen else 0 screen = pygame.display.set_mode((WIDTH, HEIGHT), flags) elif event.key == pygame.K_ESCAPE: pygame.quit(); sys.exit() # ESC — выход
pygame.SCALED сам растягивает картинку 600×400 на весь экран —
координаты в игре остаются те же, ничего пересчитывать не надо. F —
включить/выключить полный экран, ESC — выйти.