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; }
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; }
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; }