@Programep

Как синхронизировать игроков в браузерной пошаговой игре?

Здравствуйте! Подскажите, пожалуйста, как можно решить проблему с синхронизацией в такой игре.
Вот что у меня уже готово и более менее работает.
1. Клиенты заходят в игру и после того, как игра началась запускаются следующие процедуры:
1.1. каждые 10 секунд отправляют запросы серверу: завершил ли ход соперник?
1.2. у игроков стартует в обратный отсчет таймер конца хода - 90 секунд;
1.3. начинают считаться игровые такты в каждом из клиентов игроков. Т. е. каждые 10 секунд значение переменной игрового такта увеличивается на 1.
2. Сервер каждые 10 секунд увеличивает у себя игровые такты на 1.
3. Если клиент игрок получает сообщение о том, что очередь хода перешла к нему, то клиент обновляет и показывает данные о ходе в следующем игровом такте.
Сейчас вроде бы все работает, но таймеры на клиентах игроков бывает уходят в минус.
Может быть попробовать отправлять данные чаще чем раз в 10 секунд?
Клиент написан на angular. Сервер на php. Думаю может быть не те технологии для разработки выбраны?
  • Вопрос задан
  • 306 просмотров
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега Веб-разработка
{PHP, MySql, HTML, JS, CSS} developer
Сейчас вроде бы все работает, но таймеры на клиентах игроков бывает уходят в минус.

Что мешает останавливать таймер в 0? Если ноль то автоматически считать что оппонент сделал/пропустил ход, на всякий случай принудительно проверит что на сервере произошло(ходил ли игрок) и передать ход.
Ответ написан
LaRN
@LaRN
Senior Developer
Можно сделать наоборот. Не использовать таймер обратного отсчёта, но в момент начала хода рассчитать время его окончания и сравнивать по таймеру текущее время с рассчитанным. Как только рассчитанное время наступило спросить у сервера текущее состояние игры. Такой вариант позволит сгладить фризы таймера на клиенте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы