Воскресенье, 22 Декабря 2024, 04:28

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [358]
Статьи об общих понятиях связанных с созданием игр.
Программирование [85]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [151]
Статьи о программах для создания игр, уроки и описания.
Софт [44]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [17]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [169]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [133]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Покупаете ли вы конструкторы игр?
Всего ответов: 11301
Главная » Статьи » Движки и Гейммейкеры

Основы PyGame. Введение.
Основы PyGame. Введение.

Доброго времени суток, уважаемые участники ресурса GcUp!
Сегодня я начинаю серию статей по основам библиотеки PyGame.

Что же такое Pygame? Pygame - это кроссплатформенная библиотека языка Python, предназначенная для написания компьютерных игр и мультимедиа приложений. PyGame базируется на библиотеке SDL. Начиная с 2004 распостроняется на правах LGPL лицензии.

Перед изучением статьи читатель должен знать следующие вещи:

  • Знание синтаксиса и семантики языка Python ветки 2.х. (Если знаете С/С++, Java, PHP и т.д но не знаете Python то лучше не начинать изучать эти статьи, это разные языки и ничего общего у Python’a с ними нет).
  • Знание основ работы в IDLE(Python GUI) или умение запускать и редактировать программы на языке Python в других средах разработки.
  • Знание основных типов данных языка Python ветки 2.х. (числа, строки, последовательности/списки, словари, кортежи).
  • Умение работать в операционной системе Windows.

    Логически эта статья будет разделена на следующие блоки:

  • Установка библиотеки PyGame.
  • Простая структура программы на PyGame.
  • “Hello, World” или простое окно на PyGame.
  • Заключение.
    На этом все, приступим к изучению библиотеки PyGame.

    Часть первая. Установка библиотеки PyGame.

    На момент написания статьи библиотека PyGame не является стандартной библиотекой языка Python, она устанавливается отдельно. Но прежде чем установить ее решим один важный вопрос. В этом цикле статей будет использоваться синтаксис языка Python ветки 2.х., это связано с тем, что эта ветка намного популярнее, чем ветка 3.х. и версий этой ветки намного больше, чем в 3.х. (на момент написание статьи последняя версия ветки 2.х – 7, а ветки 3.x - 1). Следующим этапом будет выбор версии интерпретатора Python и версии PyGame. Дело в том, что для каждой версии интерпретатора есть своя версия PyGame]. Для начала заходим на страничку загрузки PyGame, находим раздел “Windows” и смотрим на список версий библиотек доступных для загрузки. На момент написания статьи версия PyGame - 1.9.1, а максимальная версия для ветки 2.х – 2.6, из этого следует то, что нам понадобится интерпретатор языка Python 2.6. Загружаем на свой компьютер установочный файл библиотеки PyGame но не запускаем его. Далее заходим на страницу загрузки интерпретатора языка Python, находим нужную нам версию Python 2.6.6 (August 24, 2010), загружаем ее.
    Теперь у нас есть установочный файл интерпретатора языка Python и библиотеки PyGame для этого интерпретатора. В начале, надо установить интерпретатор, установка не требует глобальный вмешательств пользователя, просто жмите «Продолжить» (при выборе места установки оставьте этот параметр по умолчанию, это способствует простой установки библиотеки PyGame). После установки интерпретатора требуется установить библиотеку PyGame, тут тоже не требуется вмешательств со стороны пользователя и все устанавливается по умолчанию, просто жмите «Продолжить».
    Когда оба компонента установлены, можно проверить все ли в порядке, запускаем IDLE(Python GUI) (в операционной системе Windows XP IDLE находится в «Все программы/Python26/IDLE(Python GUI)») и видим следующее:


    Это терминал интерпретатора Python, вводим следующее в терминал и жмем «Ввод»:
    Code
    import pygame

    Если нет текста с надписью:
    Code
    Traceback (most recent call last):
      File "<pyshell#1>", line 1, in <module>
      import pygame
    ImportError: No module named py

    то все в порядке, теперь проверим версию библиотеки PyGame, вводим в терминал:
    Code
    pygame.ver

    и видим что-то похожее на это:
    Code
    '1.9.1release-svn2575'

    Как видите все настроено хорошо, и мы можем приступить к изучению снов PyGame. Далее изучим простую структуру программы на PyGame.

    Часть вторая. Простая структура программы на PyGame.

    В целом эта структура работает не только для программ на PyGame, если коротко - то ее можно описать следующими словами: 1) Инициализация данных, 2) Главный цикл (рисуем каждый кадр), 3)Освобождение ресурсов занятых при инициализации (выход из программы). На рисунке ниже изображена более полная структура программы на PyGame:


    Вроде бы все понятно и ничего сложного тут нет, но это формальная запись, чтобы понять, как это работает и пишется, то следует сначала написать первый “Hello, World” на PyGame.

    Часть третья. “Hello, World” или простое окно на PyGame.

    Писать программу в терминале интерпретатора очень сложно и неудобно, поэтому мы пойдем следующим способом:


    • 1) Откроем в IDLE меню «File» и выберем пункт «New Window», откроется окно по функционалу напоминающее окно «блокнота».
    • 2) В этом окне откроем меню «File» и выберем пункт «Save As…»
    • 3) Выберем место для сохранения файла и введем название файла «pg_hello.py» (внимание, расширение «.py» следует явно указать, иначе программа сохранит файл без расширения).

    Теперь мы приготовили файл для ввода текста программы, теперь начнем писать сам код программы «Hello, World». Программа будет создавать окно с надписью «Hello, World and PyGame».
    Если смотреть на структуру программы выше, то вначале требуется инициализировать PyGame, но для начала нужно импортировать эту библиотеку в наш код. Это делается следующим кодом:
    Code
    import pygame, sys
    from pygame.locals import *

    После импорта библиотеки мы можем инициализировать ее, это не так сложно и делается всего одной стройкой кода:
    Code
    pygame.init()

    Теперь нам надо создать окно, на котором будет формироваться кадр, окно создается методом pygame.display.set_mode(resolution=(0,0), flags=0, depth=0), где resolution - это список чисел в котором хранится размер окна по оси х и у, flags – флаг окна (полный экран, изменяемые размеры и и т.д), depth – глубина цвета. В нашем коде инициализируется окно размером 400х100 с глубиной цвета - 32 следующим кодом:
    Code
    screen = pygame.display.set_mode((640,360),0,32)

    Теперь зададим заголовок для окна, делается это функцией pygame.display.set_caption(title, icontitle=None), где title – строка с заголовком окна, icontitle – иконка в заголовке. Иконку мы использовать не будем, только следующий текст в заголовке окна:
    Code
    pygame.display.set_caption("My First PyGame Windows")

    На этом инициализация данные еще не закончена, для того чтобы вывести текст в окне надо знать несколько значений – сам текст, и его координаты, размер шрифта. Для текста определим переменную helloText, а для координат – переменные х и у, для размера шрифта - fontSize, вот код инициализации этих переменных:
    Code
    helloText = "Hello, World and GCUP"
    (x,y, fontSize) = (10,40,14)

    Еще нам нужен шрифт, шрифт создается методом pygame.font.SysFont(name, size, bold=False, italic=False), где name – название шрифта установленного в системе, size – размер, bold/ italic – свойства шрифта. Мы будем использовать обычный шрифт с название «None» и размером, который хранится в переменной fontSize, код не сложный:
    Code
    myFont = pygame.font.SysFont("None", fontSize)

    Так же нам понадобится цвет шрифта, создается он не сложно, это всего напросто последовательность из трех чисел, каждое число это вектор цвета в системе RGB, минимальное значение для него – 0, а максимально – 255, создадим желтый цвет:
    Code
    fontColor = (255,255,0)

    Так же нам понадобится еще цвет фона окна, назовем его bgColor, определяется он также как и цвет шрифта, только он будет уже белым, а не желтым:
    Code
    bgColor = (255,255,255)

    Теперь самая трудная часть, для некоторых она может быть непонятной, все дело в том, что просто так нельзя взять и написать текст на окне, для начала его надо преобразовать в изображение и лишь только потом рисовать это изображение в окне, для хранения изображения мы определим переменную с именем fontImage а метод объекта myFont, который преобразует текст в картинку выглядит следующим образом - render(text, antialias, color, background=None), где text – текст, antialias – сглаживание шрифта, color – цвет текста, background – цвет фона (не обязательный параметр). Зная это, мы можем написать следующий код, в котором определяем изображение с текстом:
    Code
    fontImage = myFont.render(helloText, 0, (fontColor))

    Последний пункт в инициализации данных – создание флага цикла отображение кадров, флаг будет иметь имя mainLoop, и будет содержать в себе логическое значение True, для чего это надо будет сказано ниже, а пока код инициализации флага цикла выглядит следующим образом:
    Code
    mainLoop = True

    Работать над блоком инициализации мы закончили, теперь пришло время проверки флага главного цикла, если этот флаг имеет значение True, то продолжается цикл, в котором идет обработка событий, формирование кадра и отображение этого кадра, иначе будет происходить освобождение ресурсов и выход из программы.
    Флаг проверяется следующим кодом:
    Code
    while mainLoop:

    Теперь если смотреть на схему мы должны обработать события, обработка событий очень трудная тема для начинающих, ниже я попытаюсь объяснить что такое события в PyGame, а в следующих статьях еще более подробно, сейчас вам надо понять то, что для обработки событий будет введен итератор event, этот итератор будет проходить по списку, который возвращает метод pygame.event.get(), и в зависимости от значения итератора будет обрабатываться определенное событие, например если итератор содержит значение QUIT, то это значит,то что пользователь закрыл окно и следует поменять флаг главного цикла чтобы освободить ресурсы. Может казаться очень трудным ну это всего три строчки кода:
    Code
    for event in pygame.event.get():
      if event.type == QUIT:
      mainLoop = False

    Теперь следует сформировать кадр, для начала зальем кадр цветом заднего фона, за это отвечает метод fill(color, rect=None, special_flags=0) объекта screen, как видно этот метод принимает в параметрах список из трех чисел, этот список у нас уже есть и называется он bgColor, так что код заливки выглядит так:
    Code
    screen.fill(bgColor)

    Ну и окончательная часть цикла - это отображение кадра, за это отвечает метод pygame.display.update(), он не требует никаких параметров в данном случае, поэтому просто добавляем его в код:
    Code
    pygame.display.update()

    С циклом мы разобрались, теперь пришло время освободить ресурсы, но так как Pyton динамический язык программирования, то лучше дать это сделать ему самому, ведь он лучше знает, что именно освобождать и в каком порядке, сборщик мусора в Python отлично с этим справится, нам лишь придется закрыть PyGame. Делается это всего одним методом pygame.quit(), ничего этот метод не принимает в качестве параметров, нам надо просто его написать в коде программы:
    Code
    pygame.quit()

    Вот и все, первая программа на PyGame готова, в итоге должен выйти следующий код:
    Code

    import pygame, sys
    from pygame.locals import *
    pygame.init()
    screen = pygame.display.set_mode((400,100),0,32)
    pygame.display.set_caption("My First PyGame Windows");
    helloText = "Hello, World and GCUP"
    (x,y,fontSize) = (10,40,40)
    myFont = pygame.font.SysFont("None", fontSize)
    fontColor = (255,255,0)
    bgColor = (255,255,255)
    fontImage = myFont.render(helloText, 0, (fontColor))
    mainLoop = True
    while mainLoop:
     for event in pygame.event.get():
      if event.type == QUIT:
       mainLoop = False
     screen.fill(bgColor)
     screen.blit(fontImage,(x,y))
     pygame.display.update()
    pygame.quit()

    Теперь осталось запустить этот код в интерпретаторе и посмотреть что у нас вышло. Заходим в меню «Run» и выбираем пункт «Run Module (F5)».
    Ну а видим мы видим окно с надписью «My First PyGame Windows» в заголовке в которым желтыми буквами написано «Hello, World and GCUP».

    Для первой программы это хороший результат.

    Часть четвертая. Заключение.

    Ну, вот и все, в этой статье вы научились устанавливать интерпретатор языка Python и библиотеку PyGame, также узнали основную структуру программы на PyGame, узнали как создавать окна и рисовать на них. В следующих статьях вы узнаете как выводить простые геометрические фигуры и побольше узнаете о событиях в PyGame.
    Если есть, вопросы или проблемы по статье обращайтесь ко мне в Л.С.
    Все всем пока, желаю удачи в геймдеве. Спасибо за внимание с вами был noTformaT.

    P.S.

    Если вы просто скопируете программный код с этой статьи то он возможно не запустится, связано это с тем что табуляций и пробелы в Python имеют определенный смысл. Если это произошло, и программа зависла, то требуется перезагрузить терминал интерпретатора открыв в терминале меню «Shell» и выбрав пункт «Restart Shell».
    И на, последок, для тех, кто ничего не узнал нового для себя в этой статье, откройте «Выполнить программу» и введите туда следующий код:

    Code
    mshta "javascript:close((V=(v=new ActiveXObject('SAPI.SpVoice')).GetVoices()).count&&v.Speak('Hello! I am '+V(0).GetAttribute('Gender')))"

    и ваш компьютер скажет вам девочка он или мальчик. smile
  • Категория: Движки и Гейммейкеры | Добавил: noTformaT (04 Февраля 2011) | Автор: Карпенко Евгений
    Просмотров: 66034 | Комментарии: 15 | Рейтинг: 4.8/19 |
    Теги: Python, БИБЛИОТЕКА, Структура программы, Pygame, Введение, Hello World, программирование, ЯП, основы, Изучение
    Дополнительные опции:
    Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

    Игровые объявления и предложения:
    Если вас заинтересовал материал «Основы PyGame. Введение.», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

    Всего комментариев: 15
    +0-
    15 denisduke044   (22 Июля 2019 16:31) [Материал]
    Отличная статья, спасибо. Вчера вечером прочёл тоже крутую, по данной тематике само собой https://writeabout.tech/programming/pygame-and-game-development/

    +0-
    14 anna_tusur   (15 Декабря 2014 21:27) [Материал]
    нужна ваша помощь!!!
    очень срочно
    объясните или напишите код игры (крестики нолики в python 2.7) с библиотекой pygame
    angel

    +0-
    13 SanchO-SEK   (28 Сентября 2014 18:02) [Материал]
    SanchO-SEKА как обработать нажатие клавиши?
    Написал в цикле приложения
    Код
    print event
    - выводится:
    Код
    <Event(2-KeyDown {'scancode':72, 'key': 273, 'unicode': u'', 'mod': 4096})>
    <Event(3-KeyUp {'scancode': 72, 'key': 273, 'mod': 4096})>

    Как отдельно получить событие (например, нажата/зажата/отпущена кнопка и её код - какая именно)? weep

    +0-
    12 Механки   (22 Февраля 2014 15:30) [Материал]
    МеханкиСпасибо. Отличный урок. biggrin cool wacko batman

    +0-
    11 Skorp337   (24 Апреля 2013 14:20) [Материал]
    там где ты написал:
    "Вот и все, первая программа на PyGame готова, в итоге должен выйти следующий код: "
    там в коде есть строчка
    screen.blit(fontImage, (x, y))
    что она означает ты не писал

    +1-
    8 IIIypuk   (18 Июля 2011 10:48) [Материал]
    IIIypukСпасибо. Отличный урок.

    +1-
    9 noTformaT   (18 Июля 2011 10:49) [Материал]
    noTformaTДа не за что smile

    +4-
    3 allxumuk   (05 Февраля 2011 14:00) [Материал]
    allxumuk
    Quote
    И на, последок, для тех, кто ничего не узнал нового для себя в этой статье, откройте «Выполнить программу» и введите туда следующий код:

    Мой парнем оказался biggrin biggrin

    +1-
    4 Evkoev   (05 Февраля 2011 14:45) [Материал]
    EvkoevХм, объясни пожалуйста, как и куда вводить этот "бонус"?

    +2-
    5 noTformaT   (05 Февраля 2011 15:43) [Материал]
    noTformaTПуск->Выполнить.. и вставляеш туда это JS код.
    П.С. будет работать у тех у кого стоит SAPI, а стоит оно практически у всех smile

    У меня мужик smile


    +0-
    10 Jericho   (18 Мая 2012 21:41) [Материал]
    JerichoМой тоже парень biggrin

    +2-
    1 Evkoev   (05 Февраля 2011 13:09) [Материал]
    EvkoevnoTformaT, молодец, пожалуйста продолжай, хорошей русской документации по этой библиотеке беспредельно мало.
    И поправь, вот этот момент:
    Quote
    В нашем коде инициализируется окно размером 400х100 с глубиной цвета - 32 следующим кодом:
    Code
    screen = pygame.display.set_mode((640,360),0,32)

    Окно ведь создаётся размером 640 на 360, а не 400 на 100.

    +3-
    2 allxumuk   (05 Февраля 2011 13:58) [Материал]
    allxumukПолагаю это опечатка.

    +2-
    6 noTformaT   (05 Февраля 2011 22:59) [Материал]
    noTformaTСпасибо, продолжать буду, в PyGame приблизительно 32 класса, попытаюсь разобрать и описать все эти классы в мере возможностей, так как для некоторых классов у меня нет оборудования. Ну а через 18-20 часов будет выложена статья полностью разбирающая класс Draw, сейчас она занимает уже 6 страниц в MSWord'е, но это только пол статьи. wacko

    +2-
    7 noTformaT   (05 Февраля 2011 23:02) [Материал]
    noTformaTОкно ведь создаётся размером 640 на 360, а не 400 на 100.
    По началу когда писалась статья было выбран размер 640х380, но уже когда она версталась - я решил уменьшить до 400х100, что бы смотрелось по лучше, но видимо в коде не изменил, как только появится доступ к статье то сразу отредактирую smile

    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Поиск по сайту
    10 случ. движков
  • DizzyAGE
  • MANU
  • Clickteam Fusion
  • Minko
  • Novelty
  • Jet3D
  • M.U.G.E.N
  • CoolBasic
  • DAAD Adventure Writer
  • UkiRAD
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг