PyGame. Введение

    PyGame. Введение.


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



    Задача.

    Создать «игровое» пространство, в котором, при помощи клавиш-стрелок, можно будет перемещать объект.

    Теория.

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

    Модуль image
    1. pygame.image.load (filename): return Surface
    Как можно догадаться, функция загружает некоторое изображение, и возвращеает в виде поверхности, типа, с которым при помощи функций pygame уже можно выполнять какие-либо операции (трансформировать, перемащать, удалять и пр.)

    Модуль Surface
    2. Surface.blit (source, dest, area=None, special_flags = 0)
    Отрисовывает заданную поверхность (source) поверх базовой (Surface), где dest — кортеж (x, y), кординат отрисвоки, area — (width, height) — размеры source поверхности. На счет флагов, если честно пока не разбирался))
    3. Surface.get_rect ()
    Возвращет кортеж вида (x, y, width, height), где x, y — кординаты левого верхнего угла поверхности (Surface), width, height — соответственно ее размеры.

    Модуль event
    Он позволяет взаимодействовать с событиями и запросами. Иными словами, любое событие в pygame, нажатие клавиши например, помещается в список, состоящий из Event objects. Все эти «событийные объекты» имеют тип, получить доступ к которому можно путем Event.type.
    4. pygame.event.get ()
    Метод get () позволяет получить список событий.

    Модуль Rect
    Модуль для работы с кортежами типа rect.
    5. Rect.move (X, Y)
    Возвращает новый rect, в котором координаты смещены, относительно исходных, на заданные X, Y, в качестве которых может быть положительное или отрицательное целое число.

    Практика.

    Взяв на вооружение вышесказанное, получаем:
    1. # -*- coding: cp1251 -*-
    2. # Пример реализации движения при помощи pygame.

    3. from pygame import *
    4. import sys
    5. # Инициализируем загруженную библиотеку.
    6. init()

    7. # Создаем окно разрешением 640х480
    8. screen = display.set_mode((640, 480))

    9. # Устанавливаем название окна
    10. display.set_caption('example')

    11. # Загружаем фоновый рисунок, в формате:
    12. # jpg, png, gif(без анимации), bmp, pcx, tga(без сжатия), tif.
    13. background = image.load('background.bmp')

    14. # Отрисовываем рисунок в нашем окне
    15. screen.blit(background, (0, 0))

    16. # Создаем игровой объект
    17. class GameObj:
    18.     def __init__(self, img, x, y, step):
    19.         self.img = img # Картинка объекта
    20.         self.x = x # x, y - коодинаты начального положения
    21.         self.y = y
    22.         self.step = step # Шаг, на который будет смещаться объкт
    23.         self.pos = img.get_rect().move(x, y)
    24.     def _move(self, event):
    25.         if event.key == K_UP: #273 код клавиши вверх
    26.             self.pos = self.pos.move(0, -self.step)
    27.         if event.key == K_DOWN:
    28.             self.pos = self.pos.move(0, self.step)
    29.         if event.key == 276:
    30.             self.pos = self.pos.move(-self.step, 0)
    31.         if event.key == 275:
    32.             self.pos = self.pos.move(self.step, 0)
    33.        
    34. avatar = image.load('player.bmp')

    35. # Инициируем игровой объект
    36. x = GameObj(avatar, 320, 220, 10)

    37. # Рисуем картинку объекта, в его координатах
    38. screen.blit(x.img, x.pos)

    39. # Запускаем бесконечный цикл, чтобы окно не схлопнулось после появления :)
    40. while 1:
    41.     for i in event.get(): # Перебор в списке событий
    42.         if i.type == QUIT: # Обрабатываем событие шечка по крестику закрытия окна
    43.             sys.exit()
    44.         if i.type == KEYDOWN:
    45.             screen.blit(background, x.pos, x.pos)
    46.             x._move(i)
    47.             screen.blit(x.img, x.pos)
    48.     # Обновляем изображение в окне, чтобы изменения в нем стали видны
    49.     display.flip()


    Послесловие.


    Собственно вот и все, коротко и сердито:) Полистав огромное колл-во игр, выложенных на оф. сайте, и обнаружив там настоящие 3д поделки — удивился и возрадовался одновременно)) Хоть я и не собираюсь покорять игродельческие вершины, но приятно, что любимый язык настолько многомерен. Если кому-то будет интересна эта тема, и у меня не пропадет желание записывать — то непременно будет продолжение).

    Комментарии 12

    • НЛО прилетело и опубликовало эту надпись здесь
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          а какая разница? там же компиляции в машкод все равно не идет
        +2
        Как-то раз имея часа 4 свободного времени почти написал аналог игры Xonix =) В плане быстрого и легкого создания мини-игрушек, PyGame — то, что надо! )
        Пара скриншотов:




        Могу исходники выложить, если кому интересно, правда они сыроваты)
          0
          было бы не плохо глянуть)) сам сейчас пишу на досуге что-то вроде псевдо-мморпг-чата, попутно изучаю что да как :)
            +2
              +1
              принято и изучается)))
              плюсик поставить пока не могу — недавно зарегался(
              з.ы. бкграунды психоделические — башню сносит через 2 минуты))
          0
          даешь биндинги для Ogre! =)
            0
            Даю :)
            python-ogre.org
            0
            Совсем недавно открыл для себя язык python, в виде его реализации jython, причем совершенно с неожиданной стороны — в качестве скриптов администрирования websphere… )

            Мне очень понравился это язык своей лаконичностью чтоли, вот только не пойму область его применения.

            По поводу PyGame — может быть автор в курсе, возможно эту библиотеку использовать в Python for S60?
              0
              на счет s60, лично не пробовал, но вроде, что-то подобное есть. на оф сайте по крайней мере Nokia указывается в супорт платформа, и есть ссылка на некий проект maemo.org. Но ничего конкретного сказать не могу.
              0
              На showmedo.com есть несколько скринкастов по pygame для начинающих.

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

              Самое читаемое