Ejemplo n.º 1
0
int main(){
    Snake bia;
    bia.x = 5;
    bia.y = 7;
    bia.dir = DIRE;
    bia.face = '<';

    andar(&bia);
    mostrar(bia);
    virar(&bia, -1);
    mostrar(bia);
    return 0;
}
Ejemplo n.º 2
0
void Magnetman::actualizarMaquinaEstados(real deltaT)
{
	reflejos += deltaT;

	switch(estadoMagnetman)
	{
		case CORRIENDO:
		{
			if(!puedeCorrer())
			{
				virar();
				estadoMagnetman = QUIETO;		
			}	
			break;
		}
		case SALTANDO:
		{
			if(reflejos >= REFLEJOS && disparos)
			{
				reflejos = 0;

				Megaman *megaman = obtenerMundo().obtenerMegamanCercano(obtenerPosicion());

				b2Vec2 vista = megaman->obtenerPosicion()-obtenerPosicion();

				if(b2Dot(vista,Cuerpo::versorIzquierda) > 0)
					modificarOrientacion(izquierda);
				else 
					modificarOrientacion(derecha);

				disparar(megaman->obtenerPosicion()-obtenerPosicion());
				disparos--;
			}

			if(puedeSaltar())
				estadoMagnetman = QUIETO;
			break;
		}
		case QUIETO:
		{
			
			real aleatorio = numeroAleatorio(0,1);
			
			if(aleatorio > 0.6)
			{
				saltar();
				estadoMagnetman = SALTANDO;
				disparos = CANTDISPAROS;
			}
			else
			{
				correr();
				estadoMagnetman = CORRIENDO;
			}

			reflejos = 0;
			break;
		}
	}

	#ifndef compiling_server
	/*Es mas preciso cambiarlo de esta forma que una vez por cambio de la maquina de estados.*/

	if(estaEnElAire())
		cambiar(&animacion_saltando);
	else
		cambiar(&animacion_corriendo);
	#endif
}
Ejemplo n.º 3
0
void Sparkman::actualizarMaquinaEstados(real deltaT)
{
	if(!megaman || !obtenerMundo().existeMegaman(IDTarget))
	{
		megaman = obtenerMundo().obtenerMegamanCercano(obtenerPosicion());
		IDTarget = megaman->obtenerID();
	}

	reflejos += deltaT;

	switch(estadoSparkman)
	{
		case DISPARANDO:
		{
			orientacion = obtenerOrientacion();
	
			b2Vec2 vista = megaman->obtenerPosicion()-obtenerPosicion();

			if(b2Dot(vista,Cuerpo::versorIzquierda) > 0)
				modificarOrientacion(izquierda);
			else 
				modificarOrientacion(derecha);

			disparar(megaman->obtenerPosicion()-obtenerPosicion());

			estadoSparkman = QUIETO;
			
			break;
		}
		case SALTANDO:
		{
			if(reflejos >= TIEMPOCORRIENDO)
			{
				reflejos = 0;
				dejarCorrer();
			}

			if(puedeSaltar())
				estadoSparkman = QUIETO;
			break;
		}
		case QUIETO:
		{
			
			real aleatorio = numeroAleatorio(0,1);

			modificarOrientacion(orientacion);
			
			if(puedeCorrer())
			{

				if(aleatorio < 0.5)
				{
					correr();
					saltar();
					estadoSparkman = SALTANDO;
				}
				else
				{
					estadoSparkman = DISPARANDO;
				}
			}
			else
			{
				virar();
				orientacion = obtenerOrientacion();
			}

			reflejos = 0;
			break;
		}
	}

	#ifndef compiling_server
	/*Es mas preciso cambiarlo de esta forma que una vez por cambio de la maquina de estados.*/

	if(estaEnElAire())
		cambiar(&animacion_saltando);
	else
		cambiar(&animacion_corriendo);
	#endif
}