示例#1
0
	void CGame::MoverEnemigo()
	{
		
		for (int i = 0; i < nivel[NivelActual].NumeroEnemigosVisibles; i++)
			{
				//// paso 0
				if (enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual() == 0)
					if (!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(), BORDE_DERECHO))
					{
					enemigoArreglo[i]->GetNaveObjeto()->MoverX(nivel[NivelActual].VelocidadNaveEnemigo);
					}
					else
					{
						enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
					}
				//// paso 1
				if (enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual() == 1)
					if (!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(), BORDE_INFERIOR))
					{
					enemigoArreglo[i]->GetNaveObjeto()->MoverY(nivel[NivelActual].VelocidadNaveEnemigo);//ABAJO
					}
					else
					{

						enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
					}

				//// paso 2
				if (enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual() == 2)
					if (!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(), BORDE_IZQUIERDO))
						enemigoArreglo[i]->GetNaveObjeto()->MoverX(-nivel[NivelActual].VelocidadNaveEnemigo);//IZQUIERDA

					else
					{

						enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
					}
				//// paso 3
				if (enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual() == 3)
					if (!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(), BORDE_SUPERIOR))
					{
					enemigoArreglo[i]->GetNaveObjeto()->MoverY(-nivel[NivelActual].VelocidadNaveEnemigo);//ABAJO
					}
					else
					{

						enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
						}
					// if (enemigo->ObtenerPasoActual() == 3)
					// if (!EsLimitePantalla(enemigo, BORDE_INFERIOR))
					// ENEMIGO->MOVER(1); //ABAJO
			}
	}
示例#2
0
void CGame::MoverEnemigo()
{
	for (int i = 0; i < nivel[NivelActual].NumeroEnemigosVisibles; i++)
	{
		//--------------------PASO 0--------------------//
		if (enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual() == 0)
			if (!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(), BORDE_DERECHO))
				enemigoArreglo[i]->GetNaveObjeto()->MoverX(nivel[NivelActual].VelocidadNaveEnemigo); //Derecha
			else
			{
				enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
				enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
			}

		//--------------------PASO 1--------------------//
		if (enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual() == 1)
			if (!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(), BORDE_INFERIOR))
				enemigoArreglo[i]->GetNaveObjeto()->MoverY(nivel[NivelActual].VelocidadNaveEnemigo); //Abajo 
			else
			{
				enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
				enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
			}

		//--------------------PASO 2--------------------//
		if (enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual() == 2)
			if (!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(), BORDE_IZQUIERDO))
				enemigoArreglo[i]->GetNaveObjeto()->MoverX(-nivel[NivelActual].VelocidadNaveEnemigo); //Izquierda
			else
			{
				enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
				enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
			}

		//--------------------PASO 3--------------------//
		if (enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual() == 3)
			if (!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(), BORDE_INFERIOR))
				enemigoArreglo[i]->GetNaveObjeto()->MoverY(nivel[NivelActual].VelocidadNaveEnemigo); //Abajo
			else
			{
				enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
				enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
			}
	}
	
}
示例#3
0
void CGame::MoverEnemigo(){
	/*if(enemigo->ObtenerPasoActual()==0)
		if(!EsLimitePantalla(enemigo,BORDE_DERECHO))
			enemigo->Mover(1);
		else{
			enemigo->IncrementarPasoActual();
			enemigo->IncrementarPasoActual();
		}
	if(enemigo->ObtenerPasoActual()==0)
		if(!EsLimitePantalla(enemigo,BORDE_IZQUIERDO))
			enemigo->Mover(1);
		else{
			enemigo->IncrementarPasoActual();
			enemigo->IncrementarPasoActual();
		}
		*/ //esto tambien es de enemigo


		for(int i=0;i<10;i++){
			

	if(enemigoArreglo[i]->ObtenerPasoActual()==0)
		if(!EsLimitePantalla(enemigoArreglo[i],BORDE_DERECHO))
			enemigoArreglo[i]->Mover(1);
		else{
			enemigoArreglo[i]->IncrementarPasoActual();
			enemigoArreglo[i]->IncrementarPasoActual();
		}

		//*****************************//
	if(enemigoArreglo[i]->ObtenerPasoActual()==2)
		if(!EsLimitePantalla(enemigoArreglo[i],BORDE_IZQUIERDO))
			enemigoArreglo[i]->Mover(-1);
		else{
			enemigoArreglo[i]->IncrementarPasoActual();
			enemigoArreglo[i]->IncrementarPasoActual();
		}
		}
}   void CGame::Menu(){
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: //INICIALIZAR
		Iniciando();
		estado= Estado_Jugando;
		
		//estado=Estado::Estado_Menu;
			
			break;
		case Estado::Estado_Menu:
			menu->Pintar();
			textos->Pintar(MODULO_TEXTO_TITULO,169,50);
			textos->Pintar(MODULO_TEXTO_NOMBRE,300,390);
			Menu();
			//textos->Pintar(MODULO_TEXTO_MENU_OPCION1,300,220);
			//textos->Pintar(MODULO_TEXTO_MENU_OPCION2,300,270);

			
			break;
		case  Estado::Estado_Jugando:	//JUGAR	
			//estado=Estado_Jugando;
			for(int i=0;i<10;i++)
			{
				enemigoArreglo[i]->Actualizar();
			}
			//enemigo->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, BORDE_DERECHO))
				nave->Mover(10);
			}
			if (Keys[SDLK_LEFT])
			{
				if(!EsLimitePantalla(nave, BORDE_IZQUIERDO))
				nave->Mover(-10);
			}
			
			nave->Pintar();
			//enemigo->Pintar();
			for(int i=0;i<10;i++)
			{
				enemigoArreglo[i]->Pintar();
			}
			
			
			break;
		case  Estado::Estado_Terminando: //SALIR
			

		   salirJuego = true;
		break;
		case  Estado::Estado_Finalizando:
			
			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) { }
			}

		// este codigo estara provicionalmente aqui
		SDL_Flip(screen);
		//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;
}
void CGame::MoverEnemigo()
{
	//if(enemigo->ObtenerPasoActual()==0)
	//if(!EsLimitePantalla(enemigo,BORDE_DERECHO))
	//enemigo->Mover(1); //DERECHA
	//else
	//{
	//	enemigo->IncrementarPasoActual();
	//	enemigo->IncrementarPasoActual();
	//}
	////if(enemigo->ObtenerPasoActual()==1)
	//	//if(!EsLimitePantalla(enemigo, BORDE_INFERIOR))
	//		//enemigo->Mover(1); ABAJO
	//if(enemigo->ObtenerPasoActual()==2)
	//	if(!EsLimitePantalla(enemigo, BORDE_IZQUIERDO))
	//		enemigo->Mover(-1); //IZQUIERDA
	//else
	//{
	//	enemigo->IncrementarPasoActual();
	//	enemigo->IncrementarPasoActual();
	//}
	//
	////if(enemigo->ObtenerPasoActual()==3)
	//	//if(!EsLimitePantalla(enemigo, BORDE_INFERIOR))
	//		//enemigo->Mover(1); //ABAJO


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		for(int i=0;i<10;i++)
		{
		
        /////// PASO 0 ////////
		if(enemigoArreglo[i]->ObtenerPasoActual()==0)
	if(!EsLimitePantalla(enemigoArreglo[i],BORDE_DERECHO))
	enemigoArreglo[i]->Mover(5); //DERECHA
	else
	{
		enemigoArreglo[i]->IncrementarPasoActual();
		enemigoArreglo[i]->IncrementarPasoActual();
	}
	 ////////////////////PASO 1//////////////////
	//if(enemigoArreglo[i]->ObtenerPasoActual()==1)
		//if(!EsLimitePantalla(enemigo, BORDE_INFERIOR))
			//enemigoArreglo[i]->Mover(1); ABAJO

	    //////////////PASO 2/////////////////////
	if(enemigoArreglo[i]->ObtenerPasoActual()==2)
		if(!EsLimitePantalla(enemigoArreglo[i], BORDE_IZQUIERDO))
			enemigoArreglo[i]->Mover(-5); //IZQUIERDA
	else
	{
		enemigoArreglo[i]->IncrementarPasoActual();
		enemigoArreglo[i]->IncrementarPasoActual();
	}

		//////////////// PASO 3  ///////////////////
	
	//if(enemigoArreglo[i]->ObtenerPasoActual()==3)
		//if(!EsLimitePantalla(enemigo, BORDE_INFERIOR))
			//enemigoArreglo[i]->Mover(1); //ABAJO

		}

				
}
示例#6
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();
			estado = ESTADO_MENU;
			
			break;
		case Estado::ESTADO_MENU:
			menu->Pintar();
			textos->Pintar(MODULO_TEXTO_TITULO,150,50);
			textos->Pintar(MODULO_TEXTOS_NOMBRE,200,440);
			Menu();
			estado=ESTADO_JUGANDO;
			break;
			
		case Estado::ESTADO_JUGANDO:
			
			printf("\n3. ESTADO_JUGANDO");
			
			for(int i=0;i<10;i++){
				enemigoArreglo[i]->Actualizar();
			}
			MoverEnemigo();
			
			SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format,0,0,0)); // Color de pantalla y velocidad
			
			keys = SDL_GetKeyState(NULL);
			if(keys[SDLK_RIGHT]){
				if(!EsLimitePantalla(nave, BORDE_DERECHO))
					nave->Mover(1);
			}
			if(keys[SDLK_LEFT]){
		    nave->Mover(-1);
			}
			nave->Pintar();
			
			for(int i=0; i<10;i++)
			enemigoArreglo[i]->Pintar();
		
			break;
			getchar();
			break;
		case Estado::ESTADO_TERMINANDO:
			
			printf("\n4. ESTADO_TERMINANDO");
			getchar();
			break;
		case Estado::ESTADO_FINALIZANDO:
			
			printf("\n5. ESTADO_FINALIZANDO");
			getchar();
			salirJuego = false;
			Finalize();
			break;
		}
		while(SDL_PollEvent(&event)) // aqui se creara una lista de events ocurridos
		{
			if(event.type == SDL_QUIT) {salirJuego = true;} // si se detecta una salida de SDL
			if(event.type == SDL_KEYDOWN) {  }
		}

		//Este codigo estara provicionalmente aqui.
		SDL_Flip(screen);
	    //Calculando FPS
		tiempoFrameFinal=SDL_GetTicks();
		printf("Frames:%d Tiempo:%d Tiempo Promedio:%f Tiempo por Frame:%d \n",tick,SDL_GetTicks(),(float)SDL_GetTicks()/(float)tick,tiempoFrameFinal-tiempoFrameInicial);
		tiempoFrameInicial=tiempoFrameFinal;//Marcamos el inicio nuevamente
		tick++;
		
	}
	return true;
}
示例#7
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();
			//estado =ESTADO_JUGANDO;
			inicialicializandoStage();
			estado=ESTADO_MENU;
			break;
		case Estado ::ESTADO_MENU:
			menu->Pintar();
			textos->Pintar(MODULO_TEXTOS_TITULO,150,50);
			textos->Pintar(MODULO_TEXTOS_NOMBRE,0,450);
			Menu();
		//estado=ESTADO_JUGANDO;
			break;

		case Estado::ESTADO_PREJUGANDO:
			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->MoverDerecha(nivel[nivelActual].velocidadNavePropia);
			}//Los 3 casos siguientes son el primero aplicando a las demas direcciones
			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 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[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 (nave->estaColisionandoConNaveEnemigo())
				{

				}*/
			}	

			////////////////////////////////////////////////////////////////
			
			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);
				}
			//nave->Pintar();
			break;
		case Estado ::ESTADO_TERMINANDO:
			estado=ESTADO_JUGANDO;
			break;
		case Estado ::ESTADO_FINALIZANDO:
			salirJuego = true;
			break;
		};
		while(SDL_PollEvent(&event))//Aque SDL creara una lista de eventes ocurridos
		{
			if(event.type==SDL_QUIT){salirJuego=true;}//Si se detecta una salida de SDL o...
			if(event.type==SDL_KEYDOWN){}
		}
		SDL_Flip(screen);//Este codigo esta provicionalmente aqui
		//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;
		tick++;
	}
	return true;
}
示例#8
0
void CGame::MoverEnemigo()
{
//	if(enemigo->ObtenerPasoActual()==0)
//		if(!EsLimitePantalla(enemigo,BORDE_DERECHO))
//	         enemigo->Mover(1);//Derecha
//		else
//		{
//			enemigo->IncrementarPasoAcutal();
//			//enemigo->IncrementarPasoAcutal();
//		}
//	if(enemigo->ObtenerPasoActual()==1)
//		if(!EsLimitePantalla(enemigo,BORDE_INFERIOR))
//			enemigo->Mover2(1);
//		else
//		{
//			enemigo->IncrementarPasoAcutal();
//		}
//	if(enemigo->ObtenerPasoActual()==2)
//		if(!EsLimitePantalla(enemigo,BORDE_IZQUIERDO))
//			enemigo->Mover(-1);
//		else
//		{
//			enemigo->IncrementarPasoAcutal();
//		}
//
//	if(enemigo->ObtenerPasoActual()==3)
//		if(!EsLimitePantalla(enemigo,BORDE_INFERIOR))
//			enemigo->Mover2(1);
//		else
//		{
//			enemigo->IncrementarPasoAcutal();
//		}
//
		for (int i = 0; i < nivel[nivelActual].numeroEnemigosVisibles; i++)
		{
			if(enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual()==0)
				if(!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(),BORDE_DERECHO))
					{
						enemigoArreglo[i]->GetNaveObjeto()->Mover(nivel[nivelActual].velocidadNaveEnemigo);//Derecha
					}
				else
					{
						enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoAcutal();
						//enemigoArreglo[i]->IncrementarPasoAcutal();
					}
			if(enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual()==1)
				if(!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(),BORDE_INFERIOR))
					{
						enemigoArreglo[i]->GetNaveObjeto()->Mover2(nivel[nivelActual].velocidadNaveEnemigo);
					}
				else
					{
						enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoAcutal();
					}
			if(enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual()==2)
				if(!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(),BORDE_IZQUIERDO))
					{	
						enemigoArreglo[i]->GetNaveObjeto()->Mover(-nivel[nivelActual].velocidadNaveEnemigo);
					}
				else
					{
						enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoAcutal();
						//enemigoArreglo[i]->IncrementarPasoAcutal();
					}
			if(enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual()==3)
				if(!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(),BORDE_SUPERIOR))
				{	enemigoArreglo[i]->GetNaveObjeto()->Mover2(-nivel[nivelActual].velocidadNaveEnemigo);}
				else
				{
					enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoAcutal();
				}
}
}
示例#9
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;
}
示例#10
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;
}
示例#11
0
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;
}
示例#12
0
void CGame::MoverEnemigo()
{
	//if(enemigo->ObtenerPasoActual()==0)
	//    if(!EsLimitePantalla(enemigo,BORDE_DERECHO))
	//	enemigo->Mover(15);//DERECHA
	//	else{
	//		enemigo->IncrementarPasoActual();
	//        enemigo->IncrementarPasoActual();
	//		}
	/*if(enemigo->ObtenerPasoActual()==1)
		if(!EsLimitePantalla(enemigo,BORDE_INFERIOR))
			enemigo->Mover(1);*/
   /* if(enemigo->ObtenerPasoActual()==2)
		if(!EsLimitePantalla(enemigo,BORDE_IZQUIERDO))
			enemigo->Mover(-15);
	else{
			enemigo->IncrementarPasoActual();
	        enemigo->IncrementarPasoActual();
			}*/
  /*if(enemigo->ObtenerPasoActual()==3)
       if(!EsLimitePantalla(enemigo,BORDE_INFERIOR))
		   enemigo->Mover(1);*/

	for (int i = 0; i <nivel[nivelActual].NumeroEnemigosVisibles; i++)
	{

		if(enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual()==0)
			if(!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(),BORDE_DERECHO))
				enemigoArreglo[i]->GetNaveObjeto()->Mover(nivel[nivelActual].VelocidadNaveEnemigo);//DERECHA
		else{
			enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
	       // enemigoArreglo[i]->IncrementarPasoActual();
		}

		if(enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual()==1)
		if(!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(),BORDE_INFERIOR))
			enemigoArreglo[i]->GetNaveObjeto()->Mover2(nivel[nivelActual].VelocidadNaveEnemigo);
		else
		{
			enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
		}

		if(enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual()==2)


		if(!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(),BORDE_IZQUIERDO))
			enemigoArreglo[i]->GetNaveObjeto()->Mover(-nivel[nivelActual].VelocidadNaveEnemigo);
		else
		{
			//enemigoArreglo[i]->IncrementarPasoActual();
	        enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
		}

  if(enemigoArreglo[i]->GetNaveObjeto()->ObtenerPasoActual()==3)
       if(!EsLimitePantalla(enemigoArreglo[i]->GetNaveObjeto(),BORDE_SUPERIOR))
		   enemigoArreglo[i]->GetNaveObjeto()->Mover2(-nivel[nivelActual].VelocidadNaveEnemigo);
	   else
	   {
		   enemigoArreglo[i]->GetNaveObjeto()->IncrementarPasoActual();
	   }
	

	}
	
	}