Я разрабатываю стратегическую игру в реальном времени для курса информатики, который я прохожу. Кажется, что одним из более сложных аспектов является взаимодействие между клиентом и сервером, а также синхронизация. Я прочитал эту тему (включая 1500 лучников ), но я решил использовать клиент-серверный подход в отличие от других моделей (например, через локальную сеть).
Эта стратегия в реальном времени идет с некоторыми проблемами. К счастью, каждое действие игрока является детерминированным. Тем не менее, есть события, которые происходят в запланированные промежутки времени. Например, игра состоит из плиток, и когда игрок берет плитку, «уровень энергии», значение этой плитки, должно увеличиваться на единицу каждую секунду после ее получения. Это очень быстрое объяснение, которое должно оправдать мой случай использования.
Прямо сейчас я делаю тонких клиентов, которые просто отправляют пакеты на сервер и ждут ответа. Однако есть несколько проблем.
Когда игры между игроками переходят в эндшпиль, часто происходит более 50 событий в секунду (из-за запланированных событий, объясненных ранее, накапливание), и тогда начинают появляться ошибки синхронизации. Моя самая большая проблема заключается в том, что даже небольшое отклонение в состоянии между клиентами может означать разные решения, принимаемые клиентами, которые превращаются в совершенно разные игры. Другая проблема (которая сейчас не так важна) состоит в том, что существует задержка, и нужно ждать несколько миллисекунд, даже секунд после того, как они делают ход, чтобы увидеть результат.
Мне интересно, какие стратегии и алгоритмы я мог бы использовать, чтобы сделать это проще, быстрее и более приятным для конечного пользователя. Это особенно интересно, учитывая большое количество событий в секунду вместе с несколькими игроками в игре.
TL; DR делает RTS с> 50 событиями в секунду, как синхронизировать клиентов?