Escolar Documentos
Profissional Documentos
Cultura Documentos
TCC Eduardo - Fujita 2005 PDF
TCC Eduardo - Fujita 2005 PDF
EDUARDO FUJITA
Londrina
2005
EDUARDO FUJITA
Londrina
2005
EDUARDO FUJITA
COMISSÃO EXAMINADORA
______________________________________
Prof. Dr. Pedro Paulo da Silva Ayrosa
Universidade Estadual de Londrina
______________________________________
Profª. Ms. Liana Dessandre D. Garanhani
Universidade Estadual de Londrina
______________________________________
Prof. Ms. Rafael Robson Negrão
Universidade Estadual de Londrina
Ao Prof. Dr. Pedro Paulo da Silva Ayrosa, por sua maneira descontraída de ministrar
as aulas e sua orientação na elaboração do presente trabalho.
À minha família.
RESUMO
ABSTRACT
This work approaches the main Artificial Intelligence (AI) techniques applied in the
area of game development, like finite state machines, scripts, genetic algorithms and
neural networks. Presents in a succinct way the history of AI as well as the main
characteristics of game development. Demonstrates the importance of AI as a
differential factor in the creation of more attractive games for the final consumer.
Ultimately, makes an analysis of the state-of-the-art in the researches in this area
and concludes that the tendency is the creation of games using non-deterministic
techniques, learning with its own mistakes and adapting to the playing manner of its
human opponent.
1 INTRODUÇÃO .....................................................................................................1
2.3 IA Atualmente.......................................................................................................7
3.1 Categorias..........................................................................................................15
3.3 Plataforma..........................................................................................................18
4.4.1 Construção..................................................................................................37
4.10 Flocking.............................................................................................................57
6 CONCLUSÃO ....................................................................................................62
ANEXOS ...................................................................................................................65
1
1 INTRODUÇÃO
_____________
1
Este se difere de um computador pois seu hardware é dedicado exclusivamente para a execução de
jogos. Neste trabalho não há distinção entre jogos para computador e jogos para consoles.
2
2 INTELIGÊNCIA ARTIFICIAL
2.2 Nascimento da IA
2.3 IA Atualmente
2.4 Definição
humano da máquina.
_____________
3
Non Player Character (Personagem não controlado pelo jogador, mas pela máquina).
14
3.1 Categorias
3.3 Plataforma
_____________
4
Também conhecidos como “fliperamas”.
19
Figura 1 - uma melhora é alcançada utilizando a “perseguição com linha de visão” (line-of-
sight chasing) (BOURG e SEEMAN, 2004)
22
_____________
5
Pixel: menor unidade que compõe uma imagem em um monitor ou tela de televisão.
23
Figura 3 - o algoritmo de Bresenham (esq.) nunca desenha dois pixels adjacentes no menor
eixo da reta
u = VRotate2D(-Predator.fOrientation,
(Prey.vPosition - Predator.vPosition));
u.Normalize();
_____________
6
Tile: do inglês “ladrilho”. É uma unidade que compõe um cenário em ambientes 2D. Cada cenário é
composto de uma matriz de tiles.
25
x = X cos(θ ) +Y sin(θ )
y = − X sin(θ ) + Y cos(θ )
Equação 1: transformando coordenadas globais em locais
4.1.5 Interceptação
Vr = Vpresa - Vpredador
Sr = Spresa - Spredador
Equação 2: cálculo da velocidade e posição relativa
TA = |Sr|/|Vr|
Equação 3: cálculo do tempo de abordatem (TA)
Sf = Spresa + (Vpresa)(TA)
Equação 4: posição da presa no tempo (TA) futuro
Vr = Prey.vVelocity - Predator.vVelocity;
Sr = Prey.vPosition - Predator.vPosition;
Ta = Sr.Magnitude() / Vr.Magnitude();
Sf = Prey.vPosition + (Prey.vVelocity * Ta);
u = VRotate2D(-Predator.fOrientation,(Sf - Predator.vPosition));
É pelo fato de não ser determinística, que a lógica nebulosa tem sido
bastante difundida em aplicações da vida cotidiana. Um ar condicionado, por
exemplo, ao invés de ligar e desligar seu termostado constantemente quando a
temperatura ambiente se desvinculasse da temperatura estipulada, causando danos
ao aparelho, poderia simplesmente ajustar sua potência de modo que a temperatura
ficasse próxima à ideal. Utilizando lógica nebulosa, também sería possível controlar
o sistema de freios de um metrô, fazendo com que este parasse de maneira tão
suave que seus passageiros teríam a mínima sensação de desconforto.
Neste, o computador toma decisões de acordo com o estado atual do jogador, que
é medido segundo a lógica nebulosa:
Note que “muito_forte”, “forte” e “fraco” são funções fuzzy, cujo cálculo
será visto adiante. É relevante salientar que, se fosse utilizada a lógica tradicional,
teríamos de estabelecer inúmeros limites (regras) para definir qual é o significado
de cada uma dessas funções, enquanto que na lógica nebulosa, é possível fazê-lo
com um número bem menor de regras.
4.3.2 Características
4.3.3 Fuzzificação
0; x ≤ x 0
x x0
f ( x) = − ; x 0 < x < x1
x1− x 0 x1 − x 0
1; x ≥ x1
Equação 5: função de associatividade (fórmula)
34
4.3.6 Desfuzzificação
4.4 Scripts
4.4.1 Construção
4.5.1 Características
4.5.2 Implementação
4.7 Pathfinding
_____________
7
Um poliedro convexo é aquele que, dados quaisquer dois pontos pertencentes a ele, o segmento
contendo estes pontos nas extremidades deverá estar inteiramente contido no poliedro.
45
4.7.2 Algoritmo A*
O ponto crucial aqui é escolher qual dos nós fará parte do caminho a
ser percorrido. Isto é feito utilizando uma função de avaliação F(n). Esta função é
resultado da soma da distância percorrida do nó inicial ao nó avaliado, G(n), com
uma função heurística, H(n), onde n representa o nó avaliado:
Uma vez criada a rede, ela deverá ser treinada para que funcione da
maneira esperada. Treinar uma rede neural nada mais é que ajustar os pesos, ou
seja, a força entre suas conexões. Cada peso está associado a uma entrada do
neurônio, e é representado por um número de ponto flutuante negativo ou positivo
(exercendo influência excitatória ou inibitória) na entrada. Quando uma entrada é
apresentada ao neurônio, ela é multiplicada pelo seu peso. O neurônio então soma
todas essas entradas, gerando um valor de ativação. Se este valor for maior que um
certo limiar, o neurônio gera um sinal de saída, que dependendo da topologia da
rede pode ser a saída desejada, ou uma saída que servirá como entrada para outro
neurônio.
5 3 5
4 1 1
3 5 4
4 2 2
4.10 Flocking
de situações passadas, como foi feito no jogo Magic & Mayhem, da Mythos Games.
Diante da necessidade de atacar o jogador, o jogo recorre ao seu banco de dados
procurando aquelas estratégias que surtiram efeito em situações parecidas que
ocorreram anteriormente.
Alguns jogos utilizam redes neurais que são treinadas pelos próprios
desenvolvedores e que são mais tarde “desligadas” antes de chegarem ao
consumidor. Tal abordagem pode criar uma boa IA, mas infelizmente anula
qualquer possibilidade de aprendizagem com o jogador.
6 CONCLUSÃO
REFERÊNCIAS BIBLIOGRÁFICAS
MCNEIL, Martin F.; THRO, Ellen. Fuzzy Logic: A Practical Approach. Chestnut
Hill, MA, EUA: AP Professional, 1994.
WOODCOCK, Steve. Game AI: The State of the Industry. Gamasutra, 1999.
Disponível em:<http://www.gamasutra.com/features/19990820/game_ai_01.htm>.
Acesso em 18 mai. 2005.
WOODCOCK, Steve. Game AI: The State of the Industry. Gamasutra, 2000.
Disponível em:<http://www.gamasutra.com/features/20001101/woodcock_01.htm>.
Acesso em 18 mai. 2005.
64
BIBLIOGRAFIA CONSULTADA
FUNGE, John D.; TU, Xiaoyuan. Hardcore AI for Computer Games and
Animation. In: SIGGRAPH, 1998. Wesmont, Illinois. EUA.
LAMOTHE, Andre. Building Brains into Your Games. Gamasutra. Disponível em:
<http://www.gamasutra.com/features/19970601/build_brains_into_games.htm>.
Acesso em 18 mai. 2005.
SALTZMAN, Marc. Game Creation and Careers: Insider Secrets from Industry
Experts. New Riders Publishing, 2004.
ANEXOS
currentStep=0;
pathRowTarget=endRow;
pathColTarget=endCol;
deltaRow=abs(deltaRow*2);
deltaCol=abs(deltaCol*2);
nextCol=nextCol+stepCol;
fraction=fraction +deltaRow;
pathRow[currentStep]=nextRow;
pathCol[currentStep]=nextCol;
currentStep++;
}
}
else
{
66
}
}