Ajuste de parametros - Canhao

Sobre o ajuste de parâmetro
Esta é a forma mais simples de aprendizagem. Composta por procedimentos bem definidos para resolução de problemas em um número limitado de etapas. A solução pode ser a melhor encontrada entre todos os tipos de aprendizagem, mas também pode ser uma solução próxima a melhor.

Funcionamento
Para o funcionamento deste canhão foram passados alguns procedimentos específicos que serão explicados melhor abaixo.

Declaração das variáveis
Achei necessário a declaração das seguintes variáveis: AnguloAtual, AnguloAntigo, Distância, Ajuste, Maior Erro e Bateu.Como os valores para uma melhor solução encontrada podem não ser inteiros todas as variáveis com exceção da booleana Bateu são do tipo float. De forma com que todos essas variáveis sejam públicas para ser possível a visualização de todas à cada interação.

Início do Programa
Para a primeira interação é declarado o valor do AnguloAtual = 0, o valor de Ajuste = 15, MaiorErro = 1,5f e Bateu=false.

Após a primeira interação
Após a primeira interação é necessário fazer algumas verificações.Estas verificações estarão em loop até que o projétil atinja o alvo.As verificações são :
 * Verificar se o projétil caiu: Uma das maneiras para fazer essa verificação e foi a que eu achei mais fácil foi fazer a verificação da posição do projétil no eixo y. Caso esta posição seja maior que 0 significa que o projétil ainda não atingiu o chão, se ele for menor ou igual a 0 significa que o projétil significa que ele atingiu ou passou do chão. Se ele atingiu o chão passamos para a próxima etapa.
 * Calcular a distância do projétil: A distância é calculada pela subtração entre a posição do projétil ao atingir o chão e a posição do alvo. Dependendo do valor desta distância iremos cair algum dos 3 casos a seguir.
 * 1) Passou do alvo: Se a distância for maior que a variável MaiorErro, o valor da variável ajuste será alterado para a metade do valor  atual da variável ajuste.
 * 2) Não alcançou o Alvo: Se a distância for menor que o valor da variável MaiorErro negativo, a variável AnguloAntigo vai receber o valor da variável AnguloAtual e a variável AngulosAtual será atualizado com a soma da variável AnguloAtual com a variável Ajuste.
 * 3) Acertou o Alvo: Se o projétil atingir o alvo atribuímos true à booleana Bateu, o que acarreta no encerramento do loop.

Aplicação em jogo
Este projeto pode ser utilizado na implementação de um NPC que tenta acertar o jogador, mostrando ao jogador que o NPC está evoluindo para a angulação e a força necessária e automaticamente obriga o jogador a não ficar parado por muito tempo.

Vídeo de funcionamento
Link.

Página escrita por : Carlos A. B. Mariano - 467072 - 6º período de Tecnologia em Jogos Digitais - Pela Pontifícia Universidade Católica de Minas Gerais.