miércoles, 26 de marzo de 2008

Algunos comportamientos para juegos. Parte 1

Algo mas de un mes sin actualizar, mucho tiempo desde luego. La verdad que he tenido aparcado mis proyectos personales, no estoy haciendo absolutamente nada, solo leer documentacion y teoria, pero nada de practica. Hasta esta tarde, que leyendo un par de tutoriales sobre inteligencia artificial y comportamientos en juegos, he decidido practicar un poco.
Los siguientes comportamientos, los he probado con el juego de Invaders que publiqué en mi anterior entrada, por lo que son realmente simples y solo es movimiento en el eje X (lateralmente).
Los siguientes codigos estan en Java, aunque se entienden bien sin conocer el lenguaje, y hay que tener en cuenta lo siguiente:
x es la posicion del enemigo.
vx la velocidad con la que se movera el enemigo en cada ciclo.
player es el objeto que representa al jugador.

1º Movimiento Lateral Simple
Es el movimiento mas sencillo, el enemigo se mueve como un bobalicon hacia un lado, hasta que choca con el limite de la pantalla y cambia el sentido.

x += vx;
if(x<0 || <Stage.WIDTH)
vx=-vx;

2º Movimiento persecutorio tocapelotas
En este movimiento, el enemigo se movera lateralmente persiguiendonos, en este ejemplo, a 100 pixels por la derecha o izquierda. Lo unico que hay que tener en cuenta, es controlar tambien el sentido de la velocidad , porque puede ocurrir que se quede pillado el enemigo al cumplirse siempre la condicion de que la x este por debajo de los 100pixeles de la x del jugador y este cambiando de sentido cada ciclo.

x += vx;
if((x<=player.getX()-100 && vx<0)||(x>=player.getX()+100 && vx>0))
vx=-vx;

3º Movimiento miedoso
Si habeis jugado al Zelda de super nintendo y habeis visto los enemigos que se movian siempre en sentido contrario al tuyo y cuando coincidiais, os disparaban. Os podreis hacer una idea de este movimiento.

vx=-player.getVx();
if(x<0) x=0;
else if(x>Stage.WIDTH)x=Stage.WIDTH;
x +=vx;
if(x>player.getX()-10 && x<player.getX()+10)
fire();

Esto es todo hasta el proximo mes.