예제 #1
0
int main (int argc, char **argv)
{
    LOG(LEVEL_INFO) << "\n\nUnBall Robot Soccer Team"
                    << "\nSimulation Module\n";

    // Parte de comunicação
    Comunicador _comunicador ("Simulador");
    _com = & _comunicador;

    inicializarComunicacao();

    // Setup pointers to drawstuff callback functions
    initDrawStuff();

    construirMundo();

    LOG(LEVEL_INFO) << "Start simulation";

    // Run simulation
    dsSimulationLoop(argc,argv,352,288,&fn);

    // Destroy world
    destruirMundo();
    dCloseODE();

    return 0;
}
예제 #2
0
void command (int cmd)
{
    switch(cmd)
    {
        /*
         * Caso esteja dando problemas na hora de enviar comandos para os robos
         * pelo teclado, certificar que o primeiro numero do arquivo
         * "enviarVelocidades.txt" nao esteja entre 0 e 5. Se isso acontecer, o
         * comando de leitura das velocidades a partir do arquivo ira impedir
         * que o teclado altere a velocidade do robo.
         */
        case 'w': case 'W': // Acelera para frente (adiciona mesma quantidade de torque em ambas rodas)
            acelerar(FRENTE, 1);
            break;

        case 's': case 'S': // Acelera para trás (subtrai mesma quantidade de torque em ambas rodas)
            acelerar(TRAS, 1);
            break;

        case 'd': case 'D': // Gira no sentido horário (adiciona torque na roda esquerda e subtrai torque na roda direita)
            acelerar(HORARIO, 2);
            break;

        case 'a': case 'A':// Gira no sentido anti-horário (adiciona torque na roda direita e subtrai torque na roda esquerda)
            acelerar(ANTIHORARIO, 2);
            break;


        // Escolhe o robô a ser comandado
        case '1':  case '2':  case '3':
        case '4':  case '5':  case '6':
            n_robot = cmd - '1';
            LOG(LEVEL_INFO) << "Robo selecionado: " << n_robot;
            break;

        // Reset da simulação
        case 'r': case 'R':
            LOG(LEVEL_INFO) << "Simulação reiniciada";
            for(int i = 0; i < 6; i++)
            {
                robot[i].mudarVelocidadeLinear(0);
                robot[i].mudarVelocidadeAngular(0);
                robot[i].voltarPosicaoInicial();
            }
            bola.resetar();
            destruirMundo();
            construirMundo();
            break;


        /*
         * Controle da bola
         *  _ _ _
         * |I|O|P|
         * I: trava ou destrava o controle externo da bola
         * O: a bola executa trajetoria linear
         * P: a bola executa trajetoria circular
         *    _
         *  _|U|_
         * |H|J|K|
         * U: bola para cima
         * J: bola para baixo
         * K: bola para direita
         * H: bola para esquerda
         */
        case 'i': case 'I':
            if (bola.podeControlar())
                bola.mudarPermissaoControle(false);
            else
                bola.mudarPermissaoControle(true);
            break;

        case 'o': case 'O':
            bola.definirAcao(BOLA_MOVIMENTAR_RETA);
            break;

        case 'p': case 'P':
            bola.definirAcao(BOLA_MOVIMENTAR_CIRCULO);
            break;

        case 'u': case 'U': // Acelera bola para frente
            bola.mudarVelocidade(bola.pegarVelocidadeX(), bola.pegarVelocidadeY() + BOLA_VELOCIDADE);
            break;

        case 'j': case 'J': // Acelera bola para trás
            bola.mudarVelocidade(bola.pegarVelocidadeX(), bola.pegarVelocidadeY() - BOLA_VELOCIDADE);
            break;

        case 'h': case 'H': // Acelera bola para esquerda
            bola.mudarVelocidade(bola.pegarVelocidadeX() - BOLA_VELOCIDADE, bola.pegarVelocidadeY());
            break;

        case 'k': case 'K':// Acelera bola para direita
            bola.mudarVelocidade(bola.pegarVelocidadeX() + BOLA_VELOCIDADE, bola.pegarVelocidadeY());
            break;
    }
}
예제 #3
0
void salir (void)
{

	bola *b;
	puntos *s;
	rayo *r;
	marca *w;

	
	// destruir los objetos del mundo
	destruirJugador (m->j);
	destruirPared (m->p);
	destruirCamara (m->c);
		
	while (m->lista)
	{

		b = m->lista;
		m->lista = sacarBola (&m->lista, b);
		destruirBola (b);
	
	}

	while (m->lr)
	{
		
		r = m->lr;
		m->lr = sacarRayo (&m->lr, r);
		destruirRayo (r);

	}

	while (m->ls)
	{
				
		s = m->ls;
		m->ls = sacarPuntos (&m->ls, s);
		destruirPuntos (s);

	}

	while (m->lw)
	{

		w = m->lw;
		m->lw = sacarMarca (&m->lw, w);
		destruirMarca (w);

	}

	// destruir el mundo
	destruirMundo (m);
	
	
	// cerrar sdl
	SDL_Quit();

	// cerrar alut
	alutExit();
    
}