Добрый… Хочу рассказать и показать свой опыт работы с библиотекой pygame — якобы отличной библиотекой для реализации графических приложений (в основном аркадных игр) на языке Python. В качестве примера была (частично) реализована игра Doodle Jump.
Отказ от ответственности
- Да, я использовал чужие картинки - мне стыдно, скоро исправлю.
- Персонаж пока может только прыгать, но я планирую доиграть игру.
- Да, идея не нова, но получилось круто.
- Да, скорее всего, это нонсенс использовать для написания игр интерпретируемый язык.
- Я не профессиональный программист и это не моя основная деятельность.
Вместо того, чтобы представить
Питон.Python отлично подходит для документации.
Оно существует, оно понятно, не лишено прекрасных примеров.
Pygame не является исключением, поэтому предлагаю пока не останавливаться на деталях реализации этой библиотеки, но следует отметить, что ее инструменты позволяют загружать изображение и просто перемещать его по x и y. Ничего лишнего.
Архитектура
Мы постараемся разработать архитектуру приложения в лучших традициях.ООП .
У нас есть следующая диаграмма классов:
Сторонники MVC Модели уже плачут, потому что.
в тело класса запихивают и логику, и подачу.
У нас есть 3 локации:
- StartLocation - здесь вращается меню и приглашение в игру.
- GameLocation — это актуальная тема.
- ExitLocation – выход, результаты, фанфары и аплодисменты.
Ключевые моменты
События
С помощью механизма событий прозрачно перехватываются нажатия клавиш и манипуляции мышью.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, если ограничивающие прямоугольники спрайтов пересекаются.
Пара скриншотов
Делать
- Проработать игровой процесс
- Рисуем новые спрайты
- Добавить звуки
- Добавить статистику
- Правильные алгоритмы размещения платформы
- Добавьте элементы управления стрелками
- Что еще?
Вместо послесловия
Знакомство с pygame можно считать завершенным, дудлер прыгает и радуется жизни, но загрузка процессора стремится к 50-70%, что не есть хорошо.Что это, хреновый код, плохая архитектура приложения или особенности языка — решать вам.
Спасибо за внимание.
Исходники на github. Теги: #python #Pygame #doodle jump #python
-
Афганистан
19 Oct, 24 -
Кот
19 Oct, 24 -
Версия 1.0.9
19 Oct, 24 -
Реклама, Которая Не Уважает Пользователей
19 Oct, 24