Hoje concluiremos o desenvolvimento de mais um jogo.
Já temos uma versão jogável do nosso mole hunting.
Bora implementar o cronômetro de término do jogo e contagem de pontuação.
Implementamos no último tutorial uma funcionalidade importante do jogo para que haja jogabilidade: a martelada nas toupeiras. Para isso, tivemos que acionar a tela de toque e implementar um método próprio que é chamado quando acontece um toque na tela. Quando o jogador encosta o dedo na tela, é identificada qual toupeira ele quis martelar e é verificado se ela ainda está fora do buraco. Caso isso ocorra, é iniciada uma animação de atordoamento na toupeira martelada.
Nesse tutorial, nós finalizaremos a implementação desse game incluindo a contagem de pontos e o cronômetro para o término do jogo. Obviamente, também implementaremos o término após o cronômetro chegar a zero na contagem regressiva. Partiu.
Iniciaremos o tutorial adicionando duas variáveis de etiqueta e o protótipo de um método na classe “HelloWorld”. Uma etiqueta que mostra quantas toupeiras o jogador já martelou e uma que mostra o tempo restante para o fim do jogo. Como o tempo decresce a cada novo quadro mostrado, é necessário que um método seja implementado para a atualização do tempo restante. Assim, adicionaremos as etiquetas nomeadas “tempo” e “pontos” e o método nomeado “contaTempo”.
Para que as informações de pontuação e tempo corrido não se percam no decorrer do jogo, precisaremos incluir outras duas variáveis na classe “HelloWorld” só para isso. Dessa forma, abra o arquivo “HelloWorldScene.h” e adicione as seguintes linhas de código:
cocos2d::CCLabelTTF* tempo;
cocos2d::CCLabelTTF* pontos;
float tempoRestante;
int pontosAdquiridos;
void contaTempo(float dt);
logo abaixo dessa:
bool podeBater[6];
Salve esse arquivo, porque já fizemos todas as modificações necessárias. Agora abra o arquivo “HelloWorldScene.cpp” para implementarmos as funcionalidades. Antes de tudo, vamos incluir as etiquetas na tela, inicializar as variáveis que armazenam pontuação e tempo, bem como programar o método “contaTempo” para ser executado a cada quadro. Para isso, adicione as seguintes linhas de código:
HelloWorld::tempo = CCLabelTTF::create(“30.0”,“”,40);
HelloWorld::tempo->setPosition(ccp(0.9*size.width,0.9*size.height));
addChild(HelloWorld::tempo);
HelloWorld::pontos = CCLabelTTF::create(“0”,“”,40);
HelloWorld::pontos->setPosition(ccp(0.1*size.width,0.9*size.height));
addChild(HelloWorld::pontos);
HelloWorld::tempoRestante = 30.0;
HelloWorld::pontosAdquiridos = 0;
schedule(schedule_selector(HelloWorld::contaTempo));
logo ACIMA dessa:
setTouchEnabled(true);
Falta pouco … Vamos fazer com que a pontuação seja somada e atualizada na tela quando o jogador martela uma toupeira. Para isso, adicione as seguintes linhas de código:
HelloWorld::pontosAdquiridos++;
char par[4];
sprintf(par,“%i”,HelloWorld::pontosAdquiridos);
HelloWorld::pontos->setString(par);
logo após essas:
HelloWorld::toupeiras[i]->cleanup();
HelloWorld::toupeiras[i]->runAction(CCAnimate::create(CCAnimation::createWithSpriteFrames(seq,0.1)));
Note que, apenas somamos uma unidade na variável “pontosAdquiridos” e mostramos o valor dela na tela por meio da etiqueta “pontos”. Para finalizar o tutorial de hoje, adicione as seguintes linhas de código no final do arquivo:
void HelloWorld::contaTempo(float dt) {
HelloWorld::tempoRestante -= dt;
if(HelloWorld::tempoRestante<0.0)
HelloWorld::tempoRestante = 0.0;
char par[5];
sprintf(par,“%.1f”,HelloWorld::tempoRestante);
HelloWorld::tempo->setString(par);
if(HelloWorld::tempoRestante==0.0) {
CCSize size = CCDirector::sharedDirector()->getWinSize();
cleanup();
CCLabelTTF* fimDoJogo = CCLabelTTF::create(“FIM DE JOGO”,“”,60);
fimDoJogo->setPosition(ccp(size.width/2,size.height/2));
addChild(fimDoJogo);
}
}
Veja que, a cada novo quadro processado, nós decrescemos o tempo restante e o atualizamos para o jogador. Além disso, caso o tempo alcance zero, o jogo é finalizado e é mostrada na tela uma etiqueta que informa o término do jogo. Simples assim. =] Para os curiosos de plantão, segue o vídeo que mostra o gameplay do jogo.
Vimos nesse tutorial como adicionar a contagem de pontuação e cronômetro de término do jogo. Percebemos que precisávamos de duas variáveis para armazenar essas informações e um método que realiza o decréscimo do tempo a cada quadro. Também fizemos com que, quando o cronômetro chega a zero, o jogo termine.
No próximo tutorial, eu iniciarei a parte de programação da saga “Desenvolvendo um Jogo Digital do Zero”. Bora dar continuidade a esse novo desafio. Não perca essa.
Um grande abraço e até mais. []