Создание Pong на Python: пошаговое руководство с использованием Pygame

Сегодня разбираем материал blog.pythonlibrary.org о теме «Создаём Pong на Python и pygame с помощью ИИ». Практический разбор с шагами и примерами, который можно быстро применить в своей работе.


Pong — это классическая игра, где игроки управляют ракетками, расположенными по обе стороны экрана, и должны отбивать мяч. Цель состоит в том, чтобы не позволить мячу пройти мимо своей ракетки — в противном случае соперник получает очко.

Создаём Pong на Python и pygame с помощью ИИ: ключевой визуальный блок

Игра была разработана Atari и первоначально выполнена в формате игровых автоматов.

В этом руководстве мы создадим игру на Python, используя библиотеку pygame.

Создание игры

Создание Pong-игры на Python и использовании библиотеки pygame начнётся с создания пользовательского интерфейса игры, который позволит игрокам начать новую партию и вести учёт очков.

Разработка классической версии Pong на Python с помощью библиотеки pygame будет включать в себя две ракетки, мяч для игры, систему подсчёта очков и возможность начинать заново.

Claude создал полноценную игру Pong на Python с использованием pygame. Вот ключевые особенности реализации.

Игровые возможности:

  • Классический геймплей Pong с двумя ракетками и отскакивающим мячом
  • Подсчёт очков для обоих игроков
  • Система меню с возможностью начать игру
  • Возможность перезапустить игру и вернуться в меню

Управление:

  • Left Player (левый игрок): W (вверх) / S (вниз)
  • Right Player (правый игрок): клавиши со стрелками (вверх/вниз)
  • SPACE: начать новую игру из меню
  • R: перезапустить текущую игру
  • ESC: вернуться в главное меню

Игровая механика:

  • Мяч отскакивает от верхней/нижней стен и ракеток
  • Скорость мяча немного варьируется в зависимости от того, куда он попадает по ракетке
  • Очки начисляются, когда мяч уходит за любую из сторон
  • Мяч сбрасывается в центр после каждого очка

Запуск игры:

  • Убедитесь, что у вас установлен pygame: pip install pygame
  • Сохраните код в файл с расширением .py (например, pong.py)
  • Запустите его командой: python pong.py

Игра включает чистую систему меню, плавный геймплей на 60 FPS и отзывчивое управление. Физика мяча включает элемент случайности для поддержания интереса к игре, а столкновения с ракеткой добавляют стратегический элемент: игроки могут влиять на траекторию мяча в зависимости от того, какой частью ракетки они его отбивают.

По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы.

Как работает код: разбор по компонентам

Разберём, как устроен код игры Pong — каждый основной компонент и то, как они взаимодействуют друг с другом.

Код организован с использованием объектно-ориентированного программирования (object-oriented programming) и содержит три основных класса:

  • Paddle — представляет ракетки игроков
  • Ball — управляет отскакивающим мячом
  • PongGame — управляет общей логикой и ходом игры

Инициализация и константы

Игра начинается с инициализации pygame и определения констант для размера экрана, размеров объектов и скоростей движения. Использование констант делает код более удобным для изменения и сопровождения — если захотите ускорить мяч или увеличить ракетку, достаточно поменять одно число в начале файла.

Класс Paddle и класс Ball

Каждая ракетка представлена объектом pygame.Rect, который обеспечивает встроенное обнаружение столкновений (collision detection) и позиционирование. Ракетка имеет методы move_up() и move_down() для управления движением с проверкой границ, а также draw() для отрисовки ракетки в виде белого прямоугольника. Проверка границ гарантирует, что ракетки не выйдут за пределы экрана.

Мяч хранит свою позицию и скорость. Метод reset_ball() помещает мяч в центр и задаёт ему случайное направление, а move() обновляет позицию и обрабатывает отскок от стен. Обнаружение столкновения со стеной инвертирует скорость по оси Y: self.speed_y = -self.speed_y.

Обнаружение столкновений и подсчёт очков

Наиболее сложная часть кода обрабатывает столкновения мяча с ракетками:

Здесь используется встроенный метод colliderect() из pygame для обнаружения столкновений. Код проверяет направление мяча, чтобы предотвратить многократные отскоки, и добавляет вращение в зависимости от того, в какое место ракетки попал мяч. Это именно тот момент, который делает физику игры живой, а не механической.

Подсчёт очков выполняется каждый кадр путём проверки того, вышел ли мяч за края экрана:

Обработка ввода и система отрисовки

Игра проверяет, какие клавиши нажаты в каждом кадре, обеспечивая плавное непрерывное движение. Различные клавиши обрабатываются в зависимости от состояния игры — это позволяет корректно разделить управление в меню и во время самого матча.

Система отрисовки использует разные функции для разных состояний:

  • draw_menu() — отображает заголовок и инструкции
  • draw_game() — отрисовывает ракетки, мяч, счёт и игровые элементы

Центральная пунктирная линия рисуется с помощью цикла, который чередует видимые и невидимые отрезки через каждые 40 пикселей.

Игровой цикл и управление состояниями

Класс PongGame управляет всем через игровой цикл (game loop):

  1. Инициализация — создание ракеток, мяча, настройка pygame
  2. Основной цикл:
  • Обработка событий ввода
  • Обновление игровой логики (если идёт игра)
  • Отрисовка текущего состояния
  • Поддержание 60 FPS с помощью clock.tick(60)
  1. Управление состояниями — переключение между меню и игровым процессом на основе ввода пользователя

Игра использует состояния ("menu", "playing") для управления тем, что отображается и какой ввод принимается. Это стандартный паттерн в разработке игр, и я рекомендую запомнить его: он пригодится в любом более сложном проекте.

Ключевые концепции программирования, задействованные в коде:

  • Объектно-ориентированный дизайн — отдельные классы для различных игровых элементов
  • Событийно-ориентированное программирование — реагирование на события клавиатуры и выхода
  • Паттерн игрового цикла — непрерывный цикл обновления и отрисовки
  • Управление состояниями — различное поведение в зависимости от текущего состояния игры
  • Обнаружение столкновений — использование методов прямоугольного столкновения из pygame
  • Векторная математика — движение мяча с компонентами скорости по осям X и Y

На нашем опыте именно эти шесть концепций составляют основу большинства 2D-игр — освоив их здесь, вы перенесёте их в любой следующий проект без существенных изменений.

Запуск Pong

Теперь, когда у вас есть код и вы понимаете, как он устроен, можно его запустить. Сделать это можно в своей Python IDE или из командной строки:

Когда вы впервые запустите игру, вы увидите экран приветствия с инструкциями по управлению. Если нажать клавишу SPACE, откроется сама игра с двумя ракетками и мячом в центре поля.

Позовите друга или играйте сами с собой. Игра работает довольно хорошо, хотя одиночная игра может оказаться весьма непростой задачей.

Подведение итогов

Pong — весёлая маленькая игра. Как и пинг-понг или настольный теннис, она создана для игры с кем-то ещё. Технически можно также создать компьютерного противника, но классический Pong — это всегда дуэль двух игроков.

Сыграйте в игру с другом или членом семьи. Мой совет — изучите код сразу после первого запуска, пока впечатления свежи: так связь между механикой и строками кода запоминается лучше всего. Когда будете готовы, начните улучшать игру — добавьте звуки, анимацию победы или режим с ускорением мяча. Всё это реализуемо на той же основе, которую мы разобрали выше.

Ответы на эти вопросы могут быть для вас полезными

Нужно ли знать pygame заранее, чтобы повторить этот проект?

Нет. Claude генерирует весь код с нуля по текстовому запросу. Достаточно установить pygame командой pip install pygame и запустить готовый файл. Понимание библиотеки приходит в процессе изучения уже написанного кода.

Почему в коде три отдельных класса, а не один большой скрипт?

Разделение на классы Paddle, Ball и PongGame — это применение объектно-ориентированного подхода. Каждый класс отвечает за свою область: так проще находить ошибки, вносить изменения и добавлять новые функции, не ломая остальной код.

Как мяч меняет угол после удара ракеткой?

Код вычисляет, в какую часть ракетки попал мяч — верхнюю, центральную или нижнюю — и добавляет соответствующее смещение к скорости по оси Y. Это создаёт ощущение контроля над траекторией и делает игру стратегически интереснее.

Можно ли добавить компьютерного противника вместо второго игрока?

Да. Для этого достаточно заменить обработку клавиш правого игрока простой логикой: ракетка следует за мячом по оси Y. Сложность ИИ регулируется максимальной скоростью этого движения — чем она ниже, тем легче обыграть компьютер.

Что делать, если игра запускается, но окно сразу закрывается?

Скорее всего, возникла ошибка импорта или pygame не установлен корректно. Проверьте вывод в терминале, убедитесь, что команда pip install pygame выполнена в том же окружении Python, которое используется для запуска скрипта.

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x