Найти в Дзене
ZDG

Прогресс игры Mage Rage: компоненты и сложности

Предыдущие части с начала: С чего начать писать игру

По списку сейчас полагается вписать в диздок компоненты, из которых будет сделана игра. Я ещё не решил про них, у меня есть идея сделать её на Python, на C и на чистом JavaScript, но всё будет зависеть от реальных тестов производительности. Допустим, пока ради примера я напишу так:

Компоненты

Игра будет написана на языке C с ипользованием кроссплатформенной графической библиотеки SDL2, и будет транслирована в JavaScript с помощью Emscripten.

Таким образом, получатся две версии игры: нативная (для Windows / Linux десктопа) и браузерная (для браузеров и возможно телефонов).

Потребуются следующие компоненты:

  1. Компилятор языка C
  2. Среда разработки для языка C
  3. Библиотека SDL2
  4. Emscripten

То есть всё это нужно скачать, установить, разобраться как работает, проверить в работе. В частности, от SDL2 требуется получить некий графический примитив на экране, а от Emscripten требуется получить JS-версию, которая запустилась бы в браузере.

После этого можно будет считать, что (почти) всё хорошо, и спокойно делать игру.

Я пока что установил VS Code, g++ и SDL2. Но прототип игры продолжаю писать на чистом JS. В данный момент необходимо решить следующую задачу: монстры должны стремиться к игроку, а для этого им нужно уметь обходить препятствия любой формы. Я не решал раньше именно такой задачи, поэтому придумываю всё с нуля (искать готовые решения тоже не хочу).

Я исхожу из следующих соображений:

  1. Монстр проводит прямую линию от себя до игрока
  2. Если эта линия пересекается с каким-либо квадратом карты, который является препятствием, нужно определить, какому контуру принадлежит этот квадрат, и построить путь в обход контура.

Для этого я заранее обрабатываю карту, находя на ней связные области и выстраивая вокруг них контуры. Вся эта информация будет храниться вместе с картой.

Идея состоит в том, что когда обнаружится мешающий проходу контур, то нужно будет найти две точки на нём: первая точка это та, от которой до монстра есть прямая линия, вторая точка это та, от которой до игрока есть прямая линия. Желательно, чтобы это была одна и та же точка. Монстру надо будет по прямой дойти до своей точки, а затем совершить обход контура по кратчайшей траектории, чтобы попасть в ту точку, от которой линия ведет к игроку. Детальный алгоритм пока не продуман, но кажется, имеет шансы на успех.

Кроме того, мне нужно ещё реализовать функцию, которая вычисляет пересечение линии и прямоугольника.

Почему я должен сделать её сам, а не воспользоваться готовой библиотекой? Об этом – в следующих выпусках.