Событийное программирование и PyGame
Про PyGame
PyGame = «обёртка» SDL + атомарность
Разбор примера.
Событийное программирование
Проблемы алгоритмической полноты «событийного ЯП» в части описания среды порождения, передачи и обработки событий вне объектов этой среды (диспетчера).
Кто-нибудь знает пример такого ЯП?
- Модель:
- среда (игровой мир) = проводник событий + контейнер объектов
- Варианты реализации
- Предазданная среда + обработчики событий в объектах (+ средства подписки на события)
- Моделирование среды с помощью «цикла разбора событий» (mainloop)
Снова PyGame
Правила пользования документацией
Учебник Программирование аркадных игр и обучение информатике
Основные объекты: surface.html, rect.html, timer.html, image.html, transform.html, …
- «Каноническая схема цикла разбора»:
- Понятие «игровых часов» (tick)
Один mainloop
- Определение адресата события
- Обработка события (немедленная)
- Активность объектов (возможно, немедленная)
- Изменение игрового мира (каждый tick)
- Отрисовка игрового мира (возможно, немедленная)
Пример
Отступление от канона: объединение обработчика событий и реакции объектов на них
Д/З
Каждое изменение сопровождается минимум одним коммитом и публикацией. Пункты, помеченные — необязательные
Склонировать Пример
- Исправить ошибку (перетаскивание пустого места приводит к падению)
- Реализовать гравитацию (это просто приращение скорости)
Написать класс «вращающиеся шары разного размера» на базе основного класса (можно использовать transform.html)
- Реализовать соударение: количество шаров лучше взять небольшим, чтобы не просчитывать соударение нескольких
При принятии решения о соударении использовать mask.html или знание о диаметре шара
Перераспределение импульса (описано тут)
Если кому-то хочется переделать всё и написать свой код:
- Пожалуйста!
Подумайте, а не стоит ли взять PyGame в качестве базы для учебного проекта