Из чего состоит игра? Какую игру вы бы не взяли, в ней будет главная функция, которая содержит логику игры. Она выполняет вычисления связанные с механикой игры, искусственным интеллектом, графикой, нажатиями клавиш и другими событиями в игре. Игровой цикл — это часть программного кода игры, которая содержит операции, необходимые для выполнения перед отрисовкой каждого кадра. Языки программирования, такие как Python или С++, содержат специальную конструкцию — цикл. Если программирование и циклы для вас в новинку — рекомендую изучить основы C++ или Python.
Структура
Упрощённо игровой цикл выглядит так:
запустить_игру; while (пока_игра_продолжается) { выполнить_расчет_игровой_логики; нарисовать_кадр; } завершить_игру;
В таком виде, абстрактно, игровая петля представляется программисту. Абстрактность означает то, что это модель с низким уровнем детализации. Если детальнее рассмотреть каждую функцию, увидим, что они содержат большее количество меньших операций.
Детально: старт игры
- Функция «начать_игру»
Содержит операции, которые выполняются единожды после запуска игры.
При исполнении этих операций выполняется:- регистрация программы в ОС,
- определение видеокарты, объёма оперативной памяти и других параметров компьютера,
- кеширование параметров игры с жёсткого диска,
- инициализация интерфейса,
- загрузка информации о сохранённых играх,
- выделение пространства в памяти для работы игры и др.
Детально: тело цикла
- Функция «выполнить_расчет_игровой логики»
Одна из самых больших и сложных функций в игре. Здесь содержится функционал самого разного калибра: от функции обработки нажатия клавиш, размером в около 1000 строк, до функций расчёта искусственного интеллекта (ИИ), которые занимают тысячи строк в сотнях файлов. Определённо, весь список функционала привести невозможно — игровая логика и её код отличается даже у двух игр с одинаковой тематикой.
Что содержится в функции:- обработка нажатия клавиш игроком, реакция на управление,
- расчёт логики ИИ,
- обработка скриптов,
- расчёт физики объектов,
- вычисление координат объектов в игровом мире,
- применение анимаций,
- генерация и обработка звука.
- Функция «нарисовать_кадр»
Эта функция удовлетворяет самым высоким требованиям по скорости выполнения. Здесь собирается масса данных лишь с одной целью: нарисовать кадр игры как можно быстрее.
В этой части игры выполняется:- Обработка информации об объектах, которые попадают в кадр,
- Определение проекций объектов на плоскость кадра, какой предмет что перекрывает и т.п.,
- На объекты накладываются текстуры,
- Обрабатываются эффекты рельефа и материалов поверхностей. От этого зависит взаимодействие света с ней. Свет будет отражаться, если поверхность глянцевая, рассеиваться, если матовая, или преломляться, если она прозрачная.
- Далее производится вычисление и накладывание теней,
- Обработка данных, которые связаны с интерфейсом игры, его положением в кадре, информация там отображается и т.п.
- Заключительной операцией становится вычисление графическим процессором цвета и яркости каждого пикселя на экране.
- Графический процессор вычисляет цвет каждого пикселя на экране менее чем за 1/60 = 0.167 секунды, когда игра работает в 60 кадров в секунду. Высокие требования к скорости становятся очевидными, если учесть, что на Full-HD мониторе 1920 * 1080 = 2 073 600 пикселей.
Детально: завершение игры
- Функция “Завершить_игру”:
- Освободить пространство в видео- и оперативной памяти
- Закрыть служебные файлы игры
- Подготовить игру к завершению
- Корректно завершить программу и сообщить об этом операционной системе
Задание
Теперь вы знакомы с основами того, из чего состоит игра. Это поможет понять структуру игры в целом. Для закрепления материала, попробуйте написать простейшую игру. Игрок передвигает квадрат по окну игры. Игра содержит четыре счётчика. Каждый из них считает сколько раз квадрат коснулся края экрана: один — количество касаний верхней границы, второй – правой границы и т.д. После закрытия игры вывести значения счётчиков в консоль.
Если вы не читали статью об истории компьютерных игр — советую сделать это, ведь там много интересных фактов о первых попытках создания игр.