P
P
Programep2018-04-02 20:40:27
Browsers
Programep, 2018-04-02 20:40:27

How to sync players in a browser based turn based game?

Здравствуйте! Подскажите, пожалуйста, как можно решить проблему с синхронизацией в такой игре.
Вот что у меня уже готово и более менее работает.
1. Клиенты заходят в игру и после того, как игра началась запускаются следующие процедуры:
1.1. каждые 10 секунд отправляют запросы серверу: завершил ли ход соперник?
1.2. у игроков стартует в обратный отсчет таймер конца хода - 90 секунд;
1.3. начинают считаться игровые такты в каждом из клиентов игроков. Т. е. каждые 10 секунд значение переменной игрового такта увеличивается на 1.
2. Сервер каждые 10 секунд увеличивает у себя игровые такты на 1.
3. Если клиент игрок получает сообщение о том, что очередь хода перешла к нему, то клиент обновляет и показывает данные о ходе в следующем игровом такте.
Сейчас вроде бы все работает, но таймеры на клиентах игроков бывает уходят в минус.
Может быть попробовать отправлять данные чаще чем раз в 10 секунд?
Клиент написан на angular. Сервер на php. Думаю может быть не те технологии для разработки выбраны?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
T
ThunderCat, 2018-04-02
@ThunderCat Куратор тега Веб-разработка

Сейчас вроде бы все работает, но таймеры на клиентах игроков бывает уходят в минус.

Что мешает останавливать таймер в 0? Если ноль то автоматически считать что оппонент сделал/пропустил ход, на всякий случай принудительно проверит что на сервере произошло(ходил ли игрок) и передать ход.

Руслан ., 2018-04-02
@LaRN

Можно сделать наоборот. Не использовать таймер обратного отсчёта, но в момент начала хода рассчитать время его окончания и сравнивать по таймеру текущее время с рассчитанным. Как только рассчитанное время наступило спросить у сервера текущее состояние игры. Такой вариант позволит сгладить фризы таймера на клиенте.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question