Android-игра для двух игроков, в которую можно играть в Интернете

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

Как сделать это возможным?

Я слышал о механизме C2DM. Соответствует ли он описанному мной сценарию и является ли он надежным?

Спасибо:)


person androidGuy    schedule 07.06.2011    source источник
comment
Еще одна возможность - SMS с указанием портов. Однако я только начинаю их использовать, поэтому я не могу говорить об оговорках.   -  person tugs    schedule 16.06.2011


Ответы (9)


Другой вариант - использовать какое-то мгновенное сообщение в качестве средства связи для приложения. Например, Используйте Asmack для подключения к XMPP, как GTalk. Предложите пользователю создать там учетную запись для вашей игры. И используйте его для отправки и получения команд через IM. Таким образом, вам не нужно будет настраивать посреднический сервер.

Это работает, если пользователь знает, с кем он играет. Чтобы собрать пользовательские данные и позволить им искать доступных игроков, вам все равно нужно настроить сервер. Чат IRC также может быть вариантом, чтобы избежать этого.

  • GTalk был просто примером. Вы также можете использовать любой IM или IRC.
person Aniket Awati    schedule 23.06.2011
comment
Спасибо, Аникет, последние несколько дней я пробовал использовать api с сервером openfire. Я закончил настройку сервера openfire и успешно отправил сообщения между двумя пользователями. Теперь проблема в том, как получить список пользователей, зарегистрированных в openfire. Мне это нужно. info, чтобы отобразить ее для пользователей, играющих в игру, чтобы они могли добавить их как frnds.Iam, используя встроенную базу данных сервера openfire. Теперь, как получить доступ к этой базе данных и получить всех пользователей на сервере openfire :) - person androidGuy; 23.06.2011
comment
извини, я не знаю, чувак с открытым огнем. :) - person Aniket Awati; 23.06.2011

Да, C2DM идеально подходит для этого типа игр. Это то, что я использую в своей собственной игре (http://www.chesspresso.net), которая является перепиской шахматный клиент для android.

На что следует обратить внимание при использовании C2DM:

  • Вы не отправляете информацию на устройства, вы уведомляете устройства о том, что был сделан ход. Вы не используете C2DM для передачи данных, вы используете его для уведомления о том, что что-то изменилось.

  • Он доступен для Android 2.2+, что является большинством устройств. Но если вы хотите поддерживать старые устройства, вам следует рассмотреть альтернативу. Я использую опрос для старых устройств.

  • Вы должны запросить доступ разработчика, а затем, когда ваше приложение будет готово, вы должны запросить статус производства. Если вы этого не сделаете, вы очень быстро достигнете квоты статуса разработчика после ее выпуска! Они очень щедры на производственную квоту, но вы должны объяснить, для чего вы ее используете, а также может потребоваться несколько недель, чтобы получить одобрение!

  • У ваших пользователей должна быть авторизованная учетная запись Google, иначе C2DM не будет работать. У большинства пользователей будет учетная запись, связанная с их устройством, но у некоторых нет. Это означает, что вы, возможно, захотите проверить наличие учетной записи, чтобы уведомить пользователя.

  • Это надежно, но время от времени устройству придется ждать сообщения. Иногда несколько минут. Обычно это мгновенно.

Надеюсь, это поможет!

ОБНОВЛЕНИЕ: C2DM устарел и заменен GCM от Google.

Кроме того, я настоятельно рекомендую рассмотреть другие варианты, поскольку привязка к конкретному API Google означает, что вы не сможете поддерживать внешние торговые площадки. В качестве альтернативы я сейчас изучаю Amazon SNS, а также буду искать Городской дирижабль. Возможно, существуют другие альтернативы, которые я еще не рассматривал для оценки.

ОБНОВЛЕНИЕ: обновление оценки push-уведомлений, не основанных на Google: Amazon SNS просто не является проектом для этой задачи, а Urban Airship для подавляющего большинства приложений слишком дорого обходится. К сожалению, все другие альтернативы также очень дороги, особенно если ваше приложение (например, мое) сильно зависит от push.

person Eurig Jones    schedule 20.06.2011
comment
Вы не используете C2DM для передачи данных, вы используете его для уведомления о том, что что-то изменилось., В чем причина этого? Почему бы не передавать данные с помощью C2DM? - person Pking; 08.02.2012
comment
Просто прочтите, что C2DM не дает никаких гарантий относительно доставки или порядка сообщений. Так, например, хотя вы можете использовать эту функцию, чтобы сообщить приложению обмена мгновенными сообщениями, что у пользователя есть новые сообщения, вы, вероятно, не стали бы использовать ее для передачи фактических сообщений. Полагаю, это отвечает на мой вопрос. - person Pking; 08.02.2012
comment
Я использую его в основном, чтобы сообщить устройству, что ему нужно получить. У вас есть только 1 КБ для игры. - person Eurig Jones; 08.02.2012

Хороший способ сделать это - использовать простое прямое TCP-соединение между одноранговыми узлами.

Если вы новичок в программировании сокетов на Java, попробуйте следующее:

Все о сокетах

person DallaRosa    schedule 07.06.2011
comment
Что делать, если одно устройство находится за NAT? IP-адрес не будет виден публично? Как с этим бороться? - person androidGuy; 10.06.2011
comment
В этом случае я бы порекомендовал пользователю купить доступ в Интернет. - person vipw; 16.06.2011
comment
@vipw: я попытался подключить два устройства через соединение 3G, проблема заключалась в том, что IP-адрес менялся так часто, что невозможно установить соединение. - person androidGuy; 16.06.2011
comment
Извините за поздний ответ. В своем ответе я имел в виду очень локальное и двухточечное решение. Простой способ сделать то, что вы хотите, - использовать сервер в качестве посредника между устройствами. Затем вы можете использовать опрос или какую-либо технологию push (например, C2DM) для проверки обновлений. Только не забывайте, что C2DM требует регистрации и поддерживается только устройствами 2.2+. - person DallaRosa; 22.06.2011

C2DM не предназначен для передачи информации, даже если она небольшая, как «лошадь в b4» или что-то в этом роде. Он предназначен для информирования устройства о чем-то, может быть, о новой версии документа или большем количестве статей на веб-сайте .. Подобные вещи .. Он не предназначен для связи устройства с устройством. А также может быть недостаточно быстрой для игры в шахматы в реальном времени.

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

person Marco Grassi    schedule 07.06.2011

IMHO, C2DM - это именно то, что вам нужно для шахматной игры; чтобы получить уведомление, когда оппонент сделает свою очередь (что может произойти через несколько минут / часов / дней?). Я обсуждал свою игру с несколькими разработчиками Google Android, и они заявили, что C2DM идеально подходит для этого. Однако вам нужно будет пройти через централизованный сервер (ну, не обязательно, но очень желательно), поскольку могут возникнуть проблемы с повторной синхронизацией состояния игры и т. Д. Беспокоитесь о «достижении лимита»? Ну, для начала мой c2dm acct ограничен "всего" 100 000 сообщений в день. Я думаю, ты покупаешь напитки, если попадешь в нее !!

person Richard Green    schedule 08.06.2011
comment
Спасибо, меня беспокоит надежность C2DM. Какую игру вы разработали, была ли эта пошаговая игра похожа на шахматы? Какова была задержка в C2DM? - person androidGuy; 16.06.2011
comment
Игра называется Barcode Beasties. В настоящее время я использую ужасную http-ссылку через Google Talk для обмена сообщениями в играх ... Было очень больно работать на устройствах 1.x И 2.x (не говорите мне о фильтрах намерений !!! ), но я наконец получил это и ... на той неделе .. Google объявил о C2DM. ГАААААААХХХХ !!!!! В любом случае ... задержку можно измерить в МИКРОСЕКУНДАХ .. Если сообщение c2dm не доходит до телефона менее чем за секунду, это медленно! Я не знаю точной цифры, но предполагаю, что в среднем около 0,5–0,7 секунды. Версия c2dm находится в стадии тестирования и скоро будет выпущена vvv. - person Richard Green; 16.06.2011
comment
О, и надежность ... Я никогда не терял правильно отправленное сообщение c2dm на сегодняшний день однако для шахматной игры я бы (только для ремня и подтяжек) также предлагал вариант синхронизации по запросу пользователя - я бы предположил в любом случае вам понадобится что-то подобное для телефонов ‹2.2. - person Richard Green; 16.06.2011
comment
Последнее от меня сообщение: если вы хотите увидеть c2dm в действии, загрузите написанное мной приложение под названием Vera Alert - market.android.com/details?id=com.fawepark.veralert - а затем отправьте http-запрос вроде это: vera-alert.appspot.com/stat?msg=Hello&recipient=XXXXX, где XXXXX - это код, представленный вам при запуске приложения. Я написал это приложение, чтобы люди могли связать свою систему домашней автоматизации со своим телефоном для почти немедленного оповещения, если заранее определенное событие происходит в их доме, но вы можете использовать его, чтобы увидеть c2dm в действии, если вам нужно. - person Richard Green; 16.06.2011
comment
+1 Я согласен, что C2DM - правильный путь в этой ситуации. Если вы хотите проверить его скорость, прежде чем внедрять его, попробуйте Chrome 2 Phone на своем устройстве Android. Я использую его в своем приложении для обмена сообщениями, и это невероятно быстро. Кроме того, соединение всегда остается активным, поэтому для его активности не требуется дополнительный заряд батареи. - person Glendon Trullinger; 17.06.2011

В шахматы часто играют по электронной почте. Вы могли бы это сделать.

Конечно, подойдет любая централизованная / федеративная система обмена сообщениями.

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

person vipw    schedule 16.06.2011
comment
Спасибо, не могли бы вы дать мне несколько полезных ссылок на jabber-клиенте и сервере? - person androidGuy; 16.06.2011

Google App Engine, если вы знаете Python или Java.

В качестве альтернативы сегодня широко используются два стиля API веб-приложений: SOAP XML и веб-службы RESTful.

Если вы знаете RoR, я бы рекомендовал использовать JSON / REST, потому что вы можете просто использовать Phusion Passenger с Apache для развертывания своего приложение. Бесплатно, очень просто и делает ваш сервер очень надежным.

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

Я также нашел библиотеку под названием mages, которая выглядит довольно многообещающей.

Удачи.

person expelledboy    schedule 16.06.2011

Я сделал это для своего онлайн-ролика в формате 2D: http://developingthedream.blogspot.com

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

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

person Miguel Morales    schedule 22.06.2011

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

person mobiledev Alex    schedule 16.06.2011