@Darkzenon

Создание прототипа серверной игры?

Приветствую.
Задался вопросом создать игру на android с сервером на raspberry / ПК.

Был вдохновлен статьей https://www.ibm.com/developerworks/ru/library/x-an...
"создание сетевой игры крестики нолики"
Но в моей задумке клиенты должны нажимать кто быстрее или учитываться очередность нажатия.
в Статье связка, SQL сервер, PHP обработчик c xml выводом, android приложение.
Вопрос знатокам, можно ли реализовать на данной связке подключение нескольких клиентов с учетом кто быстрее нажал кнопку. или есть куда более гуманные решения.
С такими технологиями не сталкивался поэтому спрашиваю гуру.

upd0. расстояние все в одной комнате с телефонов или планшетов. т.е. ping будет +- идентичен.
upd1. Если представить на практике. что-то вроде угадай мелодию на 10-20 юзеров. итого 1-20 клиентов. как только звучит музыка нужно нажать кнопку угадаю и сказать за какую сумму. принцип аукциона. кто первый и кто больше того и тапки. У меня сомнение на счет php и xml, что это будет слишком медленно.
  • Вопрос задан
  • 458 просмотров
Решения вопроса 1
bitver
@bitver
Проще простого же открыть TCP сокет и играть через него по json. На чём реализовывать? Языков поддерживающих такое очень много.

чуть чуть оффтоп
Если игра - это просто нажать на кнопку, при чем это всё происходит в локальной сети, то самый простой вариант - это сделать веб-приложение и юзать Websocket.

В чём плюсы такого:
  • На реализацию уйдёт не больше суток
  • Если открывать сокет во время "старта игры", то технически все соединения открыты и при клике на кнопку время на открытие сокета уже не будет тратиться
  • Удобная "установка" приложения: зашёл с браузера по ip:port своего сервака и ты уже в игре
  • Кроссплатформа
  • Придумать самому...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
saboteur_kiev
@saboteur_kiev
software engineer
Можно просто сделать во время подключения клиентов сверку по времени, хранить локальное время каждого игрока, затем проверять кот быстрее нажал по timestamp (приходит от клиента)
Ответ написан
abyrkov
@abyrkov
JavaScripter
Никак. На сервере будут проблемы с не моментальным коннектом, а на клиенте все запросто сломать.
Ответ написан
Комментировать
@xfg
Необходимо, чтобы сервер учитывал время сетевой задержки (latency). Для этого на стороне сервера необходимо создать timestamp и вычесть latency, чтобы получить реальное время нажатия кнопки клиентом. Далее остается сравнить таймштампы двух игроков и выявить победителя. Без учета latency тот у кого короче маршрут следования пакета, тот и в приоритете. Можете почитать о проблемах сетевых реалтайм игр, там обо этом есть.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Добавлю к Никита :
Можно через heartbeat-ping постоянно определять динамически задержку до всех клиентов (latency). И ссылаясь на самый высокий пинг, делать корректировку времени на клиенте и проверять получение всех пакетов вместе с временем нажатия timestamp.
Если дельта время нажатия и времени прихода не соответствует пингу heartbeat и разница превышает сигму-погрешность - значит это читер.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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