Tutorial: Desenvolvendo um jogo ao estilo Mole Hunting – Parte 4: HUDs e término do jogo

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. []

Santiago Viertel

Santiago Viertel

Formado em Bacharelado em Ciência da Computação (UDESC), mestre e doutorando em Análise de Algoritmos (UFPR). Foi programador da Céu Games por 8 anos. Possui a preferência por jogos de estratégia e de tiro em primeira pessoa. Jogando bastante DotA 2, Left 4 Dead 2 e Age of Empires II HD.

Send this to a friend