PyGame. Введение

Lumber room

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. avatar = image.load('player.bmp')

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

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

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


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


Собственно вот и все, коротко и сердито:) Полистав огромное колл-во игр, выложенных на оф. сайте, и обнаружив там настоящие 3д поделки — удивился и возрадовался одновременно)) Хоть я и не собираюсь покорять игродельческие вершины, но приятно, что любимый язык настолько многомерен. Если кому-то будет интересна эта тема, и у меня не пропадет желание записывать — то непременно будет продолжение).
Tags:pythonpygameвведениепример
Hubs: Lumber room
+16
7.6k 27
Comments 12

Popular right now

Программист Python / python developer
from 120,000 ₽Trace-XВоронежRemote job
Преподаватель Python / Python Developer
from 100,000 to 150,000 ₽LoftschoolRemote job
Python-программист
from 80,000 to 120,000 ₽ICNXRemote job
Python разработчик
from 80,000 ₽MircodКазань
Python разработчик
from 80,000 to 140,000 ₽AGORARemote job

Top of the last 24 hours