Если вас бесит Pygame
Возможно, вас, как и меня, дико раздражает та реализация обработки событий в Pygame, которая приводится, как пример, во всех возможных учебниках. А именно: в игровом цикле вложенный цикл перебирает очередь, и, в лучшем случае, вызывает методы объектов, но, обычно, еще и расчёты игровой механики идут там же. Отчего программа выглядит как месиво примеров из документации и костылей, перемотанное изолентой (не синей).
Моё решение
Создаём класс (в том числе, для всех настроек и глобальных действий игры)
Метод events сохраняет копию очереди событий, и отдаёт её по запросу, обновляя, при необходимости. Метод isRun предназначен для реакции на закрытие окна. Для общего случая он не нужен.
В целом, программы теперь можно писать так:
Таким образом, реакции на события обрабатываются внутри объектов, как и положено в нормальном мире.
Успешных разработок!