void main() { Consola consola; Nave Apollo; bool jogoActivo = false, naveDestruida = false, tripulacaoMorta = false; const int distanciaFixa = 4000; const int distanciaPorNivel = 1000; int distanciaTotal = 0; preparaConsola(consola); desenhaMoldura(consola); vector<string> opcoes; opcoes.push_back("Sair"); opcoes.push_back("Listar"); opcoes.push_back("Configurar Nave"); opcoes.push_back("Configurar Tripulacao"); opcoes.push_back("Pesquisar sala"); opcoes.push_back("Iniciar Jogo"); opcoes.push_back("Dificuldade"); opcoes.push_back("Auto Configurar Nave");//Opção para testes mais rápido int opcao = 0; do { consola.clrscr(); desenhaMoldura(consola); opcao = escolheOpcao(opcoes, consola, 25, 10); switch (opcao) { case 0: cout << "\nSair\n"; break; case 1: consola.gotoxy(1, 1); cout << Apollo.getAsString() << endl; consola.gotoxy(1, 57); cout << "Prima qualquer tecla para continuar..."; consola.getch(); break; case 2: opcaoConfigurarNave(Apollo, consola); break; case 3: if (!Apollo.naveConfiguradaSalas()) { consola.gotoxy(1, 54); consola.setTextColor(consola.VERMELHO_CLARO); cout << "A nave nao esta completamente configurada. Enquanto nao estiver"; consola.gotoxy(1, 55); cout << "toda configurada nao podera configurar a tripulacao."; consola.gotoxy(1, 57); consola.setTextColor(consola.BRANCO); cout << "Prima qualquer tecla para continuar."; consola.getch(); } else opcaoConfigurarTripulacao(Apollo, consola, jogoActivo); break; case 4:opcaoPesquisarSala(Apollo); break; case 5: if (!Apollo.naveConfiguradaSalas()) { consola.gotoxy(1, 54); consola.setTextColor(consola.VERMELHO_CLARO); cout << "A nave nao esta completamente configurada. Enquanto nao estiver"; consola.gotoxy(1, 55); cout << "toda configurada nao podera configurar a tripulacao."; consola.gotoxy(1, 57); consola.setTextColor(consola.BRANCO); cout << "Prima qualquer tecla para continuar."; consola.getch(); } else { //Ciclo de jogo jogoActivo = true; Apollo.resetDistanciaPercorrida(); n_turnos = 1; distanciaTotal = distanciaFixa + distanciaPorNivel * nivel; while (1) { //Inicio de turno inicioTurno(Apollo, consola); if ((naveDestruida = Apollo.statusNave()) || (tripulacaoMorta = Apollo.naveConfiguradaTripulantes())) break; Interface(consola, Apollo); //Fase de Ordens faseOrdens(Apollo, consola, jogoActivo); //Fim de turno fimTurno(Apollo, consola); if ((naveDestruida = Apollo.statusNave()) || (tripulacaoMorta = Apollo.naveConfiguradaTripulantes())) break; //Avanço da nave Apollo.avancaNave(); //Eventos eventos(Apollo, n_turnos); if ((naveDestruida = Apollo.statusNave()) || (tripulacaoMorta = Apollo.naveConfiguradaTripulantes())) break; n_turnos++; if (Apollo.getDistanciaPercorrida() >= distanciaTotal) break; } jogoActivo = false; if (naveDestruida) { Interface(consola, Apollo); consola.gotoxy(18, 40); cout << "Distancia percorrida: " << Apollo.getDistanciaPercorrida(); consola.gotoxy(18, 42); cout << "TURNO: " << n_turnos << endl; Apollo.mostraIntegridadeSalas(Apollo, consola); Apollo.mostraOxigenioSalas(Apollo, consola); Apollo.mostraEfeitosAmbientaisSalas(Apollo, consola); consola.setTextColor(consola.VERMELHO_CLARO); consola.gotoxy(1, 57); cout << "Nave destruida: Fim de Jogo"; consola.setTextColor(consola.BRANCO); consola.getch(); } else if (tripulacaoMorta) { Interface(consola, Apollo); consola.gotoxy(18, 40); cout << "Distancia percorrida: " << Apollo.getDistanciaPercorrida(); consola.gotoxy(18, 42); cout << "TURNO: " << n_turnos << endl; Apollo.mostraIntegridadeSalas(Apollo, consola); Apollo.mostraOxigenioSalas(Apollo, consola); Apollo.mostraEfeitosAmbientaisSalas(Apollo, consola); consola.setTextColor(consola.VERMELHO_CLARO); consola.gotoxy(1, 57); cout << "Tripulacao Morta: Fim de Jogo"; consola.setTextColor(consola.BRANCO); consola.getch(); } else { consola.setTextColor(consola.VERDE_CLARO); consola.gotoxy(1, 57); cout << "Chegou ao destino - " << Apollo.getDistanciaPercorrida() << " / " << distanciaTotal; consola.setTextColor(consola.BRANCO); consola.getch(); } } break; case 6: ; setNivel(consola); break; case 7: break; } } while (opcao != 0); }
void Juego::Jugar() {//Bucle principal inicia_SDL(); fond = "menu.png"; # ifdef DEB cout << "\tcontrolador>Cargando lista de mapas" << endl; # endif cargarMapList("lista.lst"); # ifdef DEB cout << "\tcontrolador>Creando Pincel" << endl; # endif pincel = new Dibujante(pantalla, "tanque.png", "enemigos.png", "bala.png", "objetos.png"); cambiaEstado(MENU); cout << "amos al bucle, jugando es " << jugando << endl; SDL_Event evento; while (jugando) { if (SDL_GetTicks() - tiempo_gr >= TLIMGR) {//siLimiteGraficos ~30ms pintadas(); SDL_Flip(pantalla); tiempo_gr = SDL_GetTicks(); } if (SDL_GetTicks() - tiempo_ev >= TLIMEV) {//temporizacion//siLimiteEventos ~5ms while (SDL_PollEvent(&evento)) { switch (evento.type) { case SDL_MOUSEBUTTONDOWN: actMouse(true); break; case SDL_MOUSEBUTTONUP: actMouse(false); break; case SDL_MOUSEMOTION: actMouse(evento.motion.x, evento.motion.y); break; case SDL_KEYUP: tecla_libre(evento.key.keysym.sym); break; case SDL_KEYDOWN: if (evento.key.keysym.sym == SDLK_ESCAPE) { cambiaEstado(SALIR); break; } else if (evento.key.keysym.sym == SDLK_f) { // Si pulsamos f pasamos a pantalla completa if (!SDL_WM_ToggleFullScreen(pantalla)) { # ifdef DEB cout << "main>No se puede pasar a pantalla completa." << endl; # endif } } else { tecla_pulsada(evento.key.keysym.sym); } break; case SDL_QUIT: # ifdef DEB cout << "Juego>Cerrando" << endl; # endif jugando = false; break; } } eventos(); tiempo_ev = SDL_GetTicks(); } //cout << "l00p!"<<endl; } }