No artigo anterior, vimos os conceitos básicos de operadores e condicional if. Neste artigo, vamos ver estes conceitos na prática ao implementar a função ItemCollected() na classe C++ ATutoProjectGameMode. 
Esta função será chamada pela classe TutoProjectCollectable quando o jogador coletar um item no jogo. Em nosso jogo, um item é representado visualmente por uma estátua, mas veremos em outro artigo como mudar a aparência dele. 
A função ItemCollected() deve fazer as seguintes ações:
- Adicionar à pontuação do jogador, os pontos obtidos ao coletar um item que é calculado pela expressão 10 X Nível do Jogador.
 - Adicionar 1 à variável ItemCount que armazena a quantidade de itens que foram coletados.
 - Testar se o valor da variável ItemCount é múltiplo de 5. Se for verdadeiro faça as ações abaixo:
 - Adicionar 15 à variável Time (tempo).
 - Adicionar 1 à variável PlayerLevel (nível do jogador). Limitar o valor máximo do nível do jogador em 5.
 
A cada 5 itens coletados o jogador aumenta um nível e ganha 15 segundos de tempo.
A declaração da função ItemCollected() é feita no arquivo cabeçalho TutoProjectGameMode.h abaixo da declaração da função StartGame() como mostra o trecho de código abaixo. A função ItemCollected()  é public porque ela será chamada por outra classe C++. 
...
UCLASS(minimalapi)
class ATutoProjectGameMode : public AGameModeBase
{
	GENERATED_BODY()
public:
	ATutoProjectGameMode();
	void StartGame();
	void ItemCollected();
...
Eu uso reticências ... para indicar que o código fonte exibido não está completo. 
O corpo da função ItemCollected() deve ser colocado no arquivo TutoProjectGameMode.cpp abaixo da função BeginPlay():
...
void ATutoProjectGameMode::BeginPlay()
{
	Super::BeginPlay();
	StartGame();
}
void ATutoProjectGameMode::ItemCollected()
{
	Score += PlayerLevel * 10;
	ItemCount++;
	if (ItemCount % 5 == 0)
	{
		Time += 15;
		if (PlayerLevel < 5)
		{
			PlayerLevel++;
		}
	}
}
Vamos analisar cada um das ações feitas pela função ItemCollected() junto com o código fonte equivalente.
- Adicionar à pontuação do jogador, os pontos obtidos ao coletar um item que é calculado pela expressão 10 X Nível do Jogador.
 
Score += PlayerLevel * 10;
Estou usando a forma abreviada += que é um operador aritmético junto com o operador de atribuição. O operador += soma o resultado da expressão que está à direita ao valor atual da variável Score.
Uma das vantagens da linguagem C++ em relação à Blueprints é a escrita de expressões. Expressões complexas podem ser escritas em uma única linha de código C++, enquanto que em Blueprints a mesma expressão precisará de muitos nodes para ser escrita. 
- Adicionar 1 à variável ItemCount que armazena a quantidade de itens que foram coletados.
 
ItemCount++;
Estou usando o operador de incremento ++ que soma 1 ao valor atual da variável ItemCount.
- Testar se o valor da variável ItemCount é múltiplo de 5. Se for verdadeiro faça as ações abaixo.
 
if (ItemCount % 5 == 0)
O bloco de código abaixo do condicional if que é delimitado pelas chaves { } só será executado se o resultado da expressão que está dentro do parênteses for true (verdadeiro). Na expressão estou usando o operador % que retorna o resto da divisão. O operador % é conhecido como Módulo. Quando ItemCount tiver um valor que seja múltiplo de 5, o resto da divisão por 5 será 0. O operador % tem precedência em relação ao operador ==, então o resto da divisão é feito antes da comparação com 0.
- Adicionar 15 à variável Time (tempo).
 
Time += 15;
Esta linha concede ao jogador mais 15 segundos de tempo no jogo.- Adicionar 1 à variável PlayerLevel (nível do jogador). Limitar o valor máximo do nível do jogador em 5.
 
if (PlayerLevel < 5)
{
	PlayerLevel++;
}
Estou usando o condicional if para evitar que o nível do jogador fique maior que 5.