Beruflich Dokumente
Kultur Dokumente
Introduo3
Os Conceitos de Jogo
Achievements
Regras para pontuao
Ganhando pontos de experincia (XP)
Leaderboards
Mltiplas leaderboards
Leaderboards pblicos e sociais
Real-Time Multiplayer
Iniciando uma sala
Configurao da sala
Os participantes
Auto-matching
Convites
Gameplay
Fechamento da sala
Turn-based Multiplayer
Events e Quests
Saved Games
Imagens de capa
Descrio
Cota
Proteo de escrita/leitura
Suporte offline
Resoluo de conflitos
Limites
9
10
14
15
16
18
19
20
22
24
25
25
26
26
28
29
33
38
39
40
40
40
41
42
43
44
45
46
50
51
53
55
57
58
60
61
62
63
66
71
75
75
77
87
87
90
96
97
98
Concluso
99
Introduo
Este ebook tem o objetivo de esclarecer e dar o pontap inicial em como aproveitar
os recursos e servios disponibilizados pelo Google Play Games para impulsionar e
melhorar seus jogos.
Antes de mais nada, existem dois conceitos que devemos entender: o Google Play
Games e o Play Games Services. No final, eles so a mesma coisa, mas importante
conhecer a responsabilidade de cada um separadamente primeiro para depois entender o todo.
Em resumo, ele um painel grfico onde os jogadores podem encontrar tudo o que
precisam sobre os jogos em um s local e tambm para amigos se divertirem juntos.
Para finalizar, o Google Play Games uma ferramenta muito poderosa tanto para os
usurios como para os desenvolvedores de jogos.
Ele d aos jogadores e desenvolvedores a sua prpria interface para monitorar e interagir com seus jogos em um s lugar. A plataforma grtis e est crescendo e melhorando cada vez mais. Daqui um tempo ela se tornar um aplicativo essencial para
qualquer jogador mobile.
Voc pode utilizar esses recursos tanto no Android como no iOS ou em qualquer outro dispositivo.
Todos os servios foram construdos utilizando as melhores tecnologias do Google
para mobile e para a nuvem, assim voc pode se concentrar no que voc realmente
bom como desenvolvedor de jogos: a criao de grandes experincias de jogos
para os usurios.
Os Conceitos de Jogo
O Play Games Services d suporte a vrias necessidades e conceitos no mundo dos
jogos. Cada um tratado como um servio diferente que pode ser implementado de
forma separada.
Voc no obrigado a utilizar todos os servios, mas muito importante que voc
saiba que eles existem para poder agregar em seu jogo em um futuro.
Nesse tpico vamos entender um pouco de cada conceito e como o Play Games Services trata eles dentro da plataforma do Google.
Achievements
Esse tipo de mecnica pode ser uma tima maneira de aumentar o envolvimento dos
usurios dentro do seu jogo.
Voc pode implementar os achievements em seu jogo para incentivar os jogadores
a alcanar alguns recursos que eles no tm acesso normalmente ou qualquer outro
desafio que mantenha o usurio a continuar tentando atingir seus objetivos dentro
do game.
Os achievements tambm podem ser uma forma divertida para os jogadores poderem comparar o seu progresso uns com os outros e gerar uma competio.
10
Como funciona?
Os achievements podem ser atribudos ao jogador de forma padro ou incremental.
Geralmente, um achievement incremental envolve um jogador fazendo progresso
gradual para atingir seus objetivos durante um longo perodo de tempo.
Conforme o usurio progride para atingir o achievement, voc pode guardar o progresso parcial do jogador no Play Games Services.
O Play Games Services mantm um registro do progresso dentro do jogo, avisa quando o jogador preenche os critrios necessrios para desbloquear esse achievement
e diz o quo longe ele est de cumprir esse objetivo.
11
Os achievements incrementais so cumulativos entre as sesses de jogo e o progresso no pode ser removido ou redefinido dentro do jogo.
Por exemplo, Ganhar 50 jogos considerado como um achievement incremental,
mas Ganhar 3 jogos seguidos no seria, porque o o progresso do jogador seria redefinido quando ele perdesse um jogo.
Tenha 5.000 fichas de poker tambm no seria, pois um jogador pode ganhar e
perder as fichas no decorrer dos jogos. Ao criar um achievement incremental, necessrio definir o nmero total de passos necessrios para desbloque-lo (este deve
ser um nmero entre 2 e 10.000).
12
medida que o usurio faz progressos para desbloquear o achievement, voc deve
informar o nmero de passos realizados pelo usurio ao Play Games Services.
Uma vez que o nmero total de passos atinge o valor de desbloqueio, o achievement
desbloqueado.
Um jogo deve ter pelo menos cinco achievements antes de ser publicado. Voc pode
testar com menos de cinco achievements, mas voc precisa de pelo menos cinco
criados antes de publicar o seu jogo na Google Play Store.
13
14
15
Leaderboards
16
17
Mltiplas leaderboards
Os jogos podem ter vrias leaderboards at um mximo de 70. Por exemplo, um
jogo multi-nvel pode oferecer um leaderboard diferente para cada nvel e um jogo
de corrida pode ter um ranking separado para cada pista.
18
19
Real-Time Multiplayer
Seu jogo pode usar a API multiplayer do Play Games Services para conectar vrios
jogadores juntos em uma nica sesso de jogo e de transferncia entre jogadores
conectados.
Usar a API real-time multiplayer pode ajudar a simplificar o seu esforo de desenvolvimento do jogo, porque a API lida com vrias tarefas para voc.
Ela gerencia as conexes de rede para criar e manter um ambiente multiplayer em
tempo real, ou seja, permite a comunicao de rede entre vrios jogadores na mesma
sesso de jogo e permite aos jogadores enviar dados diretamente um para o outro
Fornece uma interface de usurio para convidar outros jogadores a entrar em uma
sala
20
21
22
Isso simplifica sua codificao na hora de desenvolver uma interface grfica, mas
voc tambm pode optar por implementar isso de forma manual.
Com base nos detalhes de seleo de jogador e nas condiguraes da sala, o Play
Games Services tentar criar uma sesso de jogo multiplayer em tempo real.
Se a sala for criada com sucesso, o Play Games Services notifica o jogo e o jogador
local automaticamente colocado como participante da sala.
23
Configurao da sala
Voc deve especificar o nmero de jogadores que voc deseja permitir na sala. Atualmente, o Play Games Services suporta um mximo de oito jogadores em um jogo
multiplayer (incluindo o jogador que est iniciando a partida).
Opcionalmente, voc pode querer garantir que apenas os jogadores que esto interessados em um tipo especfico de variante de jogo encontrem sua sala. Por exemplo, em um jogo de corrida, voc pode encontrar jogadores que s querem jogar um
mapa de corrida ou nvel de dificuldade especfica.
As variantes podem ser utilizados para os jogadores que esto interessados em estilos de jogo diferentes encontrarem sua sala. Se existem diferentes verses do seu
aplicativo, voc tambm pode usar variantes para garantir que apenas os jogadores
que esto em verses compatveis consigam se encontrar.
24
Os participantes
Quando os jogadores iniciam um jogo multiplayer, eles podem optar por convidar
pessoas especficas ou deixar o Play Games Services selecionar automaticamente outros participantes aleatoriamente atravs do auto-matching.
Eles tambm podem solicitar uma mistura dos dois (por exemplo, um jogador especfico de seus crculos, e dois jogadores via auto-matching).
Auto-matching
Um participante encontrado via auto-matching no tem que ser um contato dos crculos do jogador local ou qualquer outra conexo. O auto-matching simplesmente
procura por outros participantes que tambm esto iniciando um jogo naquele momento e pedindo para serem encontrados.
25
Convites
Um usurio de dispositivo mvel que recebe um convite ver uma notificao no dispositivos onde est logado. Os convites so enviados pelo Play Games Services atravs de mensagens via Google Cloud para dispositivos Android, e atravs do servio
de mensagens da Apple (APNS) para dispositivos iOS .
Se o jogador no tiver o aplicativo instalado em um dispositivo Android, eles sero
solicitados a instalar o aplicativo a partir da Google Play Store. Nesse caso, o convite
fica aguardando e o jogador pode aceit-lo depois de instalar o jogo.
Gameplay
Uma vez que o nmero necessrio de participantes para uma sala tenha sido atingido, a sala considerada como cheia e o jogo pode comear.
26
Em determinados cenrios avanados, o jogo pode permitir que os participantes conectados iniciem o jogo antes mesmo de todos os convites pendentes serem aceitos.
Se o seu jogo suporta este modo de jogo, certifique-se de lidar com quaisquer participantes que entrarem na sala aps o jogo estar em andamento.
Veja o seguinte exemplo:
Em um jogo de corrida de 3 jogadores, a sua sesso pode comear com dois jogadores. Durante a corrida, se um terceiro jogador entra na sala, o game pode deixar o
participante recm chegado apenas observando corrida atual como um espectador,
mas no podendo jogar como um piloto. Aps a corrida acabar, o jogo pode permitir
que os trs jogadores participem como pilotos na prxima rodada.
27
Fechamento da sala
de responsabilidade do seu game avisar os servidores do Play Games Services
quando um jogador que est participando da sala sair. Seu jogo deve tambm lidar
com o cenrio em que todos os participantes exceto o jogador local deixem a sala.
Quando isso acontece, o jogo deve desconectar o jogador local da sala imediatamente.
A sala considerada fechada quando todos os seus participantes saem dela. Neste
ponto, o jogo deve desligar qualquer jogo em andamento, e certificar-se de salvar os
dados de forma adequada.
28
Turn-based Multiplayer
Em um jogo multiplayer baseado em turnos, um nico estado compartilhado passado entre vrios jogadores, e apenas um jogador tem permisso para modificar o
estado compartilhado de cada vez.
Os jogadores se revezam de forma assncrona de acordo com uma ordem de jogo
determinado pelas regras do jogo.
Seu jogo pode usar a API turn-based multiplayer fornecida pelo Play Games Services
para gerenciar as seguintes tarefas:
Convidar jogadores para participar de uma partida multiplayer baseado em turnos.
Procure por jogadores de forma aleatria para serem adicionados automaticamente
no seu jogo. permitido colocar at oito participantes em uma partida
29
30
Seu jogo pode usar a API turn-based multiplayer para se juntar at oito jogadores em
uma mesma partida, incluindo o jogador que iniciou e quaisquer jogadores encontrados automaticamente.
As partidas acontecem de forma assncrona e os participantes no precisam estar conectados simultaneamente ao Play Games Services para jogar.
Existem trs coisas bsicas que formam uma partida baseada em turnos:
Participantes: um usurio pode se tornar um participante em um jogo baseado em
turnos, iniciando uma partida, aderirindo a um jogo ao aceitar um convite, ou utilizar
o auto-matching
31
32
Events e Quests
O Play Games Services permite recolher dados cumulativos gerados por seus jogadores durante o jogo e armazen-los nos servidores do Google para anlise do jogo.
Voc pode definir com flexibilidade os dados do jogador que seu jogo deve recolher:
Os jogadores usam um determinado item
Os jogadores atingem um certo nvel
Os jogadores executam alguma ao do jogo em especfico
Voc pode usar os dados de eventos como feedback sobre como melhorar o seu
jogo. Por exemplo, voc pode ajustar a dificuldade de certos nveis em seu jogo que
os jogadores esto encontrando muita dificuldade para completar.
33
O Play Games Services complementa o servio de eventos com as quests, permitindo-lhe introduzir novos desafios com prazos que so baseados em dados de eventos. As quests lhe permitem envolver os jogadores e incentiv-los com alguma recompensa no jogo ou se beneficiar se eles tiverem sucesso, sem ter que publicar seu
jogo inteiro novamente.
Como funciona?
As APIs de eventos fornecem uma maneira de definir e coletar mtricas de jogabilidade interessantes e fazer o upload dessas mtricas o Play Games Services.
Por exemplo, veja como seria um evento que poderia ser enviado para o servio dizendo que o jogador ganhou moedas de ouro por ter matado os zumbis.
34
Evento:
Nome: Zumbis Mortos
Descrio: Nmero de vezes que um jogador matou um zumbi
Tipo: Ganhou moedas de ouro
Ou ento, o jogador pode ter perdido moedas de ouro por ter sido atingido por um
zumbi.
Evento:
Nome: Ataque Zumbi
Descrio: Nmero de vezes que um jogador foi atingido por um zumbi
Tipo: Perdeu moedas de ouro
35
Esses dois casos exemplificam os dois tipos de eventos que podem ser usados, o
Premium currency source, onde um jogador ganha pontos/moedas/ouro por fazer
determinada ao ou Premium currency sink, quando o jogador gasta seus recursos
ou perde por algum motivo. As APIs de quests permitem que o desenvolvedor crie
desafios dentro do jogo para os jogadores para tentarem completar dentro de um
perodo de tempo pr-definido.Vamos ver alguns exemplos de quests que podemos
utilizar no servio.
Quest:
Nome: Coletar 50 moedas
Descrio: Os zumbis esto tomando a cidade neste fim de semana. Ajude matando todos os zumbis
Critrios de concluso: Mate 100 zumbis
36
Ou ento:
Quest:
Nome: Comer 100 panquecas
Descrio: Nessa semana temos a competio Panqueca Comilo, vena o torneio
comendo panquecas
Critrios de concluso: Coma 100 panquecas para vencer o torneio
37
Saved Games
O servio de Saved Games uma maneira fcil salvar a progresso dos seus jogadores no jogo nos servidores do Google. Seu jogo pode recuperar os dados salvos para
permitir aos jogadores retornarem de onde pararam a partir de qualquer dispositivo.
Voc pode sincronizar os dados de um jogador em vrios dispositivos diferentes. Por
exemplo, se voc tem um jogo que roda em Android, voc pode usar o servio para
permitir que um jogador comece um jogo em seu telefone Android e depois continue a jogar em um tablet sem perder seu progresso.
Este servio tambm pode ser usado para garantir que um jogador continue a partir
de onde ele parou, mesmo se o seu dispositivo for perdido, destrudo, ou trocado
por um modelo mais novo.
38
Como funciona?
O servio Saved Games dividido em duas partes:
1. Sistema binrio no estruturado: esses dados podem representar o que voc quiser, e seu jogo responsvel por analisar e escrever esses dados.
2. Metadados estruturados: so propriedades adicionais associados com os dados
binrios que permitem que o Play Games Services para apresentar visualmente os
Saved Games para os usurios.
Imagens de capa
O servio fornece ao usurio uma experincia visual aos dados salvos. Voc pode associar imagens para representar os jogos salvos. Se voc estiver usando a interface
padro para mostrar os jogos salvos, ele ir exibir essas imagens. As imagens tambm pode aparecerem no Google Play Games.
39
Descrio
Voc pode fornecer uma descrio breve do contedo de um jogo salvo. Esta descrio exibida diretamente para os jogadores e deve resumir o estado em que o jogo
salvo representa; por exemplo, Salvando a princesa Lela.
Cota
Os desenvolvedores no so cobrados pelos dados de jogos salvos que esto armazenado na nuvem. Em vez disso, esses dados so consumidos diretamente da contado do Google Drive do jogador - voc nunca tem que se preocupar com isso.
Proteo de escrita/leitura
Todos os jogos guardados so armazenados no Google Drive em uma pasta de dados dos seus jogadores.
40
Esta pasta s pode ser lida e escrita por seu jogo - no pode ser vista ou modificada
por outros jogos, para que haja uma proteo contra a corrupo de dados. Alm
disso, os jogos salvos so isolados para que eles no possam ser modificados pelos
prprios jogadores.
Suporte offline
O seu jogo ainda pode ler e escrever em um jogo salvo mesmo quando o dispositivo
do jogador est sem conexo com a internet, mas no ser capaz de sincronizar os
dados com o Play Games Services at que a conectividade de rede seja estabelecida.
Uma vez restabelecida, o Play Games Services, de forma assncrona atualiza os dados
dos jogos salvos nos servidores do Google.
41
Resoluo de conflitos
Ao usar o servio Saved Games, o jogo pode encontrar alguns conflitos ao tentar salvar os dados. Estes conflitos podem ocorrer quando um usurio estiver executando
mais de uma instncia de sua aplicao em diferentes dispositivos ou computadores.
Sua aplicao deve ser capaz de resolver esses conflitos de uma forma a proporcionar a melhor experincia para o usurio.
Normalmente, os conflitos de dados ocorrem quando uma instncia do seu aplicativo incapaz de conectar no servio Saved Games durante uma tentativa de carregar
os dados ou salv-los.
Em geral, a melhor maneira de evitar conflitos de dados sempre carregar os dados
mais recentes do servio quando o aplicativo iniciado e salvar os dados usando o
servio com uma frequncia razovel.
42
No entanto, isso nem sempre possvel, sua aplicao deve fazer todos os esforos
para evitar os conflitos de tal modo que os dados dos usurios sejam preservados e
que eles tenham uma boa experincia.
Limites
O Play Games Services tem um limite do tamanho de dados guardados e da imagem
que representa esses dados sendo 3 MB e 800 KB, respectivamente.
43
44
Para adicionar o seu jogo no Google Play Developer Console, siga estes passos abaixo.
45
46
47
48
49
Os outros campos devem ser preenchidos antes de publicar o seu jogo. O nome
para exibio e uma descrio para o seu jogo deve ser genrico o suficiente para
aplicar em todas as verses do seu game que compartilham os mesmos servios do
Play Games Services.
4. Clique em Save para criar uma nova entrada para o seu jogo no Google Play Developer Console.
50
51
52
Criar um ID de cliente
1. Agora voc precisa autorizar seu aplicativo. Clique em Authorize your app now
para iniciar o processo de criao de um ID de cliente OAuth 2.0
53
2. Caso voc tenha escolhido um aplicativo que j esteja no Google Play Developer
Console e o campo fingerprint (certificado digital) j vier preenchido, apenas clique
em Confirm, caso contrrio, vamos precisar gerar um novo fingerprint (certificado digital).
54
55
56
57
ID do Cliente
Depois de clicar no boto Confirm,
voc vai ver o seu novo ID de cliente para esta aplicao. Anote o ID do
cliente, voc vai precisar dessa informao mais tarde.
Voc tambm pode encontrar essa informao acessando a pgina de Linked Apps
e clicar no item com o ID do cliente para sua plataforma.
58
59
ID do aplicativo
Voc tambm vai precisar saber o seu ID do aplicativo. Voc pode encontrar isso
olhando para o nmero de 12-13 dgitos ao lado do nome de exibio do seu jogo
na parte superior da pgina.
60
61
No final deste tutorial voc vai ter um jogo de exemplo totalmente funcional e integrado com os dois servios citados.
Voc pode baixar o cdigo fonte do jogo clicando neste link.
Antes de voc comear
1. Configure o seu ambiente de desenvolvimento Android.
2. Configure um emulador ou dispositivo fsico rodando o Android 2.3 ou superior
para os testes.
3. recomendvel voc testar em um dispositivo fsico Android. No entanto, se voc
no tem um dispositivo fsico, voc pode testar no emulador Android. Para fazer isso,
baixe a imagem do emulador que inclui o Google APIs.
62
63
64
2. Agora, na aba SDK Tools selecione a opo Google Play Services e clique no boto Apply.
65
Iniciando o projeto
Crie um novo projeto no Android Studio escolhendo a verso 15 minima de API e o
tipo de Activity sendo Empty Activity. Dessa forma iniciamos com um projeto totalmente vazio e mais fcil de manipular.
66
67
Com o projeto aberto no Android Studio, v em File > New > Import Module. Selecione a biblioteca que est dentro de android-basic-samples/BasicSamples/libraries/BaseGameUtils e clique em Finish.
68
69
android:value=@integer/google_play_services_version />
70
71
findViewById(R.id.sign_in_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setOnClickListener(this);
72
Vamos configurar os eventos onClick nos botes para responderem a alguma ao:
@Override
public void onClick(View view) {
if (view.getId() == R.id.sign_in_button) {
beginUserInitiatedSignIn();
}
else if (view.getId() == R.id.sign_out_button) {
signOut();
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_button).setVisibility(View.GONE);
}
}
Ns vamos usar os mtodos da classe BaseGameActivity para efetuar o login (beginUserInitiatedSignIn e signOut). Quando o aplicativo iniciado, ele tentar fazer o
login automaticamente e tambm usar os botes de login e logout.
Google Play Game Services - Simplificando o Desenvolvimento do Seu Jogo Android
73
Voc pode adicionar mais cdigo se for necessrio. Voc tambm pode optar por
salvar o progresso do jogador, mesmo se ele no estiver logado, mas isso depende
do seu jogo.
74
75
76
Implementando um Achievement
Vamos comear com o layout, que inclui os botes de login/logout adicionamos anteriormente:
<LinearLayout
android:id=@+id/sign_in_buttons
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_alignParentTop=true
android:orientation=horizontal>
<!-- sign-in button -->
android:text=Logout
android:visibility=gone />
<!-- show achievements -->
<Button
android:id=@+id/show_achievements
android:layout_width=wrap_content
android:layout_height=wrap_content
android:text=Achievements />
<com.google.android.gms.common.SignInButton
android:id=@+id/sign_in_button
</LinearLayout>
android:layout_width=wrap_content
android:layout_height=wrap_content /> <RelativeLayout
android:layout_width=fill_parent
android:layout_height=wrap_content
<!-- sign-out button -->
android:layout_below=@id/sign_in_but<Button
tons>
android:id=@+id/sign_out_button
<TextView
android:layout_width=wrap_content
android:id=@+id/guess_text
android:layout_height=wrap_content
Google Play Game Services - Simplificando o Desenvolvimento do Seu Jogo Android
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_centerHorizontal=true
android:text=Acerto o nmero!
android:textSize=30sp
android:textStyle=bold />
<LinearLayout
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_below=@id/guess_text
android:orientation=vertical>
<LinearLayout
android:layout_width=fill_parent
android:layout_height=wrap_content
android:orientation=horizontal>
<Button
android:id=@+id/btn7
android:layout_width=0dp
77
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
android:background=#ff000033
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=7
android:text=7
android:textColor=#ffffffff
android:textSize=30sp
android:textStyle=bold />
<Button
android:id=@+id/btn8
android:layout_width=0dp
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
android:background=#ff000033
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=8
android:text=8
android:textColor=#ffffffff
android:textSize=30sp
android:textStyle=bold />
<Button
android:id=@+id/btn9
android:layout_width=0dp
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
android:background=#ff000033
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=9
android:text=9
android:textColor=#ffffffff
android:textSize=30sp
android:textStyle=bold />
</LinearLayout>
<LinearLayout
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_weight=1
android:orientation=horizontal>
<Button
android:id=@+id/btn4
android:layout_width=0dp
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
android:background=#ff000033
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=4
android:text=4
android:textColor=#ffffffff
android:textSize=30sp
android:textStyle=bold />
<Button
android:id=@+id/btn5
android:layout_width=0dp
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
android:background=#ff000033
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=5
android:text=5
android:textColor=#ffffffff
android:textSize=30sp
android:textStyle=bold />
<Button
android:id=@+id/btn6
android:layout_width=0dp
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
78
android:background=#ff000033
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=6
android:text=6
android:textColor=#ffffffff
android:textSize=30sp
android:textStyle=bold />
</LinearLayout>
<LinearLayout
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_weight=1
android:orientation=horizontal>
<Button
android:id=@+id/btn1
android:layout_width=0dp
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
android:background=#ff000033
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=1
android:text=1
android:textColor=#ffffffff
android:textSize=30sp
android:textStyle=bold />
<Button
android:id=@+id/btn2
android:layout_width=0dp
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
android:background=#ff000033
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=2
android:text=2
android:textColor=#ffffffff
android:textSize=30sp
android:textStyle=bold />
<Button
android:id=@+id/btn3
android:layout_width=0dp
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
android:background=#ff000033
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=3
android:text=3
android:textColor=#ffffffff
android:textSize=30sp
android:textStyle=bold />
</LinearLayout>
<LinearLayout
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_weight=1
android:orientation=horizontal>
<Button
android:id=@+id/btn0
android:layout_width=0dp
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
android:background=#ff000033
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=0
android:text=0
android:textColor=#ffffffff
android:textSize=30sp
android:textStyle=bold />
79
<Button
android:id=@+id/btnAgain
android:layout_width=0dp
android:layout_height=match_parent
android:layout_margin=1dp
android:layout_weight=1
android:background=#ffffff00
android:enabled=false
android:gravity=center
android:onClick=btnPressed
android:padding=5dp
android:tag=-1
android:text=Again
android:textColor=#ffffff00
android:textSize=30sp
android:textStyle=bold />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
Nesse layout ns colocamos um boto de achievements e os botes de login e logout. No vou entrar
em muitos detalhes sobre o jogo de exemplo.
O jogo seleciona um nmero aleatrio entre 0 e 9 e o
jogador tem que escolher um nmero para tentar adivinhar o nmero selecionado.
O jogo atualiza o campo de texto avisando se o usurio adivinhou ou no o nmero. Se o palpite for correto, um achievement desbloqueado.
80
81
82
83
Implemente outro mtodo chamado enableNumbers, que invocado quando o usurio escolheu jogar novamente:
84
85
86
87
Tenha certeza que voc entendeu o conceito de Leaderboard no Play Games Services, isso muito importante para continuarmos.
Voc pode fazer um monte de coisas diferentes utilizando os Leaderboards, por isso
esse exemplo apenas um ponto de partida.
Digite os detalhes do seu novo leaderboard. Para o exemplo, usamos o nome Menos
Chutes e selecionamos Smaller is Better na seo Ordering.
88
Adicione um cone se quiser, se no uma imagem padro ser usada. Salve sua nova
leaderboard e copie seu ID.
89
Implementando um Leaderboard
Para essa seo, ns vamos aproveitar todo o cdigo que fizemos anteriormente
quando implementamos os achievements.
Vamos comear guardando a informao do nosso leaderboard criado. Abra o arquivo ids.xml que criamos anteriormente e adicione a seguinte entrada com o ID do seu
leaderboard.
<string name=menos_chutes_leaderboard>CgkIip-mysUTEAIQBQ</string>
90
91
Agora precisamos trabalhar com esse boto em nossa MainActivity. Voc vai precisar
que o seguinte cdigo seja adicionado no mtodo onCreate.
findViewById(R.id.show_leaderboard).setOnClickListener(this);
Adicione tambm um atributo de classe chamado numGuesses.
private int numGuesses=0;
Esse atributo vai controlar o nmero de vezes que o jogador tentou adivinhar o nmero correto.
92
93
Se o jogador clicar no boto De Novo, ns zeramos o atributo numGuesses. Se o usurio clica em um boto numrico, incrementamos o numGuesses.
Ento enviamos a pontuao para o leaderboard quando o usurio adivinha o nmero. O usurio pode fazer at cinco chutes.
O importante aqui o submitScore. Passamos o nmero de chutes que o jogador levou para acertar o nmero correto. Se o nmero de tentativas menor do que qualquer entrada existente na leaderboard do usurio, sua pontuao ser substituda
pelo novo valor.
Antes de finalizar nossa implementao, vamos permitir que o usurio exiba o leaderboard do jogo clicando no boto Leaderboard que adicionamos.
94
95
96
Plataformas
Hoje possvel desenvolver diretamente utilizando as APIs do servio para Android,
iOS, Web e C++. Apenas para a Web no existe uma SDK de desenvolvimento, mas
todos os servios so em formato REST, o que facilita muito. Veja a tabela com as
SDKs disponveis:
97
Game Engines
Todos sabemos que os desenvolvedores de jogos utilizam engines que auxiliam no
desenvolvimento de games. Por essa razo, o Google disponibiliza alguns plugins
para engines conhecidas no mercado que facilitam a utilizao do servio. Veja na
tabela abaixo os plugins disponveis para cada engine.
98
Concluso
Espero que este ebook tenha aberto as portas para voc para o Play Games Services.
Hoje a tecnologia em nuvem uma parte muito importante da maioria dos aplicativos e jogos de sucesso que temos no mercado.
Vimos como funciona a Google Play Games, a plataforma do Google onde os jogadores podem ver os dados de seus jogos salvos, estatsticas de conquistas e tambm
encontrar outros jogadores para jogarem juntos.
Entendemos tambm como poderoso o servio do Play Games Services facilitando
muito o desenvolvimento de nossos jogos trazendo conceitos em forma de servios
e guardando os dados em nuvem de forma segura e distribuda.
99
Vrios conceitos importantes no desenvolvimento de jogos esto disponveis no servio permitindo que o desenvolvedor no se preocupe tanto com eles, mas sim, em
criar um jogo que entretenha o usurio e divirta as pessoas.
Esses conceitos podem ser facilmente implementados com poucas linhas de cdigo
e algumas configuraes.
De forma prtica, desenvolvemos um jogo de exemplo totalmente funcional usando
dois servios do Play Games Services, achievements e leaderboards.
100
101
102
O objetivo do jogo era adivinhar um nmero secreto aleatrio em no mximo 5 tentativas, caso o jogador acerte, era liberado um achievement para e suas estatsticas
eram enviadas para seu leaderboard.
Utilizando os dois botes que criamos, foi possvel visualizar todas os achievements
do jogador e tambm o seu leaderboard para acompanhar o progresso geral dentro
do jogo.
Finalizando
Espero que tenha gostado desse material e que tenha sido muito til para voc, nosso objetivo era apresentar a tecnologia e te dar conhecimento o suficiente para utiliza-la e dar muito mais qualidade aos seus jogos.
103