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; }
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; } }
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(); }