Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Joel11

[OpenGL] Inteligência Artificial

Mensagens Recomendadas

Joel11

Ora boas noites,

estou-me a iniciar em OpenGl e estou a tentar desenvolver um programa/jogo, mas preciso de ter uma inteligencia artificial que permita procurar caminhos, por exemplo, no pacman, os fantasmas(as coisas que nos comem), batem nas paredes e escolhem para onde vão, ou procuram sempre o caminho onde nós estamos para nos poderem comer, o que pretendo é mesmo este último caso, procuro uma inteligencia que permite fazer esse tipo de busca para tentar incorporar no que já tenho

Cmps,

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

AI nao tem nada a ver com OpenGL.

Como e' o teu mapa? e' feito com matriz?

  • Voto 1

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

mesmo que o teu jogo envolva física de objectos, esse tipo de programação nunca deverá ser feito com bibliotecas de visualização.

dica para tudo (seja OpenGL ou outro qualquer) : separa sempre a lógica da aplicação/jogo da visualização !

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

tenta criar um grafo do mapa sendo os nós do grafo os cruzamentos.

depois é só escolher o menor caminho entre os objectos que pretendes mover.

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Joel11

Consegui elaborar uma solução,vou deixar aí para quem um dia se encontrar na mesmo situação que eu!Cmps

void search(void)

{

GLint board_x, board_z;

GLint up1, left1, right1;

GLint num_rnd, dir_tmp;

DWORD start_clock;

start_clock = GetTickCount() ;

switch(g_search.dir)

{

case UP : g_search.z_pos -= pace; break;

case LEFT : g_search.x_pos += pace; break;

case DOWN : g_search.z_pos += pace; break;

case RIGHT : g_search.x_pos -= pace; break;

}

if( (g_search.x_pos % edge == 0) &&

(g_search.z_pos % edge == 0) )

{

up1 = 0;

left1 = 0;

right1 = 0;

board_x = (int) ((g_search.x_pos + edge/2) / edge);

board_z = (int) ((g_search.z_pos + edge/2) / edge);

switch(g_search.dir )

{

case UP : if(board[board_x][board_z - 1] == 0)

{

up1 = 1;

}

if(board[board_x + 1][board_z] == 0)

{

right1 = 1;

}

if(board[board_x - 1][board_z] == 0)

{

left1 = 1;

}

break;

case LEFT : if(board[board_x + 1][board_z] == 0)

{

up1 = 1;

}

if(board[board_x][board_z + 1] == 0)

{

right1 = 1;

}

if(board[board_x][board_z - 1] == 0)

{

left1 = 1;

}

break;

case DOWN : if(board[board_x][board_z + 1] == 0)

{

up1 = 1;

}

if(board[board_x - 1][board_z] == 0)

{

right1 = 1;

}

if(board[board_x + 1][board_z] == 0)

{

left1 = 1;

}

break;

case RIGHT : if(board[board_x - 1][board_z] == 0)

{

up1 = 1;

}

if(board[board_x][board_z - 1] == 0)

{

right1 = 1;

}

if(board[board_x][board_z + 1] == 0)

{

left1 = 1;

}

break;

}

dir_tmp = g_search.dir;

if(up1)

{

if(left1 && right1)

{

num_rnd = rand() % 10;

if(num_rnd < 4) g_search.dir = dir_tmp;

else if(num_rnd > 6) g_search.dir = (dir_tmp + 1) & 3;

else g_search.dir = (dir_tmp - 1) & 3;

}

else

if(left1)

{

if(!(rand()%2)) g_search.dir = dir_tmp ;

else g_search.dir = (dir_tmp - 1) & 3;

}

else

if(right1)

{

if(!(rand()%2)) g_search.dir = dir_tmp ;

else g_search.dir = (dir_tmp + 1) & 3;

}

else g_search.dir = dir_tmp ;

}

else

{

if(left1 && right1)

{

if(!(rand()%2)) g_search.dir = (dir_tmp + 1) & 3;

else g_search.dir = (dir_tmp - 1) & 3;

}

else

if(left1)

{

g_search.dir = (dir_tmp - 1) & 3;

}

else

if(right1)

{

g_search.dir = (dir_tmp + 1) & 3;

}

else g_search.dir = (dir_tmp + 2) & 3 ;

}

}

while( (GetTickCount() - start_clock) < 25) ;

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.