InicioHazlo Tu Mismogame maker: IA basica parte 1

Esto es slo para el software game maker
hola hoy les mostrare la primera parte de como hacer una inteligencia artificial basica; esto es para usarla
en un "compañero" o un personaje controlado por el cpu que te ayude.

el tutorial trata de que el personaje dispare al enemigo mas cercano de entre 3 enemigos diferentes.
empezemos



primero definiremos unas variables en el evento create del objeto cpu llamado "jugador2"

distancia1 = 0;
distancia2 = 0;
distancia3 = 0;

caso1 = 0;
caso2 = 0;
caso3 = 0;

enemigoreal1 = 0;
enemigoreal2 = 0;
enemigoreal2 = 0;

caso0 = false; 


en el evento step arastramos un execute code y crearemos lo siguiente:

//esto dara alas variables mencionadas el valor de la distancias de los objetos
distancia1 = distance_to_object(enemigo1);
distancia2 = distance_to_object(enemigo2);
distancia3 = distance_to_object(enemigo3);

//esto es para indicar a las variables la instancia mas cercana del objeto enemigo
caso1 = instance_nearest(x,y,enemigo1);
caso2 = instance_nearest(x,y,enemigo2);
caso3 = instance_nearest(x,y,enemigo3);

//esto para mostrar en las variables si los enemigos existen o no
enemigoreal1 = instance_exists(enemigo1);
enemigoreal2 = instance_exists(enemigo2);
enemigoreal3 = instance_exists(enemigo3);



//esto es para que se detenga si la distancia con el jugador1 es menor a 20
if distance_to_object(jugador1) < 20
{
caso0 = true
}
else
{
caso0 = false
}


despues en el evento draw arrastramos otro execute code y pondremos

en este caso primero probara si existen todos los enemigos y si el enemigo1 esta mas cerca que los demas
para despues checar si esta dentro de el rango de vision en este caso es 300 pero pueden poner lo que ustedes quieran
despues probara si esta en movimiento dependiendo si lo esta o no dibujara el sprite
si el enemigo es mayor o menor que x se dibujara ala derecha o izquierda


if enemigoreal1 = true and enemigoreal2 = true
{
if enemigoreal3 = true
{
if distance_to_point(caso1.x,caso1.y) < distance_to_point(caso2.x,caso2.y)
{
if (distance_to_point(caso1.x,caso1.y) < distance_to_point(caso3.x,caso3.y)) and distance_to_object(enemigo1) < 300
{
if caso0 = false
{
if x < caso1.x
{
draw_sprite(jugador2right,image_index,x,y)
}
else
{
draw_sprite(jugador2left,image_index,x,y)
}
}
else
{
if x < caso1.x
{
draw_sprite(jugador2right,2,x,y) // en la subimagen ponen una donde el sprite este quieto
}
else
{
draw_sprite(jugador2left,2,x,y)
}
}
}
}
}
}




esto es cuando el enemigo 2 no existe
if enemigoreal1 = true and enemigoreal2 = false
{
if enemigoreal3 = true
{
if (distance_to_point(caso1.x,caso1.y) < distance_to_point(caso3.x,caso3.y)) and distance_to_object(enemigo1) < 300
{
if caso0 = false
{
if x < caso1.x
{
draw_sprite(jugador2right,image_index,x,y)
}
else
{
draw_sprite(jugador2left,image_index,x,y)
}
}
else
{
if x < caso1.x
{
draw_sprite(jugador2right,2,x,y)
}
else
{
draw_sprite(jugador2left,2,x,y)
}
}
}
}
}


ahora es para cuando el enemigo3 no exista

if enemigoreal1 = true and enemigoreal2 = true
{
if enemigoreal3 = false
{
if distance_to_point(caso1.x,caso1.y) < distance_to_point(caso2.x,caso2.y)
{
if distance_to_object(enemigo1) < 300
{
if caso0 = false
{
if x < caso1.x
{
draw_sprite(jugador2right,image_index,x,y)
}
else
{
draw_sprite(jugador2left,image_index,x,y)
}
}
else
{
if x < caso1.x
{
draw_sprite(jugador2right,2,x,y)
}
else
{
draw_sprite(jugador2left,2,x,y)
}
}
}
}
}
}


esto es para cuando solo exista el enemigo 1

if enemigoreal1 = true and enemigoreal2 = false
{
if enemigoreal3 = false
{
if distance_to_object(enemigo1) < 300
{
if caso0 = false
{
if x < caso1.x
{
draw_sprite(jugador2right,image_index,x,y)
}
else
{
draw_sprite(jugador2left,image_index,x,y)
}
}
else
{
if x < caso1.x
{
draw_sprite(jugador2right,2,x,y)
}
else
{
draw_sprite(jugador2left,2,x,y)
}
}
}
}
}



ahora haremos los mismos pasos anteriores pero sera con el enemigo 2

if enemigoreal2 = true and enemigoreal1 = true
{
if enemigoreal3 = true
{
if distance_to_point(caso1.x,caso1.y) > distance_to_point(caso2.x,caso2.y)
{
if distance_to_point(caso2.x,caso2.y) < distance_to_point(caso3.x,caso3.y) and distance_to_object(enemigo2) < 300
{
if caso0 = false
{
if x < caso2.x
{
draw_sprite(jugador2right,image_index,x,y)
}
else
{
draw_sprite(jugador2left,image_index,x,y)
}
}
else
{
if x < caso2.x
{
draw_sprite(jugador2right,2,x,y)
}
else
{
draw_sprite(jugador2left,2,x,y)
}
}
}
}
}
}


si enemigo1 no existe

if enemigoreal2 = true and enemigoreal1 = false
{
if enemigoreal3 = true
{
if distance_to_point(caso2.x,caso2.y) < distance_to_point(caso3.x,caso3.y) and distance_to_object(enemigo2) < 300
{
if caso0 = false
{
if x < caso2.x
{
draw_sprite(jugador2right,image_index,x,y)
}
else
{
draw_sprite(jugador2left,image_index,x,y)
}
}
else
{
if x < caso2.x
{
draw_sprite(jugador2right,2,x,y)
}
else
{
draw_sprite(jugador2left,2,x,y)
}
}
}
}
}


si enemigo3 no existe

if enemigoreal2 = true and enemigoreal1 = true
{
if enemigoreal3 = false
{
if distance_to_point(caso1.x,caso1.y) > distance_to_point(caso2.x,caso2.y)
{
if distance_to_object(enemigo2) < 300
{
if caso0 = false
{
if x < caso2.x
{
draw_sprite(jugador2right,image_index,x,y)
}
else
{
draw_sprite(jugador2left,image_index,x,y)
}
}
else
{
if x < caso2.x
{
draw_sprite(jugador2right,2,x,y)
}
else
{
draw_sprite(jugador2left,2,x,y)
}
}
}
}
}
}



si enemigo 1 y 3 no existen

if enemigoreal2 = true and enemigoreal1 = false
{
if enemigoreal3 = false
{
if distance_to_object(enemigo2) < 300
{
if caso0 = false
{
if x < caso2.x
{
draw_sprite(jugador2right,image_index,x,y)
}
else
{
draw_sprite(jugador2left,image_index,x,y)
}
}
else
{
if x < caso2.x
{
draw_sprite(jugador2right,2,x,y)
}
else
{
draw_sprite(jugador2left,2,x,y)
}
}
}
}
}


ahora me saltare lo del enemigo3 para que no se haga mucho pero ya saben copean los pasos y cambian los valores por los del enemigo 3

ahora si los enemigos estan fuera de su alcanze mirara hacia el jugador

if distancia1 > 300 and  distancia2 > 300
{
if distancia3 > 300
{
if caso0 = false
{
if x < jugador1.x
{
draw_sprite(jugador2right,image_index,x,y)
}
else
{
draw_sprite(jugador2left,image_index,x,y)
}
}
else
{
if x < jugador1.x
{
draw_sprite(jugador2right,2,x,y)
}
else
{
draw_sprite(jugador2left,2,x,y)
}
}
}
}


todos estos codigos sirven para que el jugador2 o cpu miere hacia los enemigo alos que dispara dentro de un rango de vision

esto es la primera parte de este tutorial, pronto hare la segunda parte que tratara de los disparos.




Datos archivados del Taringa! original
21puntos
1,574visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
7visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

c
chato556🇦🇷
Usuario
Puntos0
Posts8
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.