Рубрики
Без рубрики

Создание Pongpong – разработка игры с использованием Pyglet – Часть 1

В этой серии из 3 частей мы будем делать игру, используя библиотеку программ Python Game Pyglet …. Tagged с Python, GitHub, OpenSource, GameDev.

В этой серии 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 весло – прямоугольник
  2. 1 мяч – круг
  3. 3 стены, окружающие границы для мяча и весла – прямоугольная стена
  4. Кроме того, помните, что нам нужно просмотреть окончательное окно как плоскость координат 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 Здесь ), но перед загрузкой он должен быть в состоянии покоя!

Это выглядело бы примерно так:

Ну, вот и все, у нас сейчас мяч в поле!

Что мы знаем?

  1. Мы знаем, что такое Pongpong и что такое пиглет.
  2. Мы знаем дизайн Pongpong о том, как он будет присматривать за завершением кода.
  3. Мы создали основной файл Pongpong, который запускает игру и определяет константы для стен, весла и мяча.
  4. Мы создали класс для стен.
  5. Мы создали класс для весла, с некоторыми очень интересными и очень необходимыми переменными.
  6. Наконец мы создали класс мяча, который имеет некоторый цвет и скорость, с которой он будет двигаться.

Ну, пока все хорошо!

Если бы вы следовали этому пошаговому пошаму и у вас есть некоторые сомнения, я был бы очень рад разобраться (возможно, я узнаю что-то новое 😁). Обязательно бросьте их в комментарии!

В следующей части мы увидим, как запустить окно наше игровое окно и как загрузить эти объекты в окно.

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

Хочу ++ Ваш профиль GitHub Readme? Проверьте Цитата – Ридме

До следующего раза !

Намасте 🙏

Оригинал: “https://dev.to/siddharth2016/making-pongpong-game-development-using-pyglet-part-1-4him”