Cursos / Jogos Digitais / Inteligência Artificial para Jogos / Aula
Muito bem! O jogador está optando por um lado para chutar e o goleiro está aprendendo para onde pular, mas estão faltando alguns detalhes. Mesmo que o jogador chute para direita, há maneiras diferentes de fazer isso. Ele pode chutar bem colocado no cantinho, pode dar um tiro forte, pode ser rasteiro, pode ser por cima e assim por diante. Além disso, se você quiser manter um nível de realismo aceitável, a precisão do chute pode ir desde o “chute perfeito” ao “chute à la Roberto Baggio” na copa de 94, quando o Brasil foi tetracampeão, ou os chutes da seleção brasileira na Copa América de 2011, tanto faz, foram no mesmo nível (Confira no YouTube).
Ou seja, você precisa ter um nível de erro associado às ações dos jogadores. Que podem ser de qualquer tipo, como por exemplo, a cobrança de pênaltis, passes para companheiros, cobrança de escanteio, tiro de meta, alvo do deslocamento, entre outros.
Note que a escolha que a IA precisa fazer, a princípio, não são valores dentro de um conjunto nominal de possibilidades, como “direita” ou “esquerda”. A escolha pelo nível de erro é um parâmetro dentro de uma faixa contínua de valores, como por exemplo o intervalo de números reais de 0 a 10. Existem infinitas possibilidades dentro desse intervalo e você precisa escolher uma delas. Assim, devemos tratar de forma diferente as escolhas em conjuntos discretos (ex.: “direita” e “esquerda”) das escolhas em conjuntos contínuos (ex.: números reais de 0 a 10).
O primeiro passo a ser tomado para fazer essa escolha é estabelecer qual a faixa de valores que definem os limites da ação. Ou seja, é necessário definir dois parâmetros: um referente à “ação perfeita” e o segundo à “ação desastrosa” (à la Roberto Baggio). Por exemplo, imagine que o cobrador de pênalti queira chutar no canto superior direito da trave. A ação perfeita corresponde a exatamente onde ele quer colocar a bola, enquanto a ação mais desastrosa corresponde, por exemplo, a bola ir numa direção a 2 metros de onde ele quer colocar.
A Figura 03 ilustra esse exemplo através da área que delimita um possível chute no intervalo de 0 a 2 metros de erro.
O exemplo da figura não corresponde exatamente à cobrança de pênaltis do jogo porque ele encontra-se numa “visão de cima”. Então, a faixa de erro não é um círculo como demonstrado. Porém, decidi representar esse tipo de situação porque ela é similar a diversas que são encontradas no jogo. Por exemplo, se um jogador vai dar um passe para seu companheiro de time, ele pode mirar a bola em um determinado alvo, mas errar de um certo valor que corresponde à área de um círculo.
A partir do intervalo definido, você pode usar diferentes técnicas para escolher qual o nível de erro. A técnica mais simples é gerar um valor qualquer dentro do intervalo. No exemplo dado, seria um número real entre 0 e 2. Nesse exemplo, o nível de erro em um círculo pode ser em qualquer ponto dele. Use esse valor em um sistema de coordenadas polares, de forma que possa definir exatamente o ponto onde a bola iria no chute.
O sistema de coordenadas polares tem o mesmo propósito do sistema de coordenadas cartesianas, que é definir pontos em um plano. A diferença encontra-se na forma como os pontos são definidos. Enquanto no sistema cartesiano um ponto é definido por valores em dois eixos (x e y), no sistema polar um ponto é definido por uma distância à origem e um ângulo de rotação. Por exemplo, o ponto P da Figura 04 é um ponto do plano definido através dos valores de r e α, que são respectivamente sua distância ao polo (origem do sistema de coordenada), denominada de raio, e o ângulo que ele faz com um eixo fixo em relação ao polo, chamado de coordenada angular ou azimute.
O sistema de coordenadas polares é ideal para esse caso porque ele permite gerar facilmente um ponto aleatório dentro de um círculo. O raio corresponderia ao nível de erro escolhido aleatoriamente, cujo valor é a distância em relação ao alvo do chute, e o ângulo pode ser qualquer valor (entre 0 e 360). Quaisquer que forem os valores aleatórios gerados, você terá obrigatoriamente um ponto dentro da área desejada.
Depois que você tiver o ponto representado através de um sistema de coordenadas polares, precisa transformá-lo para o sistema cartesiano, uma vez que o Unity utiliza este último. Isso é feito através das funções trigonométricas a seguir.
$$ x = r.\cos\propto y = r.\sin\propto $$
Muito bem! Você tem o ponto onde a bola irá quando o jogador chutar ou quando ele der um passe, fazer um lançamento etc. Esse ponto vai ser diferente a cada vez que a ação for realizada devido a um nível de erro inserido na ação. O erro é gerado aleatoriamente dentro de uma faixa de valores, com a mesma probabilidade de ocorrência. Isso pode ser suficiente para a maioria dos casos. Mas, para os mais atentos, essa estratégia pode ser um problema, que você terá de corrigir na próxima seção.
Versão 5.3 - Todos os Direitos reservados