@MaxZalm

Как организовать серверную (tcp) логику с примитивной игре?

Добрый день!
Решили с другом создать примитивнейшую игру, программировать умеем, но с играми раньше не сталкивались
идея очень простая, есть поле 100 на 100 клеток, 4 игрока, значит они занимают 4 клетки

Зажал кнопку вперед, и движешься вперед со скоростью 3 клетки в секунду например, в этом время другие игроки по идее должны тоже это движение видеть и так же могут двигаться)

вопрос в том, как алгоритмически это реализовать? например я двинулся, сообщил серверу, и сервер всем заново карту разослал с позициями игроков? или только изменения слать? или как вообще

Помогите пожалуйста хотя бы понять в какую сторону двигаться)
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
В простой реализации всё просто. Сорри за тавтологию, но это реально так. Клиент посылает свою позицию серверу (абсолютные координаты) сразу послед изменения. Сервер посылает эти координаты остальным.

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

Также есть всякие клиентские оптимизации, когда пакеты приходят с разной задержкой, но движение объекта при этом выглядит плавно. Красота тоже требует жертв.

P.S. tcp не советую. Если данных мало (т.е. 4 игрока и 0 других объектов), то без разницы. Но на большом трафике даже 0.5% потерь пакетов приведет к лагам. Так что если планируете расти, лучше сразу выбрать udp (хотя вторым соединением по tcp можно административные задачи решать - поиск игроков, создание сессии и т.д.)

P.P.S. Здесь неплохо иллюстрируется проблема синхронизации.
Ответ написан
Ваш ответ на вопрос

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

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