Можно здесь обсудить немного наивный теоретический вопрос по игровым движкам?
Пусть есть игра с дискретным временем (имеются в виду видимые невооружённым глазом "раунды") и дискретным пространством. Какие есть стратегии для разруливания синхронных процессов: например, несколько персонажей идут гуськом, не натыкаясь друг на друга, или два персонажа вместе пытаются ступить на одну и ту же клетку, или два лучника стреляют друг по другу и погибают?
Классическое решение из настольных игр — это использование инициативы, то есть "на самом деле" все ходят по-одному, а очерёдность внутри раунда определяется этой самой инициативой. Мне лично этот вариант не нравится по нескольким причинам:
- Во-первых, возражения идеологические. Порядок ходов — это такая угловатость, артефакт симуляции, и использование инициативы эту угловатость эксплицирует, поощрает её задрачивание со стороны игрока. Даже если соотносить инициативу с некой внутриигровой "скоростью реакции", метафора теряет смысл в случае катящегося камня или летящей стрелы, которые тоже должны подчиняться очерёдности ходов.
- Во-вторых, возможность совершить любое действие раньше своего противника только потому, что одна из характеристик у тебя выше — это какая-то imba ex machina, и её придётся компенсировать. В принципе, вариант с недетерминированной зависимостью очерёдности от инициативы решает эти проблемы, но привносит рандом.
- Проблема хождения гуськом в такой парадигме трудноразрешима, разве что строить систему отложенных действий.
В случае конкуренции клетку занимает более шустрый. Ситуация с лучниками разрешается выделением стрелы как самостоятельного объекта, который движется с не-бесконечной скоростью. Главное преимущество такого подхода в простоте реализации.
Есть вариант использования нецелых скоростей при целой длине шага. Например, персонаж со скоростью 3/2 двигается на один шаг в моменты 2/3, 4/3, 6/3=2,... Это также можно интерпретировать и как переменную инициативу, зависящую от дробной части величины 1/скорость. Если скорости объектов к тому же выбираются случайно из некоторого действительного диапазона, то п