示例#1
0
bool CGame::Start()
{
	// Esta variable nos ayudara a controlar la salida del juego...
	int salirJuego = false;

	while (salirJuego == false){
		openGlImplement.DrawStart();
		keys = (Uint8*)SDL_GetKeyboardState(NULL);
		//Maquina de estados
		switch (estadoJuego){
		case Estado::ESTADO_INICIANDO:
			IniciandoVideo();
			openGlImplement.InitGL();
			openGlImplement.InitShaders();
			CargandoObjetos();
			InicializandoStage();
			estadoJuego = Estado::ESTADO_MENU;
			break;
		case Estado::ESTADO_MENU:
			MenuActualizar();
			MenuPintar();
			break;
		case Estado::ESTADO_PRE_JUGANDO:
			nivelActual = CERO;
			vida = UNO;
			enemigosEliminados = CERO;
			estadoJuego = ESTADO_JUGANDO;
			juegoGanado = false;
			IniciarEnemigo();
			IniciarNave();
			break;
		case Estado::ESTADO_JUGANDO:
			JugandoActualizar();
			JugandoPintar();
			break;
		case Estado::ESTADO_FINALIZANDO:
			salirJuego = true;
			break;
		case Estado::ESTADO_TERMINANDO:
			TerminadoPintar();
			TerminadoActualizar();
			break;
		};

		openGlImplement.DrawEnd();

		while (SDL_PollEvent(&event))//Aqui sdl creara una lista de eventos ocurridos
		{
			if (event.type == SDL_QUIT) { salirJuego = true; } //si se detecta una salida del sdl o.....
			if (event.type == SDL_KEYDOWN) {}
		}

		//Calculando fps
		tiempoFrameFinal = SDL_GetTicks();
		while (tiempoFrameFinal < (tiempoFrameInicial + FPS_DELAY))
		{
			tiempoFrameFinal = SDL_GetTicks();
			SDL_Delay(1);
		}

		tiempoFrameInicial = tiempoFrameFinal;
		tick++;


	}
	return true;
}
示例#2
0
bool CGame::Start()
{
	// Esta variable nos ayudara a controlar la salida del juego...
	int salirJuego = false;
          
	while (salirJuego == false){		
            
		//Maquina de estados
		switch(estado){
		case Estado::ESTADO_INICIANDO:
			Iniciando();
			InicializandoStage();
			estado = ESTADO_PRE_JUGANDO;
			//estado = ESTADO_MENU;
			break;

		case Estado::ESTADO_MENU:
			menu->Pintar(); //Pinta el fondo del menú
			textos->Pintar(MODULO_TEXTOS_TITULO, 275, 150); //Pinta los textos del menú
			textos->Pintar(MODULO_TEXTOS_MENU_OPCION1, 265, 190);
			textos->Pintar(MODULO_TEXTOS_MENU_OPCION2, 278, 230);
			//textos->Pintar(MODULO_TEXTOS_MENU_OPCION1_SELECCIONADO, 380, 190);
			//textos->Pintar(MODULO_TEXTOS_MENU_OPCION2_SELECCIONADO, 393, 230);
			Menu();
			//estado = ESTADO_JUGANDO;
			break;

		case Estado::ESTADO_PRE_JUGANDO: //Estado que nos permite inicializar las variables antes de empezar a jugar
			NivelActual = 0;
			vida = 1;
			enemigosEliminados = 0;
			
			estado = ESTADO_JUGANDO;
			break;

		case Estado::ESTADO_JUGANDO:
			for (int i = 0; i < nivel[NivelActual].NumeroEnemigosVisibles; i++)
			{
				enemigoArreglo[i]->GetNaveObjeto()->Actualizar();
			}

			MoverEnemigo();
			fondo->Pintar();
			
			//SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));

			keys = SDL_GetKeyState(NULL);
			if (keys[SDLK_RIGHT])
			{
				if (!EsLimitePantalla(nave->GetNaveObjeto(), BORDE_DERECHO)) //Si no está dentro del límite de la pantalla, no mover (! para negarlo)
					nave->MoverDerecha(nivel[NivelActual].VelocidadNavePropia);
			}

			if (keys[SDLK_LEFT])
			{
				if (!EsLimitePantalla(nave->GetNaveObjeto(), BORDE_IZQUIERDO))
					nave->MoverIzquierda(nivel[NivelActual].VelocidadNavePropia);
			}

			if (keys[SDLK_UP])
			{
				if (!EsLimitePantalla(nave->GetNaveObjeto(), BORDE_SUPERIOR))
					nave->MoverArriba(nivel[NivelActual].VelocidadNavePropia);
			}

			if (keys[SDLK_DOWN])
			{
				if (!EsLimitePantalla(nave->GetNaveObjeto(), BORDE_INFERIOR))
					nave->MoverAbajo(nivel[NivelActual].VelocidadNavePropia);
			}

			if (keys[SDLK_SPACE])
			{
				nave->Disparar(NAVE_PROPIA, nivel[NivelActual].balasMaximas); //Con la barra espaciadora se manda llamar el método disparar
			}

			nave->Pintar(NAVE_PROPIA);

			for (int i = 0; i < nivel[NivelActual].NumeroEnemigosVisibles; i++)
			{
				enemigoArreglo[i]->Pintar(NAVE_ENEMIGO);
				enemigoArreglo[i]->AutoDisparar(nivel[NivelActual].balasMaximas);
			}

			/////////////////////SIMULACIÓN COLISIONES/////////////////////

			if (keys[SDLK_x]) 
			{
				//Bala enemigo-Nuestra nave
				nave->simularColision(true);
			}

			if (keys[SDLK_c])
			{
				//Nuestra bala - Nave enemigo
				int enemigoAEliminar = rand() % nivel[NivelActual].NumeroEnemigosVisibles;
				enemigoArreglo[enemigoAEliminar]->simularColision(true);
			}

			if (keys[SDLK_v])
			{
				//Nuestra nave - Nave enemigo
			}

			///////////////////////////////////////////////////////////////

			/////////////////////CONTROL DE COLISIONES/////////////////////

			for (int i = 0; i < nivel[NivelActual].NumeroEnemigosVisibles; i++)
			{
				if (enemigoArreglo[1]->estaColisionandoConBala(nave)) //Una bala del enemigo le pega a nuestra nave
					vida--;

				if (nave->estaColisionandoConBala(enemigoArreglo[i]))//Una bala de nuestra nave le pega al enemigo
				{
					enemigoArreglo[i]->setVisible(false);
					enemigosEliminados++;
					nave->simularColision(false);

					if (enemigosEliminados < nivel[NivelActual].NumeroEnemigosAEliminar)
					{
						enemigoArreglo[i]->CrearNuevo();
					}
				}
			
			}

			///////////////////////////////////////////////////////////////

			if (vida <= 0) //Cuando la vida se acaba, se va al estado Terminando
				estado = ESTADO_TERMINANDO;

			if (enemigosEliminados >= nivel[NivelActual].NumeroEnemigosAEliminar)
			{
				NivelActual++;
				//Se puede cargar otro fondo
			}

			//Los 3 casos siguientes son el primero aplicado a las demás direcciones
			//break;
			break;

		case Estado::ESTADO_TERMINANDO:
			estado = ESTADO_MENU;
			break;

		case Estado::ESTADO_FINALIZANDO:
			break;
		};

		while (SDL_PollEvent(&event))//Aquí SDL creará una lista de eventos ocurridos
		{
			if (event.type == SDL_QUIT) {salirJuego = true;}//Si se detecta una salida de SDL o...

			if (event.type == SDL_KEYDOWN){}
		}

		//Este código estará provicionalmente aquí 
		SDL_Flip(screen); //La memoria principal no tiene nada hasta que llega aquí. Aquí se pinta 
		
		//Calculando FPS
		tiempoFrameFinal = SDL_GetTicks();
		while (tiempoFrameFinal < (tiempoFrameInicial + FPS_DELAY))
			tiempoFrameFinal = SDL_GetTicks();
		SDL_Delay(2); //Hacer una pausa de 1 milisegundo en el sistema para tener un procesador no tan ocupado


		printf("Frames: %d Tiempo: %d Tiempo promedio: %f Tiempo por frame: %d FPS: %f\n", tick, SDL_GetTicks(), (float)SDL_GetTicks() / (float)tick, tiempoFrameFinal - tiempoFrameInicial, 1000.0f / (float)(tiempoFrameFinal - tiempoFrameInicial));
		tiempoFrameInicial = tiempoFrameFinal;//Marcamos el inicio
		tick++;
    }
	return true;
}
示例#3
0
	bool CGame::Start()
	{
		// Esta variable nos ayudara a controlar la salida del juego...
		int salirJuego = false;
		int i = 0;

		while (salirJuego == false)
		{

			//Maquina de estados
			switch (estado)
			{

			case Estado::ESTADO_INICIANDO: //inicializando
				printf("1.- Estado_Iniciando");
				Iniciando();
				InicializandoStage();
				estado = ESTADO_MENU;    //estado = ESTADO_MENU 
				break;
			case Estado::ESTADO_MENU:	   //MENU
				menu->Pintar();
				textos->Pintar(MODULO_FondoTexto_TITULO,160,50);
				textos->Pintar(MODULO_FondoMenu_NOMBRE,400, 410);
				Menu();
				
				
				

				//estado= ESTADO_JUGANDO
				break;

			case ESTADO_PRE_JUGANDO:
				NivelActual = 0;
				vida = 1;
				enemigosEliminados = 0;
				estado = ESTADO_JUGANDO;

				break;
			case Estado::ESTADO_JUGANDO: //JUGAR
				
				for (int i = 0; i < nivel[NivelActual].NumeroEnemigosVisibles; i++)
				{
					enemigoArreglo[i]->GetNaveObjeto()->Actualizar();
				}
				MoverEnemigo();
				fondo->Pintar();
				//SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
				keys = SDL_GetKeyState(NULL);
				if (keys[SDLK_RIGHT])
				{
					if (!EsLimitePantalla(nave->GetNaveObjeto(), BORDE_DERECHO))
						nave->MoverDerecha(nivel[NivelActual].VelocidadNavePropia);

				}
				if (keys[SDLK_LEFT])
				{
					if (!EsLimitePantalla(nave->GetNaveObjeto(), BORDE_IZQUIERDO))
						nave->MoverIzquierda(nivel[NivelActual].VelocidadNavePropia);
				}
				if (keys[SDLK_UP])
				{
					if (!EsLimitePantalla(nave->GetNaveObjeto(), BORDE_SUPERIOR))
						nave->MoverArriba(nivel[NivelActual].VelocidadNavePropia);
				}
				if (keys[SDLK_DOWN])
				{
					if (!EsLimitePantalla(nave->GetNaveObjeto(), BORDE_INFERIOR))
						nave->MoverAbajo(nivel[NivelActual].VelocidadNavePropia);
				}
				if (keys[SDLK_SPACE])
				{
					nave->Disparar(NAVE_PROPIA, nivel[NivelActual].BalasMaximas);
				}

				//////////////simulacion de coliciones
				if (keys[SDLK_x]){//bala enemigo a nuestra nave
					nave->simularColision(true);

				}

				if (keys[SDLK_c]){//nuestra bala a nave enemigo
					int enemigoAEliminar = rand() % nivel[NivelActual].NumeroEnemigosVisibles;
					enemigoArreglo[enemigoAEliminar]->simularColision(true);
				}


				if (keys[SDLK_v]){//nuestra nave a nave enemigo
				}
				///////////////////////////////////////////////
				//control de coliciones

				for (int i = 0; i<nivel[NivelActual].NumeroEnemigosVisibles; i++){
					if (enemigoArreglo[i]->estaColicionandoConBala(nave))
						vida--;
					if (nave->estaColicionandoConBala(enemigoArreglo[i])){
						enemigoArreglo[i]->setVisible(false);
						enemigosEliminados++;
						nave->simularColision(false);
						if (enemigosEliminados < nivel[NivelActual].NumeroEnemigoAEliminar){
							enemigoArreglo[i]->CrearNuevo();
						}
					}

				}

				///////////////////////////////////////
				if (vida <= 0)
					estado = ESTADO_TERMINANDO;
				if (enemigosEliminados >= nivel[NivelActual].NumeroEnemigoAEliminar){
					NivelActual++;

				}
			
				nave->Pintar(NAVE_PROPIA);
				
				for (int i = 0; i < nivel[NivelActual].NumeroEnemigosVisibles; i++)
				{
					enemigoArreglo[i]->Pintar(NAVE_ENEMIGO);
					enemigoArreglo[i]->AutoDispara(nivel[NivelActual].BalasMaximas);
				}

				if (keys[SDLK_ESCAPE])
				{
			
					
				}
				break;

			case Estado::ESTADO_TERMINANDO: //TERMINAR
				
				break;

			case Estado::ESTADO_FINALIZADO:  //FINALIZAR
				
				break;
			}
			while (SDL_PollEvent(&event))
			{
				if (event.type == SDL_QUIT) { salirJuego = true; }     //    Si se detecta una salida 
				if (event.type == SDL_KEYDOWN) {} //   una dirección (abajo) del teclado.
			}
			SDL_Flip(screen);  //guarda en memoria buffer

			//calculando FPS
			tiempoFrameFinal = SDL_GetTicks();
			while (tiempoFrameFinal < (tiempoFrameInicial + FPS_DELAY)){
				tiempoFrameFinal = SDL_GetTicks();
				SDL_Delay(1);
			}


			printf("Frames:%d Tiempo:%d Tiempo Promedio:%f Tiempo Por Frame:%d FPS:%f\n", tick, SDL_GetTicks(), (float)SDL_GetTicks() / (float)tick, tiempoFrameFinal - tiempoFrameInicial,1000.0f / (float) (tiempoFrameFinal-tiempoFrameInicial));
		    tiempoFrameInicial = tiempoFrameFinal; //Marcamos el inicio nuevamente
			tick++;
		}
		return true;
}
bool CGame::Start()
{
	// Esta variable nos ayudara a controlar la salida del juego...
	int salirJuego = false;

          int Bandera=0;

	while (salirJuego == false){

		//Maquina de estados
		switch(estado){
		case Estado::ESTADO_INICIANDO:


			Iniciando();//ACT3: Bien.

			InicializandoStage();

			//estado= ESTADO_JUGANDO;
			estado= ESTADO_MENU;
			break;
		case Estado:: ESTADO_MENU:
			menu->Pintar();
			textos->Pintar(MODULE_TEXTO_TITULO,100,50);
			textos->Pintar(MODULE_TEXTO_NOMBRE,0,400);
			Menu();
		
				//estado=ESTADO_JUGANDO;
			break;
		case Estado::ESTADO_PRE_JUGANDO:
			nivelActual=0;
			Vida=1;
			enemigosEliminados=0;
			estado=ESTADO_JUGANDO;
			break;
		case Estado::ESTADO_JUGANDO:
			//enemigo->Actualizar();
			for (int i = 0; i <nivel[nivelActual].NumeroEnemigosVisibles; i++)
			{
				enemigoArreglo[i]->GetNaveObjeto()->Actualizar();
			}
			MoverEnemigo();
			fondo->Pintar();
			//SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format,0,0,0));//Limpia la imagen
			keys=SDL_GetKeyState(NULL);
			if(keys[SDLK_RIGHT]){
				if(!EsLimitePantalla(nave->GetNaveObjeto(),BORDE_DERECHO))
					nave->MoverDerecho(nivel[nivelActual].VelocidadNavePropia);
			}

			if (keys[SDLK_LEFT])
			{
				nave->MoverIzquierdo(nivel[nivelActual].VelocidadNavePropia);
			}
			if(keys[SDLK_UP])
			{
				nave->MoverArriba(nivel[nivelActual].VelocidadNavePropia);
			}

			if(keys[SDLK_DOWN])
			{
				nave->MoverAbajo(nivel[nivelActual].VelocidadNavePropia);
			}
			if (keys[SDLK_SPACE])
			{
				nave->Disparar(NAVE_PROPIA, nivel[nivelActual].balasMaximas);
			}
			//////SIMULACION COLICIONES////////////
			if (keys[SDLK_x])//BALA ENEMIGO/NUESTRA NAVE
			{
				nave->simularColision(true);
			}
			if (keys[SDLK_c])//NUESTRA VALA/NAVE ENEMIGO
			{
				int enemigoAEliminar=rand()%nivel[nivelActual].NumeroEnemigosVisibles;
				enemigoArreglo[enemigoAEliminar]->simularColision(true);
			}
			if (keys[SDLK_v])//NUESTRA NAVE/NAVE ENEMIGO
			{

			}
			//////////CONTROL DE COLICIONES//////////
			for(int i=0;i<nivel[nivelActual].NumeroEnemigosVisibles;i++)
			{
				if(enemigoArreglo[i]->estaColisionandoConBala(nave))
					Vida--;
				if(nave->estaColisionandoConBala(enemigoArreglo[i]))
				{
					enemigoArreglo[i]->setVisible(false);
					enemigosEliminados++;
					nave->simularColision(false);
					if (enemigosEliminados < nivel[nivelActual].NumeroEnemigosAEliminar)
					{
						enemigoArreglo[i]->CrearNuevo();
					}
				}

			}


			////////////////////////////////////////

			if (Vida<=0)
				estado=ESTADO_TERMINANDO;
			if(enemigosEliminados>=nivel[nivelActual].NumeroEnemigosAEliminar){
				nivelActual++;
			//CARGAR OTRO FONDO;


		}
			nave->Pintar(NAVE_PROPIA);
			//enemigo->Pintar();
			for(int i=0; i<nivel[nivelActual].NumeroEnemigosVisibles; i++)
			{
				enemigoArreglo[i]->Pintar(NAVE_ENEMIGO);
			enemigoArreglo[i]->AutoDisparar(nivel[nivelActual].balasMaximas);
			}
			if (keys[SDLK_0])
			{
				printf("\n3.EstadoJugando");
				estado=ESTADO_TERMINANDO;
			}
			break;
		case Estado::ESTADO_TERMINANDO:
			printf("\n4.EstadoTerminando");
			estado=ESTADO_MENU;
			break;

		case Estado::ESTADO_FINALIZANDO:
			/*printf("\n5.EstadoFinalizando");
			getchar();*/
				salirJuego = true;

	

			break;
		};
		while (SDL_PollEvent(&event))//Aqui SDL creara una lista de eventos ocurridos
		{
			if (event.type==SDL_QUIT) {salirJuego=true;}//Si se detecta una salida de SDL o...
			if(event.type==SDL_KEYDOWN){ }

		}
		SDL_Flip(screen);
		tiempoFrameFinal=SDL_GetTicks();
		while(tiempoFrameFinal<(tiempoFrameInicial + FPS_DELAY))
		{
		
			tiempoFrameFinal=SDL_GetTicks();
			SDL_Delay(1);
		}
		printf("Frames:%dTiempo: %dTiempo promedio: %fTiempo por frame: %d FPS:%f\n",tick,SDL_GetTicks(),(float)SDL_GetTicks()/(float)tick,tiempoFrameFinal-tiempoFrameInicial,1000.0f/(float)(tiempoFrameFinal-tiempoFrameInicial));
		tiempoFrameInicial=tiempoFrameFinal;
		tick++;
	}
	return true;
}