Понедельник, 11 Ноября 2024, 06:01

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Сервер для Tower Defence - реализация боя
1nt3g3rДата: Вторник, 02 Августа 2016, 12:57 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Добрый день!

Суть вопроса - есть игра, Tower Defence. Есть лабиринт из башенок, есть монстры, которые бегут между башенками. Башенки стреляют, и убивают монстров - ничего нового. Платформа - мобильные устройства (Android, iOS).

Игра мультиплеерная - то есть, игроки могут атаковать друг друга. Соответсвенно, есть центральный сервер, который просчитывает все бои. Сама система боя еще не реализована, я сомневаюсь, как лучше ее реализовать. Вопрос не в механике боя (это не есть проблема), а в том, как синхронизировать сервер и клиентов. Чтобы в реальном времени происходил (и отображался) один и тот же бой (те же монстры в тех же местах в разных игроков, например).

В чем может возникнуть проблема? Если на каждое действие (например, на выстрел башни) посылать клиенту сообщение про это (даже очень короткое, несколько байт), то на мобильных устройствах это будет лагать (пинг довольно большой, особенно если мобильный GPRS или даже 3G). Поэтому "в лоб" проблему так не решить.

Я думаю сделать так - и на клиенте, и на сервере сделать два одинаковых генератора псевдослучайных чисел. Когда начинается бой - сервер генерирует случайное число, и полностью моделирует у себя бой, записывает результат в базу данных. Это же число он отсылает клиенту. У клиента есть такой же генератор псевдослучайных чисел, как у сервера, и инициализирует он его числом, присланным от сервера. То есть, клиент может воспроизвести бой точно такой же, как он был сгенерирован на сервере. Все, что нужно клиенту - это показать бой.

Я постарался пояснить идею доступно, но не уверен, получилось ли. Если есть вопросы - задавайте, пожалуйста.

Если у кого-то есть опыт реализации подобного - тоже отпишите. С удовольствием пообщаюсь с людьми, которые "в теме".


Нужно писать такие игры, чтобы в них было интересно играть самому
OpenGOOДата: Вторник, 02 Августа 2016, 13:42 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
Статья про синхронизацию (на английском)

Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
1nt3g3rДата: Вторник, 02 Августа 2016, 14:17 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Спасибо за статью. Прочел, здесь изложу основные моменты - если кто-то заинтересуется, не нужно будет переводить.

Основная идея - да, не нужно на каждый чих слать пакеты. Достаточно лишь синхронизировать ввод игрока. Код, который отвечает за бой\передвижение, должен быть абсолютно идентичным на обеих машинах, все генераторы случайных чисел должны быть инициализированы одинаковыми значениями. То есть, в принципе, моя идея верная - на клиенте и на сервере должен быть один и тот же код.

Сложность может возникнуть лишь из числами с плавающей точкой - они могут считаться чуть-чуть иначе на разных машинах (расхождение миллионные доли, но все же может быть). Для этого автор статьи использовал свою арифметику с плавающей точкой - и переписывал множество библиотек (физический движок, например) под свою реализацию.

Я пишу на Java и C#, поэтому, боюсь, этот способ может не подойти. Буду искать пути, как использовать родные float-ты.

В любом случае, спасибо за статью, она прояснила основные моменты.


Нужно писать такие игры, чтобы в них было интересно играть самому
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг