Программирование игр без основного цикла - PullRequest
5 голосов
/ 21 октября 2010

Сегодня мой профессор дал моему классу задание на основе объектно-ориентированного программирования в Pygame. По сути, он сказал, что игра, которую мы создадим, будет лишена основного игрового цикла. Хотя я полагаю, что это возможно (и этот вопрос заявил, что это возможно), я не верю, что это необходимо для соблюдения объектно-ориентированной парадигмы.

На диаграмме, которую дал профессор, он показал инициализацию игры, и, когда объекты были созданы, поток управления программой будет распределен между объектами.

По сути, я считаю, что можно было бы реализовать игру таким образом, но это не было бы идеальным способом и не требовалось для приверженности объектно-ориентированному подходу. Есть мысли?

РЕДАКТИРОВАТЬ: Мы создаем клон астероидов, который, я считаю, еще больше усложняет ситуацию из-за того, что это игра в реальном времени.

Ответы [ 4 ]

7 голосов
/ 21 октября 2010

Пошаговые игры или что-то еще, управляемое событиями, - это путь. Другими словами, возьмите настольные приложения с графическим интерфейсом. Они просто отметят (ждут), пока событие не будет запущено. То же самое можно сделать для простой игры. Взять, к примеру, шашки. Зацикливание каждого игрового цикла было бы излишним. 90% времени игра будет статичной. Использование некоторой формы событий (модель *1002* наблюдателя была бы здесь хороша) дало бы намного лучшее решение Вы используете Pygame, так что может быть поддержка этого встроена, из-за моего ограниченного использования я не могу комментировать полностью. В любом случае, общие принципы одинаковы.

В общем, это довольно мусорное задание, если вы спросите меня. Если бы это научило вас программированию, управляемому событиями, было бы лучше использовать простое приложение с графическим интерфейсом. Даже самые простые игры используют базовый игровой цикл, который может придерживаться ОО-принципов.

2 голосов
/ 21 октября 2010

Хм.В общем случае, я думаю, что эта идея, вероятно, hokum.SDL (на котором реализован PyGame) предоставляет информацию программе через очередь событий и использует эту очередь, требуя некоторого рода повторной проверки очереди на наличие событий, обработки их и ожидания до прибытия следующего события.

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

Вы можете использовать pygame.time, чтобы подождать в таймере вместо ожидания в очереди событий, а затем передать управление игровым объектам, которые опрашивают мышь и клавиатуру, как указано выше, но вы все еще «зацикливаетесь», но связан таймером вместо очереди событий.

Вместо того, чтобы сосредоточиться на устранении основного цикла, лучше подумать об использовании его объектно-ориентированным способом.

Например, вам может потребоваться «корневой» объект, который фактически имеет свой собственный цикл событий, но вместо выполнения какого-либо действия, основанного на входящих событиях, он вызывает обработчик для нескольких дочерних объектов.Например, когда корневой объект получает событие pygame.event.MOUSEBUTTONDOWN, он может найти в своих дочерних элементах атрибут 'rect' и определить, находится ли атрибут event.pos внутри этого прямоугольника.если это так, он может вызвать гипотетический метод onClick для этого дочернего объекта.

0 голосов
/ 21 октября 2010

Вы можете посмотреть, как python использует сигналы.Достойный пример, который я нашел по адресу: http://docs.python.org/library/signal.html

0 голосов
/ 21 октября 2010

Я думаю, это можно отнести к программированию на основе событий? Который еще может быть объектно-ориентированным. Вы часто видите это во Flash.

Есть разница между основным циклом в основном классе. Вы можете по-прежнему иметь игровой класс, инициализирующий все ваши объекты, а затем полагаться на входные данные для продвижения игры вперед.

Вроде сложно сказать точно, не зная точных параметров вашего задания, дьявол кроется в деталях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...