Doodle Jump В Pygame

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



Отказ от ответственности

  • Да, я использовал чужие картинки - мне стыдно, скоро исправлю.

  • Персонаж пока может только прыгать, но я планирую доиграть игру.

  • Да, идея не нова, но получилось круто.

  • Да, скорее всего, это нонсенс использовать для написания игр интерпретируемый язык.

  • Я не профессиональный программист и это не моя основная деятельность.



Вместо того, чтобы представить

Питон.

Python отлично подходит для документации.

Оно существует, оно понятно, не лишено прекрасных примеров.

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



Архитектура

Мы постараемся разработать архитектуру приложения в лучших традициях.

ООП .

У нас есть следующая диаграмма классов:

Doodle Jump в pygame

Сторонники MVC Модели уже плачут, потому что.

в тело класса запихивают и логику, и подачу.

У нас есть 3 локации:

  • StartLocation - здесь вращается меню и приглашение в игру.

  • GameLocation — это актуальная тема.

  • ExitLocation – выход, результаты, фанфары и аплодисменты.

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



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



События
  
  
   

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, если ограничивающие прямоугольники спрайтов пересекаются.



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



Doodle Jump в pygame



Doodle Jump в pygame



Делать

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


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

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

Что это, хреновый код, плохая архитектура приложения или особенности языка — решать вам.

Спасибо за внимание.

Исходники на github. Теги: #python #Pygame #doodle jump #python

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.