Паттерны программирования игр
— Паттерны очередности
161
Игровой цикл
(Game Loop)
«Уменьшить связанность течения игрового времени
от пользовательского ввода и скорости процессора».
Мотивация
Если и существует паттерн, без которого эта книга
не могла бы существовать, то вот он. Игровой цикл
(Game Loop) — ярчайший пример паттернов проекти-
рования игр. Вы обнаружите его почти в каждой игре,
но два одинаковых вам найти вряд ли удастся, а уж вне
игровой индустрии его используют очень немногие
программы.
Чтобы понять все его преимущества, обратимся к ис-
тории. В старые времена, когда программирование толь-
ко зарождалось, а все «компьютерщики» носили бороды,
программы работали подобно посудомоечным маши-
нам. В них загружали груду кода, нажимали на кнопку,
ждали результата. Готово. Они работали в так называ-
емом
пакетном режиме
(batch mode): работа выполне-
на — программа завершилась.
Мы до сих пор встречаем программы такого типа,
но, к счастью, нам не надо писать их на перфокартах.
Скрипты командной оболочки, консольные программы
и даже небольшой, написанный на Python скрипт раз-
метки этой книги — программы, работающие в пакет-
ном режиме.
Глава 9
Ада Лавлейс и контр-
адмирал Грейс Хоппер
тоже носили почетные
бороды.
162
Игровой цикл (Game Loop) —
Паттерны программирования игр
Интервью с процессором
В конце концов программисты осознали, что отправить
код в вычислительный центр и получить результаты
только через несколько часов — не самый быстрый спо-
соб отследить ошибки программы. Они захотели полу-
чать обратную связь немедленно. Так родились
интерак-
тивные
программы. И игры были одними из первых
интерактивных программ.
YOU ARE STANDING AT THE END OF A ROAD BEFORE
A SMALL BRICK BUILDING. AROUND YOU IS A FOREST.
A SMALL STREAM FLOWS OUT OF THE BUILDING AND DOWN
A GULLY.
> GO IN
YOU ARE INSIDE A BUILDING, A WELL HOUSE FOR
A LARGE SPRING.
Пользователи могли общаться с программой. Она
ожидала ввод, на который реагировала. Затем была сно-
ва очередь пользователей, прямо как в играх в детском
саду, где все ходят по очереди. Когда наступала очередь
пользователя, программа не делала ничего, просто ожи-
дала. Примерно вот так:
while (true)
{
char* command = readCommand();
handleCommand(command);
}
Циклы событий
Современные приложения с графическим интерфейсом
удивительно похожи на старые текстовые квесты, стоит
только содрать с них оболочку. Ваш текстовый редактор
также просто ожидает, ничего не делая, пока вы не на-
жмете кнопку или где-то не кликнете:
Это Colossal Cave
Adventure, самый пер-
вый квест.
Цикл бесконечен,
то есть нет способа
выйти из игры. В настоя-
щей игре было бы
что-то вроде
while
(!done),
и определено
это
done
для выхода.
Я не стал прописывать
детали, желая сохранить
пример максимально
простым.
Do'stlaringiz bilan baham: |