Я розробляю стратегію гри в реальному часі для курсу інформатики, який я беру. Одним із важчих аспектів цього, здається, є мережеве з'єднання клієнт-сервер та синхронізація. Я читав цю тему (включаючи 1500 лучників ), але вирішив застосувати підхід клієнт-сервер на відміну від інших моделей (наприклад, через локальну мережу).
Ця стратегічна гра в реальному часі має деякі проблеми. На щастя, кожна дія, яку грає, є детермінованою. Однак є події, які відбуваються за запланованими інтервалами. Наприклад, гра складається з плиток, і коли гравець бере плитку, 'рівень енергії', значення на цій плитці, повинно зростати кожну секунду після її отримання. Це дуже швидке пояснення, яке має виправдати мій випадок використання.
Зараз я роблю тонких клієнтів, які просто надсилають пакети на сервер і чекають відповіді. Однак є кілька проблем.
Коли ігри між гравцями перетворюються на ендгра, часто відбувається більше 50 подій в секунду (через заплановані події, пояснені раніше, накопичення), і тоді починають з'являтися помилки синхронізації. Моя найбільша проблема полягає в тому, що навіть невелике відхилення в стані між клієнтами може означати різні рішення, які приймають клієнти, і це сніжний ком в абсолютно окремі ігри. Ще одна проблема (яка зараз не так важлива) полягає в тому, що існує затримка, і потрібно чекати кілька мілісекунд, навіть секунд після того, як вони рухаються, щоб побачити результат.
Мені цікаво, які стратегії та алгоритми я міг би використати, щоб зробити це простішим, швидшим та приємнішим для кінцевого споживача. Це особливо цікаво, враховуючи велику кількість подій в секунду разом з кількома гравцями за гру.
TL; DR робить RTS з> 50 подіями в секунду, як синхронізувати клієнтів?