Ок. Жанр выбрали. Идею придумали. Сформулировали ее в одном предложении слов так на 10. Придумали фичу(и), которая должна выделять нашу игру. Что дальше? А дальше вы должны поиграть в свою игру.
В своей голове. Запускаю MyGame.exe. Открывается меню, где я нажимаю кнопку “Загрузить игру”, открывается список сохранений, выбираю интересующее меня. И так далее. Это, конечно, сложно сделать, однако заставляет вас продумать общую канву игры и четко выразить то, что вы хотите сделать. Потому что вариант “я делаю шутер” вам ни о чем не говорит и никак не помогает перейти непосредственно к разработке. Вы не знаете, что вы хотите получить в качестве результата. И сложно сказать, как сделать то, не знаю что.
Все эти пункты желательно выписать в виде какого-то списка действий.
Пример:
Теперь нужно сделать выводы из этого списка. Что в вашей игре есть?
Что еще мы сделали? Посмотрели сохранения, загрузили одно из них. Получается, к примеру, есть
Т.е. отдельный кусок нашего проекта, набор классов, грубо говоря, задача которого - обеспечивать работу с сохранениями.
В каждом сохранении хранится состояние всего мира на момент сохранения - позиция персонажа, его инвентарь и т.д. Эти сохранения хранятся на жестком диске. Т.е. система сохранений должна создавать файлы на жестком диске и записывать туда нужные данные в каком-то формате. В каком? Допустим, json. И так далее.
Таким образом у вас получается набор различных систем, требований к ним и к игре, которые вы хотите реализовать. По сути, ТЗ. Более того, разрабатывая одну из систем, мы помним, что она будет существовать параллельно с определенным набором других систем и нам будет проще её создавать. И мы можем сказать, какая система должна появиться раньше других, какая - позже, какая система от чего зависит. Например, система сохранений может появиться позже того, как будет создан инвентарь, персонаж, игровой мир.
Отлично. Мы знаем чего хотим. Это не 100% список, он будет дополняться, меняться (потенциально, полностью), но уже что-то с чем можно работать.
Ок, у нас есть список систем, но с чего начать его оформлять? Вот примерная структура, которую можно взять за основу и заполнить для своей игры. Не обязательно следовать ей один в один - это отправная точка, а не стандарт.
Ну, грубо говоря - какие системы нужны вашей игре? Примеры систем:
Т.е. что нужно сделать в первую очередь, чтобы игра хотя бы минимально работала? Что можно добавить позже?
Приоритеты - важная вещь. Без них легко увязнуть в деталях: полировать меню настроек, когда персонаж ещё не умеет прыгать. Сначала - играбельное ядро, потом - всё остальное.
И ещё одно правило, которое стоит запомнить: сначала геймплей и код, потом - графика, звук, сюжет. Квадратик, который бегает, прыгает и сталкивается со стенами - это уже играбельный прототип. Красивый спрайт, который стоит на месте и ни с чем не взаимодействует - это картинка, а не игра.
Графику можно заменить цветными прямоугольниками. Звук можно добавить в конце. Сюжет можно написать, когда механики уже работают. А вот если код не работает - никакая графика это не исправит.
ТЗ готово - теперь нужно превратить его в работающий код. Следующие шаги:
| Что | Где подробнее |
|---|---|
| Как организовать код: MVC, ECS, события | Архитектура |
| Какие алгоритмы понадобятся для вашего жанра | Алгоритмы в играх |
| Основной цикл: update, render, deltaTime | Игровой цикл |
| Типичные ошибки первого проекта | Типичные ошибки |