Как установить pygame и создать шаблон для разработки игр в Python 3

Вступление

Библиотека pygame - это модуль с открытым исходным кодом для языка программирования Python, специально предназначенный для того, чтобы помочь вам создавать игры и другие мультимедийные приложения. Созданная на основе чрезвычайно переносимой библиотеки для разработки SDL (Simple DirectMedia Layer), pygame может работать на многих платформах и операционных системах.

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

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

Предпосылки

Чтобы иметь возможность использовать это руководство, убедитесь, что у вас уже установлен Python 3 и среда программирования на вашем https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a- локальная среда программирования для python-3 [локальный компьютер] или https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-programming- среда-на-на-убунту-16-04-сервер [сервер].

Вы также должны быть знакомы со следующими концепциями программирования Python:

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

Установка Pygame

Давайте начнем с активации нашей среды программирования Python 3:

. /bin/activate

С этим активированным, вы можете установить pygame с pip:

pip install pygame

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

OutputCollecting pygame
 Using cached pygame-1.9.3-cp35-cp35m-manylinux1_x86_64.whl
Installing collected packages: pygame
Successfully installed pygame-1.9.3

Если вы установили pygame в систему с доступным видео и аудио, вы можете проверить свою установку, выполнив следующую команду, которая запустит пробную игру, демонстрирующую, что pygame может делать с графикой и звуком:

python -m pygame.examples.aliens

Если вы не хотите открывать образец, или если у вас нет AV как часть вашей настройки, вы также можете войти в интерактивную консоль Python, чтобы убедиться, что вы можете импортировать модуль pygame. Сначала введите команду + python для запуска консоли:

python

Затем в консоли вы можете импортировать модуль:

import pygame

Если вы не получите ошибок при нажатии клавиши + ENTER + после команды, вы будете знать, что pygame была успешно установлена. Вы можете выйти из интерактивной консоли Python с помощью команды + quit () +.

Если у вас возникли проблемы с установкой в ​​командной строке, вы можете ознакомиться с GettingStarted wiki pygame.

На более поздних этапах мы будем предполагать использование монитора для отображения графического интерфейса пользователя как часть этого руководства для проверки нашего кода.

Импорт пигмеев

Чтобы познакомиться с pygame, давайте создадим файл с именем + our_game.py +, который мы можем создать с помощью текстового редактора nano, например:

nano our_game.py

При запуске проекта в Pygame вы начнете с оператора + import +, используемого для importing модулей. , который вы можете добавить вверху вашего файла:

our_game.py

import pygame

Мы также можем при желании добавить еще один оператор импорта ниже первой строки, чтобы добавить некоторые константы и функции pygame в https://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python- 3 # using-from - импортировать [глобальное пространство имен] вашего файла:

our_game.py

import pygame

С pygame, импортированным в наш программный файл, мы готовы использовать его для создания игрового шаблона.

Инициализация Pygame

Здесь мы инициализируем функциональные возможности pygame с помощью функции + init () +, что сокращенно означает «initialize».

our_game.py

import pygame
from pygame.locals import *

Функция + init () + автоматически запустит все модули pygame, которые вам нужно инициализировать.

Вы также можете инициализировать каждый из модулей Pygame по отдельности, например:

pygame.font.init()

Функция + init () + вернет вам tuple, если хотите. Этот кортеж покажет успешную и неудачную инициализацию. Мы можем сделать это как для общего вызова + init () +, так и для инициализации определенных модулей (что покажет нам, доступны ли эти модули):

i = pygame.init()
print(i)

f = pygame.font.init()
print(f)

Если мы запустим код выше, мы получим вывод, подобный следующему:

Output(6, 0)
None

В этом случае + i + variable вернул кортеж + (6, 0) + `, который показывает, что было 6 успешных инициализаций Pygame и 0 сбоев. Переменная `+ f + вернула + None +, указывая, что модуль недоступен в этой конкретной среде.

Настройка поверхности дисплея

Отсюда нам нужно настроить поверхность отображения игры. Мы будем использовать + pygame.display.set_mode () +, чтобы инициализировать окно или экран для отображения и передать его в переменную. В функцию мы передадим аргумент разрешения экрана, представляющий собой пару чисел, представляющих ширину и высоту в кортеже. Давайте добавим эту функцию в нашу программу:

our_game.py

import pygame
from pygame.locals import *


pygame.init()

Мы передали кортеж + (800, 600) + в качестве аргумента функции + set_mode () +, обозначая разрешение ширины (800 пикселей) и высоты (600 пикселей). Обратите внимание, что кортеж содержится в круглых скобках функции, поэтому в функции выше есть двойные скобки.

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

Мы будем использовать переменную + display_width для ширины отображения вашей игры и` + display height` для высоты, и передадим эти переменные в функцию + set_mode () +:

our_game.py

import pygame
from pygame.locals import *


pygame.init()




game_display = pygame.display.set_mode((, ))

На этом этапе игровая поверхность настраивается с разрешением по ширине и высоте.

Обновление дисплея

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

Анимации - это, как правило, изменения между кадрами с течением времени. Когда вы думаете об анимации, вы можете подумать о flip book, так как они состоят из серии изображений, которые постепенно меняются от одной страницы к следующей. Эти страницы дают имитацию движения, когда они быстро перелистываются, поскольку содержимое страницы кажется движущимся. В компьютерных играх используются рамки, а не страницы.

Из-за концепции перелистывания страниц или фреймов одна из функций, которые можно использовать для обновления отображения игровой поверхности, называется + flip () + и может быть вызвана в нашем файле выше, например:

pygame.display.flip()

Функция + flip () + обновляет всю поверхность экрана на экране.

Чаще всего вместо + flip () + используется функция + update () +, поскольку она обновляет только части экрана, а не всю область, экономя память.

Давайте добавим функцию + update () + в конец файла + our_game.py +:

our_game.py

import pygame
from pygame.locals import *


pygame.init()

display_width = 800
display_height = 600

game_display = pygame.display.set_mode((display_width, display_height))

На этом этапе вы можете запустить программу без каких-либо ошибок, но поверхность дисплея просто откроется и быстро закроется.

Создание игрового цикла

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

Мы будем создавать https://www.digitalocean.com/community/tutorials/how-to-construct- while-loops-in-python-3 [+ while + loop], который будет запускать игру. Цикл будет вызывать Boolean значение + True +, означая, что цикл будет зацикливаться вечно, если только он не будет нарушена.

В этом основном игровом цикле нашей программы мы создадим https://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-in-python-3 [+ for + loop] для перебирать пользовательские события в очереди событий, которые будут вызываться функцией + pygame.event.get () +.

На данный момент у нас ничего нет в цикле + for +, но мы можем добавить оператор + print () +, чтобы показать, что код ведет себя так, как мы ожидаем. Мы передадим события внутри итерации в оператор как + print (event) +.

Давайте добавим эти два цикла и оператор + print () + в наш программный файл:

our_game.py

import pygame
from pygame.locals import *


pygame.init()

display_width = 800
display_height = 600

game_display = pygame.display.set_mode((display_width, display_height))

pygame.display.update()

Чтобы убедиться, что наш код работает, давайте запустим программу:

python our_game.py

Когда мы запустим файл, появится окно 800x600. Чтобы проверить события, вы можете навести указатель мыши на окно, щелкнуть в нем и нажать клавиши на клавиатуре. Эти события будут распечатаны в вашем окне консоли.

Вывод, который вы получите, будет выглядеть примерно так:

Output<Event(4-MouseMotion {'rel': (616, 355), 'buttons': (0, 0, 0), 'pos': (616, 355)})>
<Event(5-MouseButtonDown {'button': 1, 'pos': (616, 355)})>
<Event(6-MouseButtonUp {'button': 1, 'pos': (616, 355)})>
<Event(2-KeyDown {'scancode': 3, 'key': 102, 'unicode': 'f', 'mod': 0})>
<Event(3-KeyUp {'scancode': 3, 'key': 102, 'mod': 0})>
...

Этот вывод показывает пользовательские события, которые происходят. Эти события будут тем, что будет контролировать игру, поскольку они генерируются пользователем. Всякий раз, когда вы запускаете функцию + pygame.event.get () +, ваш код будет принимать эти события.

Остановите запуск программы, нажав + CTRL + + + C + в окне терминала.

На этом этапе вы можете удалить или comment out оператор + print () +, как мы не нужно будет иметь все эти выходные данные терминала.

Отсюда мы можем работать над завершением нашего шаблона, изучая, как выйти из игры.

Бросить

Чтобы выйти из программы Pygame, мы можем сначала деинициализировать соответствующие модули, а затем выйти из Python как обычно.

Функция + pygame.quit () + неинициализирует все модули pygame, а функция Python + quit () + выйдет из программы.

Поскольку пользователи контролируют игровые функции и события, мы также должны знать, что + pygame.QUIT + отправляется в очередь событий, когда пользователь запросил завершение работы программы, нажав «X» в верхней части окна игры. угол.

Давайте начнем контролировать поток программы с помощью conditional + if + Statement внутри оператора цикл обработки событий + for +:

our_game.py

import pygame
from pygame.locals import *


pygame.init()

display_width = 800
display_height = 600

game_display = pygame.display.set_mode((display_width, display_height))

pygame.display.update()

while True:
   for event in pygame.event.get():

В приведенном выше коде мы говорим, что если пользователь запросил завершение программы, программа должна деинициализировать модули pygame с помощью + pygame.quit () + и выйти из программы с помощью + quit () +.

Поскольку мы импортировали + pygame.locals +, мы можем вызывать + event.type + и + QUIT + как есть (а не с + pygame. + Перед ними).

Хотя пользователи могут знать, что нужно щелкнуть «X» в верхнем углу игрового окна, мы можем захотеть, чтобы некоторые другие пользовательские события инициировали запрос на выход из программы. Мы можем сделать это с типом события + KEYDOWN + и одним или несколькими ключами.

Событие + KEYDOWN + означает, что пользователь нажимает клавишу на клавиатуре. В наших целях допустим, что клавиша + Q + (как в «quit») или клавиша «+ ESC » могут выйти из программы. Давайте добавим код, который означает это в нашем цикле ` for +`:

our_game.py

import pygame
from pygame.locals import *


pygame.init()

display_width = 800
display_height = 600

game_display = pygame.display.set_mode((display_width, display_height))

pygame.display.update()

while True:
   for event in pygame.event.get():
       if event.type == QUIT




           pygame.quit()
           quit()

Мы добавили Boolean логические операторы, чтобы программа могла выйти, если пользователь нажимает «X». ”В верхнем углу игрового окна, или если пользователь нажимает клавишу, которая является либо клавишей ESC, либо клавишей« + Q + »(обратите внимание, что она не чувствительна к регистру).

На этом этапе, если вы запустите программу с командой + python our_game.py +, вы сможете проверить работоспособность игры, а затем выйти из нее, либо выйдя из окна со значком «X», либо через нажатие клавиши + Q + или + ESC +.

Улучшения кода и дальнейшие действия

Хотя вышеприведенная программа является полностью функциональной, есть некоторые вещи, которые мы можем сделать, чтобы улучшить код.

Для начала, мы можем поместить код, который находится в цикле + while +, в определение f вместо:

def event_handler():
   for event in pygame.event.get():
       if event.type == QUIT or (
            event.type == KEYDOWN and (
             event.key == K_ESCAPE or
             event.key == K_q
            )):
           pygame.quit()
           quit()

Это сделает цикл + while + немного более четким и сжатым, особенно когда мы добавим больше функциональности в нашу игру.

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

pygame.display.set_caption('')

Мы можем установить строку + 'Our Game' + выше для того, что мы хотели бы назвать игрой.

Кроме того, мы можем переместить функцию + pygame.display.update () + в основной игровой цикл.

Теперь наш полный код выглядит так:

our_game.py

import pygame
from pygame.locals import *


pygame.init()

display_width = 800
display_height = 600

game_display = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('Our Game')


def event_handler():
   for event in pygame.event.get():
       if event.type == QUIT or (
            event.type == KEYDOWN and (
             event.key == K_ESCAPE or
             event.key == K_q
            )):
           pygame.quit()
           quit()

while True:
   event_handler()

   pygame.display.update()

Вы также можете рассмотреть различные способы подхода к приведенному выше коду, включая использование https://www.digitalocean.com/community/tutorials/how-to-use-break-continue-and-pass-statements-when-working-with -loops-in-python-3 # оператор break [оператор break], чтобы выйти из цикла перед выходом из игры.

Отсюда вы захотите перейти к изучению того, как отображать изображения с помощью рисования и спрайтов, анимировать изображения и управлять частотой кадров и многое другое. Вы можете продолжить знакомство с разработкой игр для Pygame, прочитав официальную pygame документацию.

Заключение

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

Чтобы заняться другими программными проектами, в которых используются модули Python, вы можете узнать «https://www.digitalocean.com/community/tutorials/how-to-create-a-twitterbot-with-python-3-and-the- tweepy-library [Как создать Twitterbot с помощью библиотеки Tweepy], или «https://www.digitalocean.com/community/tutorials/how-to-plot-data-in-python-3-using-matplotlib [ Как построить данные с помощью matplotlib]. »

Related