segunda-feira, 7 de setembro de 2020

Implementando o Game Over


A forma que o Game Over é implementado neste jogo é bem simples. Quando o tempo acaba, o jogador pode continuar a se mover mas ele não consegue pegar os itens, e é exibido na tela os textos GAME OVER e Press Enter.

Nós já implementamos toda a lógica necessária para o Game Over nos outros artigos. A única parte que falta é desenhar as mensagens na tela. Vou mencionar os artigos que possuem alguma lógica relacionada ao Game Over.

O estado de Game Over é controlado por uma variável booleana chamada bGameOver que foi criada no artigo Variáveis de estado do jogo.

A única condição que leva ao fim de jogo é quando o tempo for igual a zero. Este teste é realizado na função Clock() que foi mostrada no artigo Criando um Timer em Unreal C++.

Quando o valor da variável bGameOver é true, o jogador não consegue pegar os itens, pois uma das condições testadas no momento da sobreposição com o item é que a variável bGameOver não pode ser true, como foi visto no artigo Classe TutoProjectCollectable: Funções.

O artigo Classe TutoProjectHUD: Desenhando na tela possui uma função com o nome DrawHUD() que é usada para desenhar as informações do jogo na tela. Vamos adicionar nesta função um condicional para testar se está no estado Game Over e desenhar na telas os textos GAME OVER e Press Enter. A versão completa da função DrawHUD() vai ficar assim:
void ATutoProjectHUD::DrawHUD()
{
  Super::DrawHUD();  

  FString textoHUD = FString::Printf(TEXT("Score: %d"), TutoProjectGameMode->GetScore());
  DrawText(textoHUD, FColor::Yellow, 10, 10, nullptr, 3.0f, false);

  textoHUD = FString::Printf(TEXT("Time: %d"), TutoProjectGameMode->GetTime());
  DrawText(textoHUD, FColor::Red, 300, 10, nullptr, 3.0f, false);

  textoHUD = FString::Printf(TEXT("Player Level: %d"), TutoProjectGameMode->GetPlayerLevel());
  DrawText(textoHUD, FColor::Blue, 550, 10, nullptr, 3.0f, false);

  if (TutoProjectGameMode->IsGameOver())
  {
    DrawText("GAME OVER", FColor::Red, 400, 200, nullptr, 3.0f, false);
    DrawText("Press Enter", FColor::Red, 400, 400, nullptr, 3.0f, false);
  }
}

Está feito. Concluímos a implementação deste jogo simples. Agora é só compilar o projeto e experimentar o jogo.

Este artigo conclui a parte I dos tutoriais de Unreal C++. O principal objetivo desta parte é fazer com que você tenha um primeiro contato com conceitos da linguagem C++ na Unreal Engine e veja eles sendo usados na prática. 

O projeto com código fonte está disponível neste link:

Ao abrir o projeto pela primeira vez, aparecerá uma mensagem perguntando se deseja fazer o rebuild dos módulos. Clique no botão Sim.