Avaliação de Aplicativo na Loja

 

Costumo dizer que um verdadeiro desenvolvedor mobile usa as avaliações do seu aplicativo como forma de melhorar seu aplicativo e como forma de colher informações sobre o que os usuários realmente esperam e querem do seu aplicativo.

Isso tem a ver com desenvolvimento ágil, muitos aplicativos pecam ao colocar muitas features no aplicativo sem mesmo saber se o usuário realmente queria aquela feature. Sendo assim sempre recomendo que o desenvolvedor lance seu aplicativo na loja o MAIS rápido possível e com o MENOR número de features possível, assim não há desperdício de tempo e dinheiro desenvolvendo features que o usuário não quer. Portanto lance seu aplicativo e fique de olho nas avaliações, em quantas estrelas estão avaliando? Quais são os comentários que fazem? Essa parte dos comentários é realmente um feedback importante, pois muitas vezes os usuários escrevem ali coisas que não gostaram na sua app ou coisas que gostariam que seu aplicativo fizesse. Quando muitos usuários dizem que não gostaram de alguma coisa então remova aquela feature. Para os comentários que pedem features, coloque elas o mais rápido possível e não esqueça de atualizar seu aplicativo na loja assim que as primeiras sugestões aparecerem. É um ciclo vicioso e muito prazeroso para o desenvolvedor.

Usuário gosta de ser ouvido e quando ele reclama e vê que logo depois o desenvolvedor atendeu o pedido dele ele fica feliz e faz propaganda da sua app para outras pessoas seja pessoalmente ou em redes sociais.

Mas não adianta apenas esperar que os usuários avaliem sua app na loja, se você apenas esperar não vai ter feedback na velocidade que precisa, então é necessário PERGUNTAR para o usuário o que ele achou do aplicativo. Pra isso alguns aplicativos usam a estratégia de após abrir um certo número de vezes, ao abrir novamente pergunta pro usuário se ele topa avaliar o aplicativo na loja e então direciona o usuário pra loja.

No Windows Phone isso é muito simples de fazer. Coloquei um aplicativo de exemplo nesse post para ver como é. No caso ao abrir o app pela terceira vez ele pergunta se o usuário quer avaliar o aplicativo na loja, caso positivo redireciona o usuário para a loja, caso negativo o usuário continua usando o aplicativo normalmente.

Algumas telas:

   

 

Um ponto importante a se destacar é que essa feature de review da app não será possível de testar enquanto sua app não estiver publicada, sendo assim se vc ainda não publicou terá uma tela como essa:

 

Pra fazer a chamada na loja o código é bem simples, bastam duas linhas:

MarketplaceReviewTask review = new MarketplaceReviewTask();
review.Show();

O controle sobre a terceira vez que o usuário entra no aplicativo para então chamar o review também é simples, no exemplo desse post é usado o IsolatedStorageSettings onde basta setar uma propriedade que controle a quantidade. No exemplo eu criei uma classe chamada SettingsManager com dois métodos que encapsulam toda essa regra de persistência, os métodos são GetValue(string SetttingName, int defaultValue) SetValue(string SetttingName, int value) 

Assim no evento OnNavigatedTo da página principal do aplicativo basta verificar o valor da propriedade e se o valor for igual a 3 mostra a pergunta.

Aqui ExemploReview você pode baixar o projeto completo Windows Phone 8 feito no Visual Studio 2013

#keepCoding

 

WindowsPhone Soundboard app

 

Quer fazer uma app fácil e com possível sucesso de downloads ? Então pense em fazer uma app estilo Soundboard! Uma app Soundboard é uma app onde vc clica na tela e toca algum som! pode ser sons engraçados, assustadores, que acalmam o ambiente, piadas, qualquer coisa! Entretanto um dos principais problemas quando um desenvolvedor submete esse tipo de aplicativo para a Windows Phone Store é que o aplicativo é reprovado porque não verifica se o celular já está tocando alguma música em background, caso esteja tocando tem que perguntar para o usuário se ele deseja parar a música de background e após sair do aplicativo a música de background deve voltar a tocar. Para fazer isso é só na página principal do seu aplicativo você implementar o método OnNavigatedTo() desse jeito para identificar que tem uma música tocando e oferecer a opção de parar a música.

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (MediaPlayer.State == MediaState.Playing)
{
var result = MessageBox.Show(“You are currently listening to music. Want pause music?”, “”, MessageBoxButton.OKCancel);
if (result == MessageBoxResult.OK)
{
MediaPlayer.Pause();
}
}
FrameworkDispatcher.Update();
}

 

Você também deverá implementar o método InNavigatedFrom na página principal de sua app para voltar a tocar a música que estava tocando desse jeito:

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
MediaPlayer.Resume();
}

 

Não esqueça que para fazer uma app Soundboard vc deve adicionar a referência Microsoft.XNA.Framework e para os códigos acima vc deve colocar os seguintes using:

using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework;

 

Gostou da idéia de app Soundboard mas não sabe por onde começar!? não tem problema, segue aqui um template . Essa é uma app Soundboard de gritos! mude, o nome, a imagem, os icones, os sons e pronto! vc tem uma nova app.

Screams

#keepCoding

 

 

System.out.println() para WindowsPhone

 

Uma dúvida de muitos programadores Java quando estão aprendendo a desenvolver aplicativos para Windows Phone é como usar o bom e velho System.out.println(“passou aqui”); também no WindowsPhone.

A utilização do System.out.println() no Java é muito comum para jogar num console valores de variáveis ou simplesmente algumas mensagens como “passou aqui 1″, “passou aqui 2″, etc. Na verdade tanto o Eclipse/Netbeans para Java como VisualStudio para WP têm uma ferramenta de depuração/debug, onde vc consegue ver passo a passo o que está acontecendo, por onde o código está passando e quais os valores das variáveis, entretanto existem muitos progamadores que preferem o bom e velho System.out.println().

Bom, mas vamos para o que interessa, no Windows Phone você pode jogar mensagens no console com o comando:

System.Diagnostics.Debug.WriteLine(string);

E no Visual Studio não esqueça de clicar em View|Output para ver o console onde será jogado as mensagens.

#keepCoding

 

 

Idéias de apps para desenvolver para Series40 ou WindowsPhone

 

Você quer desenvolver pra Windows Phone ou Series40 da Nokia, mas não sabe o que fazer ?

Eu sempre costumo dizer nas minhas palestras e treinamentos que uma ótima maneira de aprender desenvolvimento de software é simplesmente copiando a idéia de um software já existente. Isso é totalmente LEGAL pois vc não está copiando código e sim a idéia… e quanto a isso não existe problema, pois idéias sequer podem ser patenteadas… A não ser que visualmente seu app copiado se pareca com o original, daí sim não pode. Como por exemplo se vc quiser fazer um jogo igual ou o mesmo estilo do TETRIS mas vai chamar de um nome bem diferente, digamos que vc chame de KATU ! Isso nao vai poder, pois o TETRIS jah eh muito bem conhecido e ninguem chamaria seu jogo de KATU e sim de TETRIS!

mas enfim, copiar idéias de software apenas para aprender programação é uma maneira muito produtiva de se aprender, pois vc tem um objetivo e um escopo bem definido.

E eu sempre digo para os meus alunos que tanto a Windows Phone Store quanto a Nokia Store ainda tem menos de 200 mil aplicativos enquanto que as outras lojas de aplicativos de outras plataformas (Android e IPhone) já passa de 500 mil. Sendo assim os desenvolvedores tem uma grande oportunidade para desenvolver apps tanto para Series40 quanto para WindowsPhone e poderem ter uma app de sucesso.

MINHA SUGESTÃO: copiem a idéia das apps de sucesso das outras lojas, as que tem bastante download, e desenvolvam para as plataformas Series40 e WindowsPhone. Mas como saber quais as apps de muitos downloads da outras lojas? Bom aqui vai uma dica: na lista abaixo temos algumas das apps com mais downloads da loja da plataforma do robozinho marciano.

Cantadas Fodas
Piadas Brasil
Mensagens para Celular
Detector de Mentiras
Bíblia em Português (PTv7D)
Xaveco
Chavinho Groove sons do Chaves
Teste do Q.I.
Buscapé Mobile
Piadas
SMS Frases Romanticas Amor
Mensagem Grátis – Torpedos SMS
Anti Mosquito
3D Corinthians Fundo Animado
Mensagens de Amor
Top Cantadas
Receitas Fáceis MdeMulher (*)
Teste de Pureza
3D São Paulo Fundo Animado

Agora é só copiar a idéia e desenvolver para Series40 ou WindowsPhone

#keepCoding

 

Gamification no Agile

20130312-130717.jpg

Ano passado o meu colega de trabalho Luiz Cavalcanti (http://luizcavalcanti.com/) me sugeriu o uso do Gamification para melhorar a adesão de métodos ágeis na empresa que eu trabalho, entao fiz alguns estudos sobre usar o conceito de Gamification no mundo agile de desenvolvimento de software. Nesse post vou comentar as técnicas utilizadas e os resultados das pesquisas.

Eu cheguei a apresentar resultado parcial da pesquisa no Agile Brazil de 2012 e os slides da apresentação podem ser encontrados aqui

  • Gamification

Primeiro vamos para a definição do que é gamification. Resumidamente significa tornar algo que não é um jogo em algo jogável usando as mesmas técnicas de premiação de jogos. Costumo sempre citar o foursquare para exemplificar, o 4sq é uma rede social de compartilhamento de lugares que a pessoa frequenta, mas pq o usuário vai dar essa informação? Qual a motivação do usuário dizer onde está? Aparentemente não existe motivação alguma, então o pessoal do 4sq usou o Gamification. No 4sq tem 3 principais técnicas do gamification:

1) Pontos: o usuário ganha pontos ao dar checkin em lugares, se for a primeira vez naquele lugar ganha mais pontos, se é a pessoa q mais frequenta aquele lugar tb ganha mais pontos

2) Leaderboard: pontos não tem muita validade se não for comparado com outras pessoas, sendo assim existe um ranking, onde quem tem mais pontos ficam em primeiro lugar, além disso esse ranking é social, ou seja vc compara o seus pontos com os dos seus amigos e não com gente q vc não conhece

3) badges: ou tb conhecido por medalhas, algo do tipo se vc frequentou mais de 5 shopping centers vc ganha um badge chamado “mall rat” ou se vc frequentou 5 aeroportos vc ganha um badge “jet setter”, enfim, são medalhas q premiam bom desempenho ou alguma coisa interessante como tb se vc der um checkin num lugar onde mais de 100 pessoas tb já deram mais de 100 checkings nas últimas duas horas vc ganha um badge chamado “swarm place”

  • Agile com Gamification

Bom, a minha idéia foi basicamente fazer então um 4sq do Agile, onde o usuario poderia fazer checkins de cerimonias do Scrum e checkins de praticas ageis do XP. Os pontos e a lista de que coisas pontuam podem ser vistas no slideshare mais em cima no post.

Objetivo disso: o objetivo foi verificar se o conceito de um jogo dentro do Scrum faria as pessoas serem mais aderentes ao Scrum e as praticas ageis. De uma certa forma isso aconteceu. Nos meus testes por exemplo fizemos uma regra que, quando alguem atingisse 5 mil pontos, poderia resgatar um vale presente de uma livraria no valor de 50 reais, o comportamento mais intessante que eu observei foi que o time começou a auxiliar o PO a quebrar melhor as estórias tendo assim estórias menores, mas pq o time fez isso? Simplesmente pq na regra de pontuação um dos itens que valia mais pontos era a finalização de uma estória por parte do time, e tendo estórias menores, cada individuo que trabalhasse na estória ganharia mais pontos, afinal fazer 3 estórias bem pequenas pontua mais do que uma única estória maior. Bom, sabemos que estórias pequenas são bom pro desenvolvimento de software, pois assim temos pequenos incrementos do produto, ou seja foi bom pro produto pq estava sendo bom pro desenvolvedor que ganhava pontos pela estória terminada.

No caso dos meus testes cada indivíduo não tinha um aplicativo no celular como o 4sq para registrar seus checkins, no caso EU era esse aplicativo, isso acabou centralizando tudo em mim e tive muito trabalho para registrar os pontos das equipes que eu monitorava, contei um pouco com a ajuda dos scrum masters do time, mas mesmo assim foi dificil conciliar algumas viagens de negócios com a monitoração dos pontos.

Sobre a implementação do leaderboard eu usei uma folha de papel no Scrum Board com o ranking, o time acabou me pedindo q retirasse esse ranking do scrum board pq alguns “gerentes” entenderam aquele ranking como medição de performance e começaram a dizer coisas do tipo “viu, aquele desenvolvedor eh mesmo bom, está em primeiro no ranking e aquele outro q eu suspeitava q era meio fraco eh fraco mesmo, pois está em último”. Uma leitura completamente errônea do ranking, pois inclusive o desenvolvedor que estava em último, estava naquela posição pq tinha ficado muito doente por uma semana e não pode comparecer no trabalho. Com isso apendi que o ranking não pode ser de visão pública pois pode ser muito mal compreendido.

Sobre os badges eles foram bem recebidos pelos devs pois eles se sentiram ganhando realmente uma pequena medalha, no caso usei pequenos adesivos onde os devs colocavam nas baias

Enfim, eu tentei fazer um Gamification pra Scrum de forma bem fisica, nada digital e minha conclusão é que esse caráter físico atrapalhou o estudo tanto por problema de controles dos pontos de cada pessoa como pelo leaderboard que se mostrou não entendido por algumas pessoas de fora do time. Creio que se o gamification fosse digital, no celular de cada pessoa com cada pessoa responsável por dar seus próprios checkins, teria sido melhor, tanto para o acumulo de pontos, pois eu não teria q fazer isso manualmente, quanto para o leaderboard visto que cada pessoa viria o leaderboard em seu proprio celular. Também entendo que sendo digital poderia ter pessoas de diferentes empresas e projetos no mesmo ranking. Sobre os badges entendo que seria interessante ter eles digitais tb e inclusive melhor ainda se pudessem ser integrados com o perfil da pessoa no LinkedIn pois poderia aparecer no perfil lá por exemplo um badge de Scrum Practitioner onde se entenderia por exemplo que a pessoa já teria trabalhado em mais de 50 sprints, isso é apenas um exemplo.

  • Próximos passos

Na minha opinião a idéia de gamification com agile se mostrou viável, tem público e poderia virar um produto de software. Eu entendo que o próximo passo é criar um aplicativo pra celular e uma rede social de checkins de Agile usando as teorias do gamification e fazendo com que o produto ganhe escala e usuários. Alguém se junta comigo para esse próximo passo?

Qualquer dúvida, crítica e sugestão é muito bem vinda.

Pair programming

pairon

Tive a oportunidade de trabalhar em 2 sprints de um projeto com uma equipe de um outro desenvolvedor e uma tester. Foram dois sprints bastante produtivos pois trabalhamos inteiramente em pair programming e fazendo o desenvolvimento dirigido a testes. Foi interessante porque nenhum dos outros dois da equipe tinham experiencia real com desenvolvimento ágil e eu percebi que o pair programming foi uma maneira muito produtiva de disseminar a cultura do desenvolvimento ágil, para os outros dois integrantes da equipe segundo eles foi muito bom trabalhar com uma forma diferente de desenvolver software e pra mim foi muito interessante usar o pair programming para, além de produzir código, desenvolver de forma ágil.

 

Ao final de 2 sprints todos sabiam como estava o código do projeto, o lado bom do código e os possíveis débitos técnicos o código era realmente coletivo, inclusive a tester ficou bem próxima do código pois resolvemos usar uma ferramenta de cobertura do código para poder ver se os testes estavam realmente testando o máximo de linhas de código possível e isso fez com que a tester questionasse por diversas vezes coisas sobre o código e isso foi muito bom para a propriedade coletiva de código. Enfim, já trabalhei como Scrum Master e senti muita dificuldade em disseminar a cultura do desenvolvimento ágil pois eu não participava do desenvolvimento, percebi que produzindo código junto em pair programming ali junto com o time as palavras tornam mais efeito e você consegue mostrar melhor para a equipe sobre o desenvolvimento ágil.

 

Ambiente de trabalho ágil

 

agile office crop

Eu acredito que o ambiente de trabalho é um impedimento numa empresa que quer se tornar ágil no desenvolvimento de software. Muitas vezes o ambiente possui barreiras entre os colaboradores impedindo assim a comunicação e o real trabalho em equipe como por exemplo o pair programming. Na empresa que trabalho eu considero que as estações de trabalho, ou baias, até não impedem muito a comunicação, pois a parede entre elas é bem baixinha, entretanto são baias de canto, onde as pessoas ficam de costas uma para outra muitas vezes, além de que a baia é muito grande, ou seja fica uma distancia bem grande entre duas baias. Surgiu uma necessidade em 2011 de novas baias e o chefão da empresa mandou fazer baias maiores, sim, aquelas com paredes bem grandes, impedindo total comunicação e impedindo até de saber se a pessoa está ba baia dela, as baias foram compradas, instaladas e logo todo mundo acabou não gostando justamente por dificultar muito a comunicação, além disso, eu considero as novas baias sem privacidade pois são muito altas as paredes, então quando alguem chega na minha baia já dá de cara no meu monitor, daí eu posso estar por exemplo com meu extrato bancário aberto e isso é um pouco privado na minha opinião.

A diretoria achou então que era necessário mudar todas as baias da empresa novamente, continuando as baias grandes, com paredes altas, só que as paredes sendo de vidro pois daí permitiria ver se a pessoa estava na baia ou não. Desta vez como eu fiquei sabendo que estava planejado a reestruturação eu me manifestei e pedi a planta das baias e era assim que estava proposto..

planta nova (ruim)

 

Nesse modelo proposto existem ilhas ou corredores de baias, todos de costas um para os outros. Além disso com esse novo modelo, a empresa iria continuar sem espaço para as daily meetings e sem espaço para colocar os Scrum Boards. Conversei com a pessoa responsável pela reestruturação e falei que iria propor um novo layout. Não sou nenhum projetista de interiores, nem sei manipular AutoCad então usei o paintbrush mesmo para copiar e colar algumas coisas e assim desenhar uma nova proposta, então desenhei essa:

3 ANDAR

 

Nesse novo desenho eu usei mesas tamanho padrão mesmo, nada de mesa de canto, pois assim facilita o pair programming, nessa proposta eu também coloquei as salas de reunião para o centro do espaço, assim as pessoas ficam mais resistentes a usar as salas de reunião e penso que utilizariam menos vezes (todo mundo sabe que tem gente que adora fazer reuniões que são perca de tempo). Além disso as janelas ficaram mais visiveis e as pessoas poderiam trabalhar perto das janelas trazendo um ambiente de trabalho mais relax ao poder ver a luz do dia. Os pontos que marquei em vermelho são locais que imaginei onde puderiam existir Scrum Boards, por exemplo nas próprias paredes das salas de reuniões, tentei colocar no espaço algumas mesas grandes e livres para poder facilitar o surgimento de discussões expontâneas, assim dois ou 3 programadores poderiam sentar e discutir algum assunto sem precisar marcar uma sala de reunião para isso. O ponto azul ao lado da sala de reunião eu imaginei que poderia ser paredes de vidro, justamente para quem tivesse do lado de fora pudesse ver que existem pessoas lá dentro da sala de reunião, o vidro poderia ser jateado de areia para dar uma certa privacidade para quem está lá dentro.

Enfim, chamei o presidente da companhia e outras pessoas interessadas para conversar sobre o novo layout e foi interessante a resistencia das pessoas quanto a essa proposta. Muitas pessoas, principalmente gerentes gostam de privacidade, seu cantinho, tentei argumentar que não existe canto pessoal num ambiente corporativo onde todo mundo deve trabalhar junto e colaborando, até fiz uma piada dizendo que se queria canto privativo que ficasse em casa no quarto :-) ! No final das contas a chefia ficou de analisar o custo do novo layout (o de baias altas) e iriam discutir numa reunião de diretoria se avançariam ou não com o projeto e preferiram levar para essa reunião o custo da proposta inicial (possivelmente mais cara) pois se a mais cara passasse poderiam analisar de fariam a mais barata depois, no final das contas o projeto de reestruturação do layout não foi aprovado e a empresa não vai mudar nada :-( ! mas enfim, tentei :-)

 

Publicando sua App na Nokia Store

O pessoal do Nokia Developer colocou recentemente um guia no site http://www.developer.nokia.com/GuiaSeries40/ em portugues para ajudar os brasileiros na publicação de Apps na Nokia Store, esse guia está bem completo e com o passo a passo bem bacana!

Gostaria de acrescentar ainda que para o site de suporte você pode utilizar o blog nokias40apps.com para servir como site de suporte, basta me enviar um email com a descrição da app, uma imagem e os dados que ficaram na tela de Sobre do seu aplicativo que eu publico no blog rapidamente, assim vc não precisa criar conta em nenhum site apenas para fazer site de suporte.

 

Seu primeiro jogo em J2ME passo a passo!

E Ae pessoal, post especial para os devs!
Meu nome é Sérgio Cavalcante, trabalho com o Marlon no Instituto Nokia, e recentemente dei um curso sobre J2ME. Foi um desafio, já que sou Evangelista de
Windows Phone. Então o Marlon me passou um game que ele sempre faz nos treinamentos que ele ministra. Destrinchei o bicho e fiz um roteiro para que você possa entender como
fazer o seu :)

Usei o NetBeans, junto com o SDK da Nokia para tal. Vamos começar?

Antes de qualquer coisa, baixe as imagens acima. Elas serão parte do seu projeto.

*CRIANDO O PROJETO

1 – Novo projeto
2 – Java ME – Mobile Application
3 – Desmarcar “Hello Midlet”
4 – Nome do projeto – Olimpiadas
5 – Escolher no emulator Plataform, o Nokia 1.1 for Java
6 – Botão direito no projeto -> New Midlet

*CLASSE PRINCIPAL

7 – depois do extends Midlet, colocar: implements CommandListener {
8 – A IDE sugere um import, aceitar e trocar por import javax.microedition.lcdui.*;
9 – escolher gerar todos os abstract methods da classe
10 – declarar:
public static List menu;
public static Display display;
11 – No startApp:
display = Display.getDisplay(this);
menu = new List(“Olimpiadas”, List.IMPLICIT);
menu.append(“Iniciar”, null);
display.setCurrent(menu);
12 – Build. Run.

*ADICIONANDO O COMMANDACTION

13 – Adicionar comando sair e listener de commands:
menu.addCommand(new Command(“Sair”, Command.EXIT, 1));
menu.setCommandListener(this);

14 – Adicionar Inicia Jogo:
private void iniciaJogo() {

}

15 – adicionar comandos do commandAction:
if (c == List.SELECT_COMMAND) {
if (menu.getSelectedIndex() == 0) {
iniciaJogo();
}
} else if (c.getCommandType() == Command.BACK){
display.setCurrent(menu);
} else {
notifyDestroyed();
}

*CRIANDO A CLASSE DE JOGO

16 -criar classe Jogo. botão direito new Java Class
17 – colocar os imports:

import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;

18 – heranças do Jogo:
extends GameCanvas implements Runnable, CommandListener {

19 – Implement all abstract classes

20 – tirar os throws

21 – implementar o constructor:
public Jogo(Olimpiadas m) {
super(true);
setFullScreenMode(true);
}

22 – adicionar no commandAction:
Olimpiadas.display.setCurrent(Olimpiadas.menu);

23 – declarar:
private Olimpiadas midlet;

24 – colocar no constructor:
midlet = m;

25-declarar na classe principal:
private Jogo jogo;

26 – colocar no IniciaJogo:
jogo = new Jogo(this);
display.setCurrent(jogo);

26 – build, rodar.

*GAMETIME! – PAINT SPRITES

27 – arrastar para o projeto os 3 .png’s
28 – declarar:
private Sprite sBackground, sAtleta, sBarreira;
private LayerManager lm;

29 – adicionar um try catch de IO no constructor:
try
{

} catch (IOException ex)
{
ex.printStackTrace();
}

30 – dentro do try fazer load e posicionar os sprites:

Image atleta = Image.createImage(“/atleta.png”);
Image fundo = Image.createImage(“/scenario.png”);
Image barreira = Image.createImage(“/barreira.png”);

sBackground = new Sprite(fundo);
sAtleta = new Sprite(atleta, 42, 51);
sBarreira = new Sprite(barreira);

lm = new LayerManager();
lm.append(sAtleta);
lm.append(sBarreira);
lm.append(sBackground);

sAtleta.move(10, 215);
sBarreira.move(220, 245);

31 – fazer o comando do paint chamar o paint do LM:
public void paint(Graphics g) {
lm.paint(g, 0, 0);
}

32 – build, run.

*ADICIONANDO MOVIMENTO

33 – rodando a thread. colocar no constructor depois do código dos sprites:
Thread t = new Thread(this);
t.start();

34 – declarar:
private boolean pula;
private boolean corre = true;
private int totalLoopsPulo = 0;
private int barreirasPuladas = 0;

35 – colocar no run:

while (corre) {
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
atualizaSprites();
repaint();
}

36 – criar a função atualiza sprites:
private void atualizaSprites() {
if (pula) {
totalLoopsPulo++; // controle de pulos no loop. 25 sprites, 25 atualizações do pulo
if (totalLoopsPulo <= 25) {
sAtleta.move(0, -1);
} else if (totalLoopsPulo <= 50) {
sAtleta.move(0, 1);
} else {
pula = false;
totalLoopsPulo = 0;
sAtleta.nextFrame();
}
} else { // se nao pula entao corre
sAtleta.nextFrame();
}
sBarreira.move(-3, 0);//se a barreira chegou ao começo da tela, move pro final pra aproveitar memória e aumenta score
if (sBarreira.getX() + sBarreira.getWidth() < 0) {
barreirasPuladas++;
sBarreira.move(255, 0);
}
}

37 – build, run.

*COLISÕES

38 – adicionar funcão de colisão:
private void verificaColisao() {
if (sAtleta.collidesWith(sBarreira, true)) {
corre = false;
}
}

39 – depois do atualizaSprites colocar a verificação:
verificaColisao();

40 – build, run

*PULO

45 – adicionar função de pulo pelo toque:
public void pointerPressed(int x, int y) {
pula = true;
}

*FEEDBACK PRO USUARIO

46 – adicionar command, fora do gameloop:
Alert alert = new Alert(“Olimpiadas”, “Você conseguiu ” + barreirasPuladas + ” barreiras”, null, AlertType.INFO);
Command cmdMenu = new Command(“OK”, Command.OK, 1);
alert.addCommand(cmdMenu);
alert.setCommandListener(this);
alert.setTimeout(Alert.FOREVER);
Olimpiadas.display.setCurrent(alert);

Pronto, meus parabéns você deu o primeiro passo para se tornar um GameDev :D

Caso precise de material sobre o código acima, consulte os slides

Quer ver a apresentação? aqui!

Quemr mais material? Consulte outros Webnars!
Aproveite para ver o meu sobre XNA :D

Ganhe dinheiro colocando publicidade dentro do seu aplicativo mobile – TDC 2012 Floripa

Abaixo está os slides que apresentei no The Developers Conference 2012 em Florianópolis na trilha mobile. Nessa palestra eu mostro como utilizar o SDK da Inneractive em programas JavaME e Windows Phone 7 para colocar Banners de propaganda em aplicativos mobile e quem sabe faturar alguns trocados