예제 #1
0
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);

}
예제 #2
0
파일: juego.cpp 프로젝트: wiyarmir/itanq
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;
    }
}