Из чего состоит игра

Из чего состоит игра? Какую игру вы бы не взяли, в ней будет главная функция, которая содержит логику игры. Она выполняет вычисления связанные с механикой игры, искусственным интеллектом, графикой, нажатиями клавиш и другими событиями в игре. Игровой цикл — это часть программного кода игры, которая содержит операции, необходимые для выполнения перед отрисовкой каждого кадра. Языки программирования, такие как Python или С++, содержат специальную конструкцию — цикл. Если программирование и циклы для вас в новинку — рекомендую изучить основы C++ или Python.

Структура

Упрощённо игровой цикл выглядит так:

запустить_игру;

while (пока_игра_продолжается)
{
     выполнить_расчет_игровой_логики;
     нарисовать_кадр;
}

завершить_игру;

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

Детально: старт игры

  • Функция «начать_игру»
    Содержит операции, которые выполняются единожды после запуска игры.
    При исполнении этих операций выполняется:
    1. регистрация программы в ОС,
    2. определение видеокарты, объёма оперативной памяти и других параметров компьютера,
    3. кеширование параметров игры с жёсткого диска,
    4. инициализация интерфейса,
    5. загрузка информации о сохранённых играх,
    6. выделение пространства в памяти для работы игры и др.

Детально: тело цикла

  • Функция «выполнить_расчет_игровой логики»
    Одна из самых больших и сложных функций в игре. Здесь содержится функционал самого разного калибра: от функции обработки нажатия клавиш, размером в около 1000 строк, до функций расчёта искусственного интеллекта (ИИ), которые занимают тысячи строк в сотнях файлов. Определённо, весь список функционала привести невозможно — игровая логика и её код отличается даже у двух игр с одинаковой тематикой.
    Что содержится в функции:
    1. обработка нажатия клавиш игроком, реакция на управление,
    2. расчёт логики ИИ,
    3. обработка скриптов,
    4. расчёт физики объектов,
    5. вычисление координат объектов в игровом мире,
    6. применение анимаций,
    7. генерация и обработка звука.
  • Функция «нарисовать_кадр»
    Эта функция удовлетворяет самым высоким требованиям по скорости выполнения. Здесь собирается масса данных лишь с одной целью: нарисовать кадр игры как можно быстрее.
    В этой части игры выполняется:
    1. Обработка информации об объектах, которые попадают в кадр,
    2. Определение проекций объектов на плоскость кадра, какой предмет что перекрывает и т.п.,
    3. На объекты накладываются текстуры,
    4. Обрабатываются эффекты рельефа и материалов поверхностей. От этого зависит взаимодействие света с ней. Свет будет отражаться, если поверхность глянцевая, рассеиваться, если матовая, или преломляться, если она прозрачная.
    5. Далее производится вычисление и накладывание теней,
    6. Обработка данных, которые связаны с интерфейсом игры, его положением в кадре, информация там отображается и т.п.
    7. Заключительной операцией становится вычисление графическим процессором цвета и яркости каждого пикселя на экране.
    8. Графический процессор вычисляет цвет каждого пикселя на экране менее чем за 1/60 = 0.167 секунды, когда игра работает в 60 кадров в секунду. Высокие требования к скорости становятся очевидными, если учесть, что на Full-HD мониторе 1920 * 1080 = 2 073 600 пикселей.

Детально: завершение игры

  • Функция “Завершить_игру”:
    1. Освободить пространство в видео- и оперативной памяти
    2. Закрыть служебные файлы игры
    3. Подготовить игру к завершению
    4. Корректно завершить программу и сообщить об этом операционной системе

Задание

Теперь вы знакомы с основами того, из чего состоит игра. Это поможет понять структуру игры в целом. Для закрепления материала, попробуйте написать простейшую игру. Игрок передвигает квадрат по окну игры. Игра содержит четыре счётчика. Каждый из них считает сколько раз квадрат коснулся края экрана: один — количество касаний верхней границы, второй – правой границы и т.д. После закрытия игры вывести значения счётчиков в консоль.

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