В этой серии 3 частей мы будем делать игру, используя библиотеку программирования Python Game Пиглет Анкет
Что такое пиглет?
Пиглет это кроссплатформенная оконная и мультимедийная библиотека для Python, предназначенная для разработки игр и других визуально богатых приложений. Пиглет работает под Python 3.5+. Будучи написанным в Pure Python, он также работает на других переводчиках Python, таких как PYPY, одновременно поддерживая разработку и производство в операционных системах Windows, MacOS и Linux.
Что такое Pongpong?
Pongpong, это имя, которое я думал от Pingpong, с некоторым настроением, что оно не будет включать в себя какой -либо искусственный интеллект или машинное обучение, а не каких -либо сложных структур данных, а простые классы Python, чтобы создать нашу игру.
Вообще говоря, Pongpong – это простая, но удивительная игра, с которой можно поиграть! Игра, которую каждый разработчик должен попытаться сделать, чтобы выучить несколько концепций, стоящих за разработкой игр.
Pongpong Design
Pongpong будет иметь функциональность одиночного игрока, а другие – сплошные стены. Если вы знаете традиционного пингпонга, у него есть 2 стена и 2 игрока (как человек, либо один могут быть компьютером), игроки могут либо использовать клавиши стрелки клавиатуры или движение мыши, чтобы диктовать движения весла.
Паддл не может двигаться дальше за стенами с обеих сторон, а также не может двигаться вверх и вниз, его движение ограничено слева и вправо.
Принимая ту же функциональность, что и весло из традиционного пингпонга, Pongpong будет иметь ту же функцию движений Paddle с ограничением, которое он может перемещаться только с использованием клавиш со стрелками.
Затем есть мяч, который нам нужно защитить от захода на нашу территорию или просто сказать от того, чтобы идти за веслом.
Мяч будет отражать и двигаться в противоположном направлении, как только касается стен или весла.
Скорость Болла будет случайной, но мы постараемся сохранить его в диапазоне, чтобы он не превышал движение нашего игрока, защищая свою территорию.
У Pingpong есть 2 стена и 1 еще один игрок, с которым можно играть, но Pongpong будет иметь 3 стены и однополучие функциональности (для того, чтобы сделать его простым, и ИИ свободным!).
Образец окончательного вывода Pongpong.
Здесь область, отмеченная зелеными, – это стены, синий цвет – шарик (цветной оранжевый), а весло помечено красным.
Дизайн каждого компонента будет обсуждаться позже в их соответствующем разделе, одновременно погружаясь в код.
Структура каталога будет следовать приведенной ниже шаблоне:
+---PongPong pongpong.py +---pong __init__.py ball.py load.py paddle.py rectangle.py
pongpong.py
это наш основной файл, который будет использоваться для запуска игры, все остальные файлы в папке Понг
Содержит классы для разных компонентов и имеет некоторые функции утилиты (все это просты, уверяю вас).
Таким образом, у нас есть первоначальный дизайн о том, как он будет выглядеть снаружи и какие компоненты нам нужны, чтобы подвести итог, что у нас есть:
- 1 весло – прямоугольник
- 1 мяч – круг
- 3 стены, окружающие границы для мяча и весла – прямоугольная стена
- Кроме того, помните, что нам нужно просмотреть окончательное окно как плоскость координат X-Y, где левая нижняя часть окна находится в (0, 0).
Итак, без каких -либо дополнительных слоев, давайте погрузимся в программирование Pongpong !
Главный Понгпонг
Давайте сначала создадим наш основной файл (но только ограниченные вещи, которые нам нужно для начала). Назовите это pongpong.py
, не забудьте структуру проекта ( ponpong.py
Файл находится в каталоге Pongpong Project).
# ./PongPong/pongpong.py # Variables, Considering a vertical oriented window for game WIDTH = 600 # Game Window Width HEIGHT = 600 # Game Window Height BORDER = 10 # Walls Thickness/Border Thickness RADIUS = 12 # Ball Radius PWIDTH = 120 # Paddle Width PHEIGHT = 15 # Paddle Height ballspeed = (-2, -2) # Initially ball will be falling with speed (x, y) paddleacc = (-5, 5) # Paddle Acceleration on both sides - left: negative acc, right: positive acc, for x-axis
Все переменные практически сами поясняют.
Ballspeed
Определяет, с какой скоростью он будет двигаться, отрицательные значения означают, что он движется в направлении вниз.
PaddleAcc
Определяет ускорение направления движения влево правая всякий раз, когда мы нажимаем на клавиши со стрелками влево-правое на клавиатуре. Считайте это как количество точек, которые он будет двигаться, когда мы нажимаем на клавиши со стрелками.
Больше вещей будет там в pongpong.py
Файл, но пока просто держите его как есть.
Стены
Давайте сначала создадим стены, окружающие весло и мяч, то есть наши игровые границы.
Стена, по сути, представляет собой прямоугольник, нарисованный вертикально (2 прямоугольника, 1 слева и 1 справа) и горизонтально (1 на верхней части игры).
Стены будут выглядеть примерно так, когда он будет завершен после рисунка на главном окне.
Для этого создайте Rectanglebject
класс в файле Python, назовите его rectangle.py
. Код будет выглядеть примерно так (не забудьте создать этот файл в папке Pong
, см. Выше для дерева проекта):
# ./PongPong/pong/rectangle.py import pyglet class RectangleObject(pyglet.shapes.Rectangle): def __init__(self, *args, **kwargs): super(RectangleObject, self).__init__(*args, **kwargs)
Rectanglebject
наследует Пиглет Прямоугольник
Форма класс. Несмотря на то, что мы просто инициализируем базовый класс снова в его __init__
Метод, это довольно хорошая практика для создания отдельного класса (возможно, на случай, если в будущем мы можем добавить в него больше методов), но для этого урока мы определенно не собираемся больше добавлять в него метод (помните, что я сказал, это будет просто).
Так что Pyglet.shapes. Прямоугольник
делает ? Это предопределенный класс в Пиглет
Библиотека, присутствующая в формы
Модуль, который дает нам возможность создать прямоугольник в некотором окне. У него есть свой собственный набор параметров, но для того, чтобы упустить учебник легко следовать, мы увидим их в следующей части этого учебника о том, как нарисовать прямоугольник, который просто соответствует нашим потребностям.
Итак, у нас есть класс на стенах, готовый по имени Rectanglebject
, внутри rectangle.py
Файл, внутри Понг
Папка, внутри Pongpong
Проектный каталог. Все идет нормально !
Давайте создадим наше весло сейчас!
Промежуточный весл
Весло снова является прямоугольником, с дополнительной способностью перемещаться вокруг левого направления с помощью клавиш стрелки клавиатуры.
Итак, сначала посмотрим код, назовите файл как Paddle.py
:
# ./PongPong/pong/paddle.py import pyglet from pyglet.window import key from typing import Tuple class Paddle(pyglet.shapes.Rectangle): def __init__(self, *args, **kwargs): super(Paddle, self).__init__(*args, **kwargs) self.acc_left, self.acc_right = 0.0, 0.0 self.rightx = 0 self.key_handler = key.KeyStateHandler() self.event_handlers = [self, self.key_handler]
Хм, кажется сложным? Наах, это просто! Позволь мне объяснить:
Мы импортируем 3 вещи,
пиглет
,ключ
отpyglet.window
иКортеж
отнабор
АнкетПиглет
Как вы знаете, наша игровая библиотека, которую нам нужно заставить вещи работать (или играть),Кортеж
используется для подсказки типа, чтобы другие разработчики знали, какой тип данных передается методами, больше на подсказке типа Здесь Анкетpyglet.window
Это коллекция нескольких классов, которые используются для обработки окон, либо нажимая на окно, либо выполнение работы с клавиатурой в окне и еще много таких удивительных вещей. Нам нужна функциональность клавиатуры, следовательно, импортключ
класс.Создать
Весло
Класс, который наследуетPyglet.shapes. Прямоугольник
, опять же, это будет типаПрямоугольник
имея все свои возможности.Инициализировать
Прямоугольник
Класс, мы просто инициализируем это в__init__
МетодВесло
класс.После этого мы определяем ускорение мяча, с помощью которого он будет двигаться всякий раз, когда мы выполняем действие клавиатуры. Первоначально значения
self.acc_left
иself.acc_right
будет нулевым, так как весло находится в режиме REST, не движется в любом направлении. Рассмотрим ускорение как количество точек, которые он будет двигаться в любом направлении. Например, Еслиself.acc_right
, тогда это означает, что весло переместит 2 точки в правом направлении.self.key_handler
будет содержать всю обработку состояний клавиатуры, назначеннуюключ. KeyStateHandler ()
, он вернет словарь, который содержит состояние клавиш клавиатуры.self.event_handlers
Как следует из названия, будут содержать элементы в списке, которые нуждаются в действиях событий, то есть в тех элементах, с которыми будут иметь некоторые события, с которыми нужно иметь дело, здесь, в нашем случае, должно быть перемещено, поэтому событие, описанное с использованиемя
(Сам классв
self.event_handlers
И это событие движения произойдет, когда произойдет событие щелчка клавиатуры, следовательно, событие, описанное с использованиемself.key_handler
Анкет Оба эти события произойдут в игровом окне (которое мы создадим позже), следовательно, необходимо протолкнуть в окно игры позже, запустив приложение.
Так что -нибудь осталось? Да self.rightx
, что это за хрень ?
- В
Пиглет
Всякий раз, когда объект нарисован на окне, как прямоугольник, точка происхождения будет левой, то есть начальнаяself.x
(Координация по оси X) будет нулевым или что-то в этом роде во время инициализации, но помните, что она будет представлять собой левую. Таким образом, нам также нужен правый X-координат (чтобы избежать столкновения со стенами с правой стороны!), Не нужно беспокоиться о Y-координате, так как весло может перемещаться только влево-правое (представлено на оси x в нашем случае ) и не верхний день (представлен как ось Y в нашем случае).
Весло будет выглядеть примерно в финальном окне:
Подробнее о весле в следующей части!
Давайте создадим мяч Pongpong.
Мяч
Мяч будет типом круга, с некоторой скоростью для перемещения и цветом нашего выбора.
Давайте погрузимся в код тогда:
# ./PongPong/pong/ball.py import pyglet import random from typing import Tuple class BallObject(pyglet.shapes.Circle): def __init__(self, *args, **kwargs): super(BallObject, self).__init__(*args, **kwargs) self.color = (255, 180, 0) self.velocity_x, self.velocity_y = 0.0, 0.0
Не собираюсь объяснять, что Pyglet.shapes. Круг
Do (это то же самое, что rectangle
класс, обсуждаемый ранее при создании стен )
Мы импортируем 3 вещи,
пиглет
,ключ
отpyglet.window
иКортеж
отнабор
Анкетпиглет
Вы знаете, это наша игровая библиотека, которую нам нужно, чтобы заставить вещи работать (или играть),Кортеж
используется для подсказки типа, чтобы другие разработчики знали, какой тип данных передается методами, больше на подсказке типа Здесь АнкетСоздать
Ballobject
Класс, который наследуетPyglet.shapes. Круг
, опять же, это будет типаКруг
имея все свои возможности.Инициализировать
Круг
Класс, мы просто инициализируем это в__init__
МетодBallobject
класс.Мы используем
Цвет
Атрибут, который был унаследован отPyglet.shapes. Круг
Чтобы установить свой цвет на RGB (255, 180, 0).Наконец мы определяем
velocity_x
иvelocity_y
Чтобы определить скорость мяча (на координатной плоскости, поэтому нам нужна скорость в направлении x и y). Во время инициализации мяча он был бы в состоянии покоя, но в главном окне, когда мы загружаем все объекты, в течение этого времени мы изменим его скорость на какое -то значение (определено в файлеpongpong.py
Здесь ), но перед загрузкой он должен быть в состоянии покоя!
Это выглядело бы примерно так:
Ну, вот и все, у нас сейчас мяч в поле!
Что мы знаем?
- Мы знаем, что такое Pongpong и что такое пиглет.
- Мы знаем дизайн Pongpong о том, как он будет присматривать за завершением кода.
- Мы создали основной файл Pongpong, который запускает игру и определяет константы для стен, весла и мяча.
- Мы создали класс для стен.
- Мы создали класс для весла, с некоторыми очень интересными и очень необходимыми переменными.
- Наконец мы создали класс мяча, который имеет некоторый цвет и скорость, с которой он будет двигаться.
Ну, пока все хорошо!
Если бы вы следовали этому пошаговому пошаму и у вас есть некоторые сомнения, я был бы очень рад разобраться (возможно, я узнаю что-то новое 😁). Обязательно бросьте их в комментарии!
В следующей части мы увидим, как запустить окно наше игровое окно и как загрузить эти объекты в окно.
Только начинаете путешествие с открытым исходным кодом? Не забудьте проверить Привет, открыть Источник
Хочу ++
Ваш профиль GitHub Readme? Проверьте Цитата – Ридме
До следующего раза !
Намасте 🙏
Оригинал: “https://dev.to/siddharth2016/making-pongpong-game-development-using-pyglet-part-1-4him”