Лучшее решение для многопользовательской игры в реальном времени Android [закрыт]

11

Я планирую сделать многопользовательскую игру в реальном времени для Android (2-8 игроков) и считаю, какое решение для многопользовательской организации является лучшим:

  1. Сделать сервер на компьютере, и клиент на мобильный, все communition идут через сервер (Clientâ -> PC SERVER -> Все клиенты)

  2. Использование Bluetooth, я еще не использовал, и я не знаю, это его трудно сделать мультиплеер на блютуз

  3. Сделать сервер на одном из устройств, и другие устройства подключаются (через сеть, но я не знаю, это трудно проблемы Resolve с устройствами через NAT?)

  4. Другое решение?

Piotrek
источник
3
Планируете ли вы, что это будет игра только для местных жителей или вы хотите, чтобы люди могли играть с людьми через Интернет? Вы хостинг машины для игр?
Тетрадь
Я выбираю небольшую многопользовательскую игру, планирую сделать игру, в которой люди встречаются в комнате, и могу играть в одну и ту же игру (это тема моего тезиса: многопользовательская на мобильной платформе). Но если кто - то есть интересное решение для игры через Интернет Я также заинтересован.
пиотрек

Ответы:

2

Отказ от ответственности; Я не делал много с Java и андроид платформы.

Однако мой более обширный опыт работы с языками «.net» на окнах мобильных платформ, наряду с платформой окон, является то, что хороший 75-90% всего кода, необходимые для создания и поддержания Bluetooth или подключение к сети передачи данных поддерживаются / поддерживается ОС или библиотек, которые были бы необходимость доступа к оборудованию.

До сих пор это также кажется верным для Android, поскольку ОС предоставляет методы для создания соединений для передачи данных через Bluetooth или Интернет, а также включает / отключает соответствующее оборудование.

Я полагаю, что Bluetooth будет предпочтительным способом подключения, так как это будет наименее затратным для реализации (без серверов). И позволяют более местного сбора / игры. Bluetooth довольно прост в использовании. он работает аналогично обычным сетевым сокетам, когда вы знаете, к какому устройству вы хотите подключиться.

Остальные являются правильными в том, что v2.0 Bluetooth / v2.1 в настоящее время не способны поддержки больших нагрузок данных. Это изменится с возможным распространением v3.0 и выше. и есть способы обойти это ограничение.

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

CON: Каждый игрок на самом деле играл бы в свой уникальный экземпляр игры, который был бы связан с другими игроками, чтобы игры не отклонялись слишком далеко друг от друга.

CON: код поддержки может быть обширным / сложным и сложным, чтобы обернуть голову в зависимости от того, чего вы хотите достичь.

PRO: не требуется центральный сервер или устройство! $$$ содержание не требуется.

PRO: Тяжелое обмен данными будет происходить только тогда , когда игрок (вос) присоединился, или игра была инициализирована. - Даже это может быть уменьшен путем обеспечения того , чтобы все игры будут генерироваться и прогрессировать так же , как все игроки. ПОТЕНЦИАЛЬНО снижает потребление энергии, которое происходит из-за интенсивного использования сети.

PRO: Данные становится менее чувствительным время, так как эти устройства будут уже есть все данные , которые они требуют , чтобы сохранить игру собирается без других игроков. Позволяет вам больше сосредоточиться на реальном игровом опыте для отдельных пользователей, а не для группы игроков.

Мне не хватило времени на реализацию полноценного игрового движка, который бы использовал это. Игры, которые я сделал, были ограничены воссозданием игр, похожих на Monopoly и Uno, которые, казалось, работали очень хорошо.

Самый простой был один, который эмулируется Uno. Я в основном сложены палубы проигравших после игрок выиграл, чтобы убедиться, что игрок выиграл все игры. В 95% случаев я не мог сказать, что играю не в ту же игру, что и все остальные.

Я начал создавать игру, похожую на Master of Orion II, но сама игра была для меня немного сложнее.

Grothos
источник
9

Это в значительной степени зависит от игры, но некоторые друзья и я думал о тех же вопросах только пару месяцев назад, и вот что мы решили. Я снова в плюсе и минусе.

Компьютер на основе сервера

Pros

  • Испытано и верно
  • Масштабируемость

Cons

  • Нужно написать «мультисервер», в котором можно одновременно разместить несколько игр. Это, вероятно, будет использовать немного другую технологию, чем ваш телефон Android. Вы все еще можете использовать Java, но вы можете все еще использовать андроид пакеты?
  • Может быть дорогим, чтобы работать, и поддерживать
  • Вы могли бы потянуть его один день по целому ряду причин. Вентиляторы не могут быть счастливы, если сервер выходит из строя всего пару месяцев после покупки игры.

Peer To Peer с одним из них под контролем

Pros

  • Ad-Hoc-сервера, где друзья могут присоединиться к другим друзьям, когда они хотят
  • Мало или нет эксплуатационных расходов с вашей стороны
  • Код сервера будет смешан с кодом клиента, не нужно писать отдельное приложение для сервера.

Cons

  • Нужно написать простой централизованный peer-finder. (Я сделал мину в PHP + MySQL в пару сотен простых линий)
  • Серверы работают на телефонах. Телефоны могут быть медленными. Все ли целевые телефоны смогут принимать игры?
  • Что произойдет, если сервер телефон обрывается?
  • Легче, чем клиент-сервер для хакеров, чтобы получить в

Что касается Bluetooth, я ожидаю, что он будет похож на метод одноранговой связи выше. Я также не думаю, что у вас должны быть какие-либо проблемы с NAT.

РЕДАКТИРОВАТЬ : Это также в значительной степени зависит от вашего опыта. Я бы начал с написания некоторых сравнительно небольших клиент-серверных игр, чтобы сначала научиться работать с сетью. Это сложная тема, которую легко ошибиться с первого раза. Я получил право прямо с третьей попытки. Следуйте известным схемам и не пытайтесь придумать что-то самостоятельно.

Джон Макдональд
источник
Я не думаю, что это может быть сделано через Bluetooth, я сомневаюсь, что он поддерживает трансляции: AFAIK он только соединяет один хост с другим, имеет очень низкое максимальное количество соединений и работает медленно.
о0 '.
4

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

Имея это в виду, поймите, что вы должны минимизировать влияние отключенного пользователя. Во втором варианте вы по сути сделали телефон сервером. Если этот телефон станет MIA, игра фактически закончена для всех игроков.

Джон рассказал о плюсах и минусах традиционной клиентской <-> серверной архитектуры. Это, пожалуй, самый надежный способ обеспечить надежный многопользовательский опыт для всех.

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

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

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

notlesh
источник