Aviso Legal; Eu não fiz muito com java e a plataforma android.
No entanto, minha experiência mais extensa com os idiomas '.net' nas plataformas Windows Mobile, juntamente com a plataforma Windows, é que entre 75 e 90% de todo o código necessário para criar e manter uma conexão de dados de rede ou Bluetooth são mantidos / com suporte no sistema operacional ou nas bibliotecas que precisariam acessar o hardware.
Até agora, isso também parece verdade no Android, com o SO expondo métodos para criar conexões de dados via Bluetooth ou internet, além de ativar / desativar o respectivo hardware.
Eu imaginaria que o Bluetooth seria o método preferido de conexão, pois esse seria o menos caro para implementar (sem servidores). E permita uma reunião / jogo mais local. O Bluetooth é bastante fácil de usar. Ele funciona de maneira semelhante aos soquetes de rede normais quando você sabe a qual dispositivo deseja se conectar.
Os outros estão corretos, pois o Bluetooth v2.0 / v2.1 atualmente não é capaz de suportar grandes cargas de dados. Isso mudará com o eventual spread da v3.0 e superior. e existem maneiras de contornar essa limitação.
Por enquanto, embora exista um conceito simples, solução ainda complexa, que você pode querer experimentar. Uso-o há algum tempo, é semelhante ponto a ponto, mas envolve ter o jogo hospedado em todos os dispositivos simultaneamente. Dessa forma, se uma conexão for temporariamente perdida, desacelerada ou um jogador cair por qualquer motivo, outros jogadores não serão afetados. Isso permite que os usuários que desistiram de entrar no jogo em andamento com pouca ou nenhuma interrupção para outros jogadores ou seu próprio jogo.
CON: Cada jogador realmente jogaria sua própria instância algo única do jogo, que seria vinculada aos outros jogadores para impedir que os jogos se desviassem muito da sincronia entre si.
CON: O código de suporte pode ser extenso / complexo e difícil de entender, dependendo do que você deseja alcançar.
PRO: Não é necessário servidor ou dispositivo central! Não é necessária manutenção de $$$.
PRO: Uma troca pesada de dados só ocorreria quando um jogador (re) ingressasse ou um jogo fosse inicializado. - Mesmo isso pode ser reduzido, garantindo que todos os jogos sejam gerados e progredindo da mesma maneira por todos os jogadores. POTENCIALMENTE reduzindo o consumo de energia que ocorre devido ao uso intenso da rede.
PRO: os dados se tornam menos sensíveis ao tempo, pois os dispositivos já teriam todos os dados necessários para manter o jogo sem os outros jogadores. Permitindo que você se concentre mais na experiência de jogo real para usuários individuais, em vez de um grupo de jogadores.
Faltava-me tempo para implementar um mecanismo de jogo completo que o utiliza. Os jogos que fiz foram limitados a recriar jogos semelhantes ao Monopoly e Uno, que pareciam funcionar extremamente bem.
O mais fácil foi o que emulou o Uno. Eu basicamente empilhei os decks dos perdedores depois que um jogador venceu, para garantir que ele vencesse todos os jogos. Em 95% das vezes, eu não sabia dizer que não estava jogando exatamente o mesmo jogo que todos os outros.
Comecei a construir um jogo semelhante ao Master of Orion II, mas o jogo em si era um pouco demais para eu realizar sozinho.