Esempio n. 1
0
void moverEnemigoEnDireccion(t_enemigo * enemigo, char * orientacion1, int orientacion2){
	/*//TODO no estaría esquivando la caja

	if(orientacion1 == horizontal)
		enemigo->posicion->posX = enemigo->posicion->posX + orientacion2;
	else if(orientacion1 == vertical)
		enemigo->posicion->posY = enemigo->posicion->posY + orientacion2;
	*/

	if(orientacion1 == horizontal){
		if(hayCajaOExcedeLimite(enemigo->posicion->posX + orientacion2, enemigo->posicion->posY)){
			enemigo->cantTurnosEnL = -1;
			enemigo->posicion->posX = enemigo->posicion->posX + (orientacion2 * -1);
			pthread_mutex_lock(&mx_lista_items);
			MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
			pthread_mutex_unlock(&mx_lista_items);

		}else{
			enemigo->posicion->posX = enemigo->posicion->posX + orientacion2;
			pthread_mutex_lock(&mx_lista_items);
			MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
			pthread_mutex_unlock(&mx_lista_items);

		}
	}else if(orientacion1 == vertical){
		if(hayCajaOExcedeLimite(enemigo->posicion->posX, enemigo->posicion->posY + orientacion2)){
			enemigo->cantTurnosEnL = -1;
			enemigo->posicion->posY = enemigo->posicion->posY + (orientacion2 * -1);
			pthread_mutex_lock(&mx_lista_items);
			MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
			pthread_mutex_unlock(&mx_lista_items);

		}else{
			enemigo->posicion->posY = enemigo->posicion->posY + orientacion2;
			pthread_mutex_lock(&mx_lista_items);
			MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
			pthread_mutex_unlock(&mx_lista_items);

		}
	}

	if(graficar)
		nivel_gui_dibujar(items,nombre);


	if(IMPRIMIR_INFO_ENEMIGO){
		pthread_mutex_lock(&mutex_log);
		log_info(logger,"Posicion del enemigo. PosX: %d, PosY: %d ", enemigo->posicion->posX, enemigo->posicion->posY);
		pthread_mutex_unlock(&mutex_log);
	}

}
Esempio n. 2
0
void CGame::JugandoActualizar(){
	keys = (Uint8 *)SDL_GetKeyboardState(NULL);

	for (int i = 0; i < nivel[nivelActual].Enemigos_VisiblesAlMismoTiempo; i++)
	{
		enemigoArreglo[i]->GetNaveObjeto()->Actualizar();
	}
	MoverEnemigo();

	if (keys[SDL_SCANCODE_UP])
	{
		if (!LimitePantalla(nave->GetNaveObjeto(), BORDE_SUPERIOR))
			nave->MoverArriba(nivel[nivelActual].Nave_Velocidad);
	}
	if (keys[SDL_SCANCODE_DOWN])
	{
		if (!LimitePantalla(nave->GetNaveObjeto(), BORDE_INFERIOR))
			nave->MoverAbajo(nivel[nivelActual].Nave_Velocidad);
	}

	if (keys[SDL_SCANCODE_LEFT])
	{
		if (!LimitePantalla(nave->GetNaveObjeto(), BORDE_IZQUIERDO))
			nave->MoverIzquierda(nivel[nivelActual].Nave_Velocidad);
	}
	if (keys[SDL_SCANCODE_RIGHT])
	{
		if (!LimitePantalla(nave->GetNaveObjeto(), BORDE_DERECHO))
			nave->MoverDerecha(nivel[nivelActual].Nave_Velocidad);
	}

	if (keys[SDL_SCANCODE_ESCAPE])
	{
		estadoJuego = ESTADO_MENU;
	}
	if (keys[SDL_SCANCODE_SPACE])
	{
		nave->Disparar(nivel[nivelActual].Nave_BalasMaximas);
	}


	
	if (keys[SDL_SCANCODE_C]){//nuestra bala / nave enemigo
		int enemigoAEliminar = rand() % nivel[nivelActual].Enemigos_VisiblesAlMismoTiempo;
		//enemigoArreglo[enemigoAEliminar]->simularColision(true);
	}

	if (keys[SDL_SCANCODE_V]){//nuestra nave / nave enemigo

	}
}
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;
}
Esempio n. 4
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;
}
Esempio n. 5
0
bool CGame::Start()
{
	// Esta variable nos ayudara a controlar la salida del juego...
	//bool bandera = false;
	int salirJuego = false;
	while (salirJuego == false)
	{

		//Maquina de estados
		switch (estado)
		{
		case Estado::ESTADO_INICIANDO:
			
			Iniciando();
			estado = ESTADO_MENU;
			//printf("\nEstado Iniciando");
			
			
			break;
			
			//{		
		//

		//								/* nave = SDL_LoadBMP("../Data/Eddie.bmp");

		//								 SDL_Rect Fuente;
		//								 Fuente.x = 90;
		//								 Fuente.y = 152;
		//								 Fuente.w = 242;
		//								 Fuente.h = 76;
		//								 SDL_Rect destino;
		//								 destino.x = 100;
		//								 destino.y = 100;
		//								 destino.w = 100;
		//								 destino.h = 100;

		//								 SDL_BlitSurface(nave, &Fuente, screen, &destino);

		//								 SDL_BlitSurface(nave, NULL, screen, NULL);

		//								 SDL_FreeSurface(nave);*/
		//}

		case Estado::ESTADO_MENU:
			menu->Pintar();
			texto->Pintar(MODULO_TEXTO_TITULO, 250, 30);
			
			texto->Pintar(MODULO_TEXTO_NOMBRE, 300, 400);
			Menu();


			//titulos->Pintar();
			//SDL_FillRect(screen, NULL, 0000000);

			SDL_Flip(screen);
			keys = SDL_GetKeyState(NULL);
			//botonInicio->Pintar();
			if (keys[SDLK_UP])
			{
			estado = ESTADO_JUGANDO;
			}
			//botonInicio->Pintar();
			if (keys[SDLK_DOWN]){
				//btnSalir= new Nave(screen,"../Data/btnSalir.bmp",0,0,1);
				//botonSalir->Pintar();
				estado = ESTADO_FINALIZADO;
				//salirJuego = true;
				
			}
			break;

			
			/*if (keys[SDLK_UP])
			{
				nave->PintarModulo(0, 200, 100);
			}
			if (keys[SDLK_RIGHT])
			{
				nave->PintarModulo(0, 400, 200);
			}
			if (keys[SDLK_LEFT])



			{
				nave->PintarModulo(0, 0, 200);
			}*/
			/*if (bandera==false)
			{
				estado = ESTADO_JUGANDO;
				printf("\nEstado Menu");

			}
				else
			{
				estado = ESTADO_TERMINANDO;
				printf("\nEstado Menu");
			}*/
						
		case Estado::ESTADO_JUGANDO:
			//SDL_FillRect(screen, NULL, 0x000000);
			SDL_FillRect(screen, NULL, 0x000000);
			keys = SDL_GetKeyState(NULL);
			for (int i = 0; i<10; i++)
			enemigoArreglo[i]->Actualizar();

			MoverEnemigo();			
			
			if (keys[SDLK_RIGHT] && !esLimitePantalla(nave, BORDE_DERECHO))
			{
				//nave->PintarModulo(0, 0, 0, 64, 64);
				nave->Mover(7);
				if (esLimitePantalla(nave, BORDE_DERECHO))
				{
					nave->MoverIzquierda(7);
				}
				/*Iniciando();
				estado = ESTADO_MENU;*/
			}

			if (keys[SDLK_LEFT] && !esLimitePantalla(nave, BORDE_IZQUIERDO))
			{
				//nave->PintarModulo(0, 0, 0, 64, 64);
				nave->MoverIzquierda(7);
				if (esLimitePantalla(nave, BORDE_IZQUIERDO))
				{
					nave->Mover(7);
				}
				/*Iniciando();
				estado = ESTADO_MENU;*/
			}
			if (keys[SDLK_UP] && !esLimitePantalla(nave, BORDE_SUPERIOR))
			{

				nave->MoverArriba(7);
				if (esLimitePantalla(nave, BORDE_SUPERIOR))
				{
					nave->MoverAbajo(7);
				}

			}
			if (keys[SDLK_DOWN] && !esLimitePantalla(nave, BORDE_INFERIOR))
			{

				nave->MoverAbajo(7);
				if (esLimitePantalla(nave, BORDE_INFERIOR))
				{
					nave->MoverArriba(7);
				}

			}
			fondo->Pintar();
			nave->Pintar();
			//MoverEnemigo();
			for (int i = 0; i<10; i++)
			enemigoArreglo[i]->Pintar();
			MoverEnemigo();

			
			nave->Pintar();
			break;
		case Estado::ESTADO_FINALIZADO:
			/*estado = ESTADO_MENU;
			printf("\nEstado Finalizado");
			bandera = true;*/
			break;
		case Estado::ESTADO_TERMINANDO:
			
			/*printf("\nEstado Terminando");
			getchar();*/
			salirJuego = true;
			break;
		};
		while (SDL_PollEvent(&event))
		{
			if (event.type == SDL_QUIT) { salirJuego = true; }
			if (event.type == SDL_KEYDOWN) {}
		}
		SDL_Flip(screen);// imprimir en pantalla la variable screen

		frames++;
		tiempoFrameFinal = SDL_GetTicks();
		while (tiempoFrameFinal<(tiempoFrameInicio + FPS_DELAY)){
			tiempoFrameFinal = SDL_GetTicks();
			SDL_Delay(1);
		}
		//printf("Frame:%d Tiempo:%d TiempoPorFrame:%d FPS:%f\n", frames, tiempoFrameInicio, tiempoFrameFinal - tiempoFrameInicio, 1000.0f / (float)(tiempoFrameFinal - tiempoFrameInicio));
		tiempoFrameInicio = tiempoFrameFinal;

	}
	return true;
}
Esempio n. 6
0
void moverEnemigoEn(t_enemigo * enemigo, t_personaje_niv1 * personaje, char * orientacion){
		/* //TODO no estaría esquivando la caja

	if(orientacion == horizontal)
		if(enemigo->posicion->posX > personaje->posicion->posX)
			enemigo->posicion->posX = enemigo->posicion->posX - 1;
		else
			enemigo->posicion->posX = enemigo->posicion->posX + 1;
	else if(orientacion == vertical){
		if(enemigo->posicion->posY > personaje->posicion->posY)
			enemigo->posicion->posY = enemigo->posicion->posY - 1;
		else
			enemigo->posicion->posY = enemigo->posicion->posY + 1;
	}*/


	if(orientacion == horizontal){
		if(enemigo->posicion->posX > personaje->posicion->posX){
			if(hayCaja(enemigo->posicion->posX - 1, enemigo->posicion->posY) || (enemigo->posicion->posX - 1 == 0 && enemigo->posicion->posY == 0)){
				orientacion = vertical;
				enemigo->posicion->posY = enemigo->posicion->posY + obtenerDireccionCercaniaEn(orientacion,enemigo,personaje);
				pthread_mutex_lock(&mx_lista_items);
				MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
				pthread_mutex_unlock(&mx_lista_items);

			}else{

				enemigo->posicion->posX = enemigo->posicion->posX - 1;
				pthread_mutex_lock(&mx_lista_items);
				MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
				pthread_mutex_unlock(&mx_lista_items);

			}
		}else{
			if(hayCaja(enemigo->posicion->posX + 1, enemigo->posicion->posY) || (enemigo->posicion->posX + 1 == 0 && enemigo->posicion->posY == 0)){
				orientacion = vertical;
				enemigo->posicion->posY = enemigo->posicion->posY + obtenerDireccionCercaniaEn(orientacion,enemigo,personaje);
				pthread_mutex_lock(&mx_lista_items);
				MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
				pthread_mutex_unlock(&mx_lista_items);

			}else{
				enemigo->posicion->posX = enemigo->posicion->posX + 1;
				pthread_mutex_lock(&mx_lista_items);
				MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
				pthread_mutex_unlock(&mx_lista_items);

			}
		}
	}else if(orientacion == vertical){
		if(enemigo->posicion->posY > personaje->posicion->posY)
			if(hayCaja(enemigo->posicion->posX, enemigo->posicion->posY - 1) || (enemigo->posicion->posX == 0 && enemigo->posicion->posY - 1 == 0)){
				orientacion = horizontal;
				enemigo->posicion->posX = enemigo->posicion->posX + obtenerDireccionCercaniaEn(orientacion,enemigo,personaje);
				pthread_mutex_lock(&mx_lista_items);
				MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
				pthread_mutex_unlock(&mx_lista_items);

			}else{
				enemigo->posicion->posY = enemigo->posicion->posY - 1;
				pthread_mutex_lock(&mx_lista_items);
				MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
				pthread_mutex_unlock(&mx_lista_items);

			}
		else if(hayCaja(enemigo->posicion->posX, enemigo->posicion->posY + 1) || (enemigo->posicion->posX == 0 && enemigo->posicion->posY + 1 == 0)){
			orientacion = horizontal;
			enemigo->posicion->posX = enemigo->posicion->posX + obtenerDireccionCercaniaEn(orientacion,enemigo,personaje);
			pthread_mutex_lock(&mx_lista_items);
			MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
			pthread_mutex_unlock(&mx_lista_items);

		}else
			enemigo->posicion->posY = enemigo->posicion->posY + 1;
			pthread_mutex_lock(&mx_lista_items);
			MoverEnemigo(items, enemigo->id, enemigo->posicion->posX,enemigo->posicion->posY);
			pthread_mutex_unlock(&mx_lista_items);

	}


	if(graficar)
		nivel_gui_dibujar(items,nombre);

	if(IMPRIMIR_INFO_ENEMIGO){
		pthread_mutex_lock(&mutex_log);
		log_info(logger,"Posicion del enemigo. PosX: %d, PosY: %d ", enemigo->posicion->posX, enemigo->posicion->posY);
		pthread_mutex_unlock(&mutex_log);
	}

	//TODO alcanza con esto o tengo q usar una funcion list_replace?
	enemigo->ultimoMovimiento = orientacion;
}
Esempio n. 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;
}
Esempio n. 8
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;
}
Esempio n. 9
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;
}
Esempio n. 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: //INICIALIZAR
				//switch(estado){
				Iniciando();
				estado=ESTADO_MENU;
				break;
			/*	nave = SDL_LoadBMP("../Data/MiNave.bmp");
				SDL_Rect Fuente;
				Fuente.x =90;
				Fuente.y =152;
				Fuente.w =242;
				Fuente.h =76;
				SDL_Rect destino;
				destino.x =100;
				destino.y =100;
				destino.w =100;
				destino.h =100;
				SDL_BlitSurface(nave, &Fuente, screen, &destino);
				SDL_BlitSurface(nave, NULL, screen, NULL);
				SDL_FreeSurface(nave);
*/
				
			case Estado::ESTADO_MENU:
				//MENU
				////nave->PintarModulo (0,0,0,64,64);
			SDL_FillRect(screen, NULL, 0x000000);
			keys = SDL_GetKeyState(NULL);
			
			for (int i =0; i < 10; i++)
			enemigoArreglo[i] -> Actualizar();
			MoverEnemigo();
			if(keys[SDLK_RIGHT]&& !esLimitePantalla(nave,BORDE_DERECHO)){
				
				

			//nave->PintarModulo(0,100,100);
			nave->MoverDerecha(1);
			///Iniciando();
				///estado=ESTADO_MENU;
			}
			nave->Pintar();
			
			for (int i =0; i < 10; i++)
			enemigoArreglo[i] -> Pintar();
			break;
			case Estado::ESTADO_JUGANDO:	//JUGAR	
			break;
			case Estado::ESTADO_TERMINADO:	//TERMINAR
			break;
			case Estado::ESTADO_FINALIZADO: //SALIR
				salirJuego = true;
			break;
		};
				while (SDL_PollEvent(&event))//aqui SDL creara una lista de eventos ocurr
				{
					if (event.type == SDL_QUIT){salirJuego =true;}//si se detecta una
						if (event.type == SDL_KEYDOWN){}
				}
		SDL_Flip(screen); //imprime en pantalla variable screen

		frames++;
		tiempoFrameFinal = SDL_GetTicks();
		while(tiempoFrameFinal < (tiempoFrameInicio + FPS_DELAY))
			tiempoFrameFinal = SDL_GetTicks();

		printf("Frame:%d Tiempo:%d TiempoPorFrame:%d FPS:%f\n", frames,tiempoFrameInicio,tiempoFrameFinal-tiempoFrameInicio,1000.0f / (float)(tiempoFrameFinal-tiempoFrameInicio));
		tiempoFrameInicio = tiempoFrameFinal;
    }
	return true;
}
Esempio n. 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;
}