Скорая Компьютерная Помощь г. Калуга

Полный спектр компьютерных услуг!

Здравствуйте, гость ( Вход | Регистрация )

> Внимание!

  • Вся информация, расположенная в данном и других разделах форума получена из открытых источников (интернет-ресурсы, средства массовой информации, печатные издания и т.п.) и/или добавлена самими пользователями. Администрация форума предоставляет его участникам площадку для общения / размещения файлов / статей и т.п. и не несет ответственности за содержание сообщений, а также за возможное нарушение авторских, смежных и каких-либо иных прав, которое может повлечь за собой информация, содержащаяся в сообщениях.
 
Ответить в эту темуОткрыть новую тему
> Python / Doodle Jump на pygame
Decker
сообщение 19.10.2011, 12:49
Сообщение #1


Администратор
*****

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1



Добрый…

Хочу рассказать и показать вам свой опыт знакомства с библиотекой pygame — предположительно отличной библиотекой для реализации графичиских приложений (в большей степени игр-аркад) на языке python. Для примера была реализована (частично) игра Doodle Jump.




Дисклеймер


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





Вместо введения


Python. Python великолепен в плане документации. Она есть, она понятна, она не лишена отличных примеров. Pygame — не исключение, поэтому предлагаю пока не останавливаться на подробностях реализации этой библиотеки, но необходимо заметить, что ее средства позволяют подгрузить изображение, и просто перемещать его по x и y. Ничего лишнего.




Архитектура


Постараемся разработатать архитектуру приложения в лучших традициях ООП. Имеем следующую диаграмму классов:



Сторонники MVC модели уже плачут, т.к. и логика и представление засунуты в тело класса.

Имеем 3 локации:

  • StartLocation — здесь крутится меню и приглашение к игре.
  • GameLocation — собственно сабж.
  • ExitLocation — выход, результаты, фанфары-овации.


Базовый объект Sprite, от которого наследуются все игровые объекты — платформы, кнопки, главный герой и т.д. По схеме все ясно.




Ключевые моменты



Events


def event(self, event):
if event.type == QUIT:
sys.exit()
elif event.type == KEYUP:
if event.key == K_ESCAPE:
# do something

if event.type == MOUSEMOTION:
for btn in self.buttons:
if btn.rect.collidepoint(pygame.mouse.get_pos()):
#pass
btn.changeState(1)

С помощью механизма эвентов прозрачно перехватываются нажатия клавиш и манипуляции с мышью.




Изображения


self.img_l = pygame.image.load('img/doodle_l.png').convert()
self.image = self.img_l
self.image.set_colorkey(self.image.get_at((0,0)), RLEACCEL)
self.rect = self.image.get_rect()
self.rect.center = (self.x,self.y)

Подгружаем картинки для спрайтов.




Столкновения


self.doodle.getLegsRect().colliderect(spr.getSurfaceRect())

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




Пара скриншотов









ToDo


  • Проработать гемплей
  • Нарисовать новые спрайты
  • Добавить звуки
  • Добавить статистику
  • Что еще?





Вместо послесловия


Знакомство с pygame можно считать законченым, дудлер прыгает и радуется жизни, но нагрузка процессора при этом стремится к 50-70%, что не есть гуд. Что это, говнокод плохая архитектура приложения или особенности языка — решать вам. Спасибо за внимание.

Исходники на github.

Original source: habrahabr.ru (comments, light).

Читать дальше


--------------------

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 15.12.2025, 23:31
Яндекс цитирования