Добрый…
Хочу рассказать и показать вам свой опыт знакомства с библиотекой pygame — предположительно отличной библиотекой для реализации графичиских приложений (в большей степени игр-аркад) на языке python. Для примера была реализована (частично) игра Doodle Jump.
Python. Python великолепен в плане документации. Она есть, она понятна, она не лишена отличных примеров. Pygame — не исключение, поэтому предлагаю пока не останавливаться на подробностях реализации этой библиотеки, но необходимо заметить, что ее средства позволяют подгрузить изображение, и просто перемещать его по x и y. Ничего лишнего.
Постараемся разработатать архитектуру приложения в лучших традициях ООП. Имеем следующую диаграмму классов:
Сторонники MVC модели уже плачут, т.к. и логика и представление засунуты в тело класса.
Имеем 3 локации:
Базовый объект Sprite, от которого наследуются все игровые объекты — платформы, кнопки, главный герой и т.д. По схеме все ясно.
С помощью механизма эвентов прозрачно перехватываются нажатия клавиш и манипуляции с мышью.
Подгружаем картинки для спрайтов.
Метода coliderect возвращает true, если прямоугольники, ограничивающие спрайты пересекаются.
Знакомство с pygame можно считать законченым, дудлер прыгает и радуется жизни, но нагрузка процессора при этом стремится к 50-70%, что не есть гуд. Что это,говнокод плохая архитектура приложения или особенности языка — решать вам. Спасибо за внимание.
Исходники на github.
Хочу рассказать и показать вам свой опыт знакомства с библиотекой 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.