Предыдущие части с начала: С чего начать писать игру
По списку сейчас полагается вписать в диздок компоненты, из которых будет сделана игра. Я ещё не решил про них, у меня есть идея сделать её на Python, на C и на чистом JavaScript, но всё будет зависеть от реальных тестов производительности. Допустим, пока ради примера я напишу так:
Компоненты
Игра будет написана на языке C с ипользованием кроссплатформенной графической библиотеки SDL2, и будет транслирована в JavaScript с помощью Emscripten.
Таким образом, получатся две версии игры: нативная (для Windows / Linux десктопа) и браузерная (для браузеров и возможно телефонов).
Потребуются следующие компоненты:
- Компилятор языка C
- Среда разработки для языка C
- Библиотека SDL2
- Emscripten
То есть всё это нужно скачать, установить, разобраться как работает, проверить в работе. В частности, от SDL2 требуется получить некий графический примитив на экране, а от Emscripten требуется получить JS-версию, которая запустилась бы в браузере.
После этого можно будет считать, что (почти) всё хорошо, и спокойно делать игру.
Я пока что установил VS Code, g++ и SDL2. Но прототип игры продолжаю писать на чистом JS. В данный момент необходимо решить следующую задачу: монстры должны стремиться к игроку, а для этого им нужно уметь обходить препятствия любой формы. Я не решал раньше именно такой задачи, поэтому придумываю всё с нуля (искать готовые решения тоже не хочу).
Я исхожу из следующих соображений:
- Монстр проводит прямую линию от себя до игрока
- Если эта линия пересекается с каким-либо квадратом карты, который является препятствием, нужно определить, какому контуру принадлежит этот квадрат, и построить путь в обход контура.
Для этого я заранее обрабатываю карту, находя на ней связные области и выстраивая вокруг них контуры. Вся эта информация будет храниться вместе с картой.
Идея состоит в том, что когда обнаружится мешающий проходу контур, то нужно будет найти две точки на нём: первая точка это та, от которой до монстра есть прямая линия, вторая точка это та, от которой до игрока есть прямая линия. Желательно, чтобы это была одна и та же точка. Монстру надо будет по прямой дойти до своей точки, а затем совершить обход контура по кратчайшей траектории, чтобы попасть в ту точку, от которой линия ведет к игроку. Детальный алгоритм пока не продуман, но кажется, имеет шансы на успех.
Кроме того, мне нужно ещё реализовать функцию, которая вычисляет пересечение линии и прямоугольника.
Почему я должен сделать её сам, а не воспользоваться готовой библиотекой? Об этом – в следующих выпусках.