Как установить pygame linux

Обновлено: 07.07.2024

Я читаю книгу введение в информатику с использованием Python и Pygame Paul Craven (Примечание: легально доступен бесплатно онлайн). В книге он использует комбинацию Python 3.1.3 и Pygame 1.9.1 . В моей машине Linux Ubuntu у меня есть Python 3.1.2, но даже после того, как я sudo apt-get установил python-pygame (версия 1.9.1), Python 3.1.2 не может импортировать pygame.

Python 2.6.5 импортирует его без суеты, однако,

вы известно о каких-либо проблемах для Python 3.1.2 Linux/Ubuntu (профессор Крейвен использовал Windows в своей книге)? Почему Pygame 1.9.1 работал для Python 3.1.3, но не для 3.1.2?

Спасибо за любые указатели. (--,)

Это потому, что установка python-pygame пакет устанавливает его для версии Python по умолчанию в вашей системе, 2.6.5 в этом случае. Вы должны загрузить пакет pygame и использовать setup.py чтобы установить его в 3.1.2.

PyGame на Python 3 остается экспериментальным, но эти шаги работали для меня на Ubuntu 11.10:

(вы можете удалить -u 01b2cb16dc17 чтобы попробовать последнюю версию; 01b2cb16dc17 работал для меня.)

Я ненавижу снова открывать старый пост, но мне было труднее всего установить pygame с версией python, которая не была сборкой Ubuntu по умолчанию. Поэтому я создал этот учебник/ how to:

Я надеюсь, что это поможет следующей несчастной душе попробовать это.

я следовал методу @Søren, но без номера-U.

единственным осложнением было несколько ошибок компиляции в последней строке, все из-за синтаксиса и различий unicode между Python 2 и Python 3, но с небольшой проверкой веб-документации это было делом нескольких минут с текстовым редактором, изменяющим следующие файлы (все пути относительно каталога pygame, созданного во время загрузки):

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

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

пакет python-pygame компилируется только для python2.6 и python2.7 где я. Вам придется установить его снова, возможно, из ветви python3 источника.

Библиотека pygame – это модуль Python с открытым исходным кодом для разработки игр и мультимедийных приложений. Основанный на портируемой библиотеке SDL, модуль pygame может работать на многих платформах и операционных системах.

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

Этот мануал поможет установить модуль pygame в среду разработки Python и создать шаблон для разработки игр в Python 3.

Требования

Для работы вам понадобится локальная или удаленная среда разработки Python 3.

Кроме того, нужно ознакомиться со следующими руководствами:

Установка pygame

Разверните среду программирования Python 3:

Теперь установите pygame:

pip install pygame
Collecting 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

Если вы не хотите запускать макет или в установке нет аудио/видео, можно открыть интерактивную консоль Python и попробовать импортировать модуль pygame. Чтобы запустить консоль, введите:

Теперь можно импортировать модуль:

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

Если во время импорта произошла ошибка, обратитесь к рекомендациям на сайте pygame.

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

Импортирование pygame

Создайте файл our_game.py.

Начиная работу над проектом pygame, нужно сначала импортировать модуль. Добавьте в начало файла строку:

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

import pygame
from pygame.locals import *

Модуль pygame импортирован в файл проекта. Теперь можно создать шаблон игры.

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

Затем нужно инициализировать pygame с помощью функции init().

import pygame
from pygame.locals import *
pygame.init()

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

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

Функция init() может возвращать кортежи. Кортеж будет сообщать о состоянии инициализации. Это можно сделать как в общем вызове init(), так и при инициализации определенных модулей (это позволит понять, доступны ли эти модули).

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

Запустив этот код, вы получите вывод:

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

Настройка отображения

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

import pygame
from pygame.locals import *
pygame.init()
game_display = pygame.display.set_mode((800, 600))

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

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

Ширину экрана игры можно присвоить переменной display_width, а высоту – переменной display_height. Переменные можно передать функции set_mode().

import pygame
from pygame.locals import *
pygame.init()
display_width = 800
display_height = 600
game_display = pygame.display.set_mode((display_width, display_height))

Обновление экрана

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

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

Для обновления поверхности игры можно использовать функцию flip(). Вызовите ее:

Эта функция обновляет всю поверхность отображения.

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

Добавьте 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.update()

Программа будет работать без ошибок, но экран игры просто откроется и сразу закроется.

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

Теперь можно начать работу над основным циклом игры.

Создайте цикл while, который будет запускать игру. Цикл будет вызывать логическое значение True, потому он будет работать непрерывно, пока его не остановит пользователь.

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

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

Добавьте в файл циклы и print().

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():
print(event)

Теперь убедитесь, что код работает:

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

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

Остановите программу (CTRL + C).

На данном этапе print() можно удалить или закомментировать.

Выход из игры

Чтобы выйти из программы pygame, можно сначала объявить соответствующие модули неинициализированными, а затем просто выйти из Python с помощью функции quit().

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

Добавьте в цикл for выражение if.

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()

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

Поскольку ранее мы импортировали pygame.locals, теперь можно использовать event.type и QUIT без «pygame.» в начале.

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

Событие KEYDOWN значит, что пользователь нажал клавишу на клавиатуре. К примеру, это может быть клавиша Q или ESC. Добавьте код в цикл for.

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 or (
event.type == KEYDOWN and (
event.key == K_ESCAPE or
event.key == K_q
)):
pygame.quit()
quit()

Логические операторы сообщат программе, что она должна прекратить работу, если пользователь нажимает «X» в верхнем углу игрового окна или клавиши Q или ESC.

На этом этапе можно протестировать функциональность игры и затем выйти из нее, либо с помощью значка Х, либо нажав Q или ESC.

Улучшение кода

Теперь у вас есть полностью рабочая программа, однако код еще можно усовершенствовать.

К примеру, код цикла while можно поместить в определение функции.

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 window). Для этого используйте:

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

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

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()

Этот код еще можно улучшить, например, добавить оператор break.

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

Многие разработчики приходят в разработку ПО, потому что хотят создавать игры. Не все могут стать профессиональными разработчиками игр, но любой может создавать собственные игры из интереса (а может быть, и с выгодой). В этом туториале, состоящем из пяти частей, я расскажу вам, как создавать двухмерные однопользовательские игры с помощью Python 3 и замечательного фреймворка PyGame.

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

Мы реализуем следующие функции и возможности:

  • простые стандартные GameObject и TextObject
  • простой стандартный Game object
  • простая стандартная кнопка
  • файл конфигурации
  • обработка событий клавиатуры и мыши
  • кирпичи, ракетка и мяч
  • управление движением ракетки
  • обработка коллизий мяча с объектами игры
  • фоновое изображение
  • звуковые эффекты
  • расширяемая система спецэффектов


Краткое введение в программирование игр

Главное в играх — перемещение пикселей на экране и издаваемый шум. Почти во всех видеоиграх есть эти элементы. В этой статье мы не будем рассматривать клиент-серверные и многопользовательские игры, для которых требуется много сетевого программирования.

Основной цикл

Основной цикл (main loop) игры выполняется и обновляет экран через фиксированные интервалы времени. Они называются частотой кадров и определяют плавность перемещения. Обычно игры обновляют экран 30-60 раз в секунду. Если частота будет меньше, то покажется, что объекты на экране дёргаются.

Внутри основного цикла есть три основных операции: обработка событий, обновление состояния игры и отрисовка текущего состояния на экране.

Обработка событий

События в игре состоят из всего, что происходит за пределами управления кода игры, но относится к выполнению игры. Например, если в Breakout игрок нажимает клавишу «стрелка влево», то игре нужно переместить ракетку влево. Стандартными событиями являются нажатия (и отжатия) клавиш, движение мыши, нажатия кнопок мыши (особенно в меню) и события таймера (например, действие спецэффекта может длиться 10 секунд).

Обновление состояния

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

Существует также вспомогательное состояние, позволяющее управлять игрой:

  • Отображается ли сейчас меню?
  • Закончена ли игра?
  • Победил ли игрок?

Отрисовка

Игре нужно отображать своё состояние на экране, в том числе отрисовывать геометрические фигуры, изображения и текст.

Игровая физика

В большинстве игр симулируется физическое окружение. В Breakout мяч отскакивает от объектов и имеет очень приблизительную систему физики твёрдого тела (если это можно так назвать).

В более сложных играх могут использоваться более изощрённые и реалистичные физические системы (особенно в 3D-играх). Стоит также отметить, что в некоторых играх, например, в карточных, физики почти нет, и это совершенно нормально.

ИИ (искусственный интеллект)

Во многих играх мы сражаемся с компьютерными противниками, или в них есть враги, пытающиеся нас убить. Часто они ведут себя в игровом мире так, как будто обладают разумом.

Например, враги преследуют игрока и знают о его местоположении. В Breakout нет никакого ИИ. Игрок сражается с холодными и твёрдыми кирпичами. Однако ИИ в играх часто очень прост и всего лишь следует простым (или сложным) правилам, обеспечивающим псевдоразумные результаты.

Воспроизведение звука

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

Фоновая музыка — это просто музыка, постоянно играющая на фоне. В некоторых играх она не используется, а в некоторых меняется на каждом уровне.

Жизни, очки и уровни

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

Знакомство с Pygame

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

Что такое Pygame?

Pygame — это фреймворк языка Python для программирования игр. Он создан поверх SDL и обладает всем необходимым:

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

Установка Pygame

Введите pip install pygame , чтобы установить фреймворк. Если вам нужно что-то ещё, то следуйте инструкциям из раздела Getting Started в Wiki проекта. Если у вас, как и у меня, macOS Sierra, то могут возникнуть проблемы. Мне удалось установить Pygame без сложностей, и код работает отлично, но окно игры никогда не появляется.

Это станет серьёзным препятствием при запуске игры. В конце концов мне пришлось запускать её в Windows внутри VirtualBox VM. Надеюсь, ко времени прочтения этой статьи проблема будет решена.

Архитектура игры

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

Структура папок и файлов

Pipfile и Pipfile.lock — это современный способ управления зависимостями в Python. Папка images содержит изображения, используемые игрой (в нашей версии будет только фоновое изображение), а в папке sound_effects directory лежат короткие звуковые клипы, используемые (как можно догадаться) в качестве звуковых эффектов.

Файлы ball.py, paddle.py и brick.py содержат код, относящийся к каждому из этих объектов Breakout. Подробнее я рассмотрю их в следующих частях туториала. Файл text_object.py содержит код отображения текста на экране, а в файле background.py содержится игровая логика Breakout.

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

Класс GameObject

GameObject представляет собой визуальный объект, знающий о том, как себя рендерить, сохранять свои границы и перемещаться. В Pygame есть и класс Sprite, исполняющий похожую роль, но в этом туториале я хочу показать вам, как всё работает на низком уровне, а не полагаться слишком активно на готовую магию. Вот как выглядит класс GameObject:


GameObject предназначен для того, чтобы быть базовым классом для других объектов. Он непосредственно раскрывает множество свойств его прямоугольника self.bounds, а в своём методе update() он перемещает объект в соответствии с его текущей скоростью. Он ничего не делает в своём методе draw() , который должен быть переопределён подклассами.

Класс Game

Класс Game — это ядро игры. Он выполняется в основном цикле. В нём есть множество полезных возможностей. Давайте разберём его метод за методом.

Метод __init__() инициализирует сам Pygame, систему шрифтов и звуковой микшер. Три разных вызова нужны, так как не во всякой игре на Pygame используются все компоненты, поэтому можно контролировать подсистемы, которые мы используем, и инициализировать только нужные с соответствующими параметрами. Метод создаёт фоновое изображение, основную поверхность (на которой всё отрисовывается) и игровой таймер с правильной частотой кадров.

Элемент self.objects хранит все игровые объекты, которые должны рендериться и обновляться. Различные обработчики управляют списками функций-обработчиков, которые должны выполняться при определённых событиях.


Методы update() и draw() очень просты. Они обходят все управляемые игровые объекты и вызывают соответствующие им методы. Если два объекта накладываются друг на друга на экране, то порядок списка объектов определяет, какой из них будет рендериться первым, а остальные будут частично или полностью его перекрывать.


Метод handle_events() слушает события, генерируемые Pygame, такие как события клавиш и мыши. Для каждого события он вызывает все функции-обработчики, которые должны обрабатывать события соответствующих типов.


Наконец, метод run() выполняет основной цикл. Он выполняется до тех пор, пока элемент game_over не принимает значение True. В каждой итерации он рендерит фоновое изображение и вызывает по порядку методы handle_events() , update() и draw() .

Затем он обновляет экран, то есть записывает на физический дисплей всё содержимое, которое было отрендерено на текущей итерации. И последнее, но не менее важное — он вызывает метод clock.tick() для управления тем, когда будет вызвана следующая итерация.

Заключение

В этой части мы изучили основы программирования игр и все компоненты, участвующие в создании игр. Также мы рассмотрели сам Pygame и узнали, как его установить. Наконец, мы погрузились в архитектуру игры и изучили структуру папок, классы GameObject и Game.

Во второй части мы рассмотрим класс TextObject , используемый для рендеринга текста на экране. Мы создадим основное окно, в том числе и фоновое изображение, а затем узнаем, как отрисовывать объекты (мяч и ракетку).

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

Установка Pygame

Откройте терминал командной строки и введите следующую команду, чтобы установить pygame.

Простой пример Pygame

Вот следующий пример создания простого окна pygame.

Как разработать игру на Python

Вся графика будет отображаться в окне pygame.

Давайте разберемся с основным синтаксисом вышеуказанной программы.

Давайте разберемся со следующим примером рисования фигуры на экране.

Рисование фигуры на экране

В приведенном выше примере мы нарисовали различные формы, такие как треугольник, прямая линия, прямоугольник, эллипс, круг, дуга, закрашенный круг и овал. Мы использовали функцию pygame.draw в соответствии с формой с подходящими аргументами.

Выход разработки игры Snake

Мы можем играть снова, нажав кнопку ОК. Мы можем увидеть наш результат в терминале Pycharm(мы использовали Pycharm IDE; вы можете использовать любую Python IDE).

Код игры

Скопируйте приведенный выше код и вставьте его в свою среду IDE и получайте удовольствие. Чтобы понять концепции Pygame, посетите наш полный учебник по Pygame.

Читайте также: