Esempio n. 1
0
void display(void)
{
  if(Game_HitGround())
    {
      // Check keyboard for reset
      Airplane_Keyboard(&thrust, &yawRate, &pitchRate, &rollRate, &firstPersonView, &resetFlag);
      Game_Over();
      
      if(resetFlag == 1)
	{
	  Game_Reset(&forward, &up, &right, &position, &velocity, &thrust, &yawRate, &pitchRate, &rollRate, 
		     &firstPersonView, &resetFlag, &camera_position, &camera_look, camMatrix);
	}
    }
  else
    {
      // Get user input
      Airplane_Keyboard(&thrust, &yawRate, &pitchRate, &rollRate, &firstPersonView, &resetFlag);
      
      // Update airplane dynamics
      Dynamics_CalcRot(yawRate, pitchRate, rollRate, &forward, &up, &right);
      Dynamics_CalcPos(thrust, &forward, &velocity, &position);
      
      // Update camera
      Camera_Update(firstPersonView, &forward, &up, &position, velocity, &camera_position, &camera_look, camMatrix);
      
      printError("pre display");
      
      // clear the screen
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      
      // Draw ground and skybox
      World_Draw(&camera_position, &camera_look, camMatrix, &position, &up, firstPersonView);
      
      // Check for collision
      Game_CollisionDetection(&position, &forward, &up, &right);
      
      // The game loop
      Game_Loop(position);
      
      // Draw target
      Game_DrawTarget(camMatrix, &camera_position);

      // Draw airplane
      Airplane_Draw(&forward, &up, &right, &position, &camera_position, camMatrix);

      // Reset game?
      if(resetFlag == 1)
      {
	Game_Reset(&forward, &up, &right, &position, &velocity, &thrust, &yawRate, &pitchRate, &rollRate, 
		   &firstPersonView, &resetFlag, &camera_position, &camera_look, camMatrix);
      }
    }
    
    printError("display");
    
    glutSwapBuffers();
}
Esempio n. 2
0
int main(int argc, char* args[]) {

	// Inicializa todos os módulos do SDL
	SDL_Init(SDL_INIT_EVERYTHING);
	// Inicializa o módulo de fontes 
	TTF_Init();
	// Cria a janela
	_window = SDL_CreateWindow("Killer Run", 50, 50, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
	//Cria o Render
	renderer = SDL_CreateRenderer(_window, -1, SDL_RENDERER_ACCELERATED);
	//Inicializa o Modulo de áudio
	Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096);
	
	Game_Setup(); // Inicializa configurações do jogo
		
	////////////////////////// Loop Principal ///////////////////////
	while (isRunning) {
			
		globalTime = SDL_GetTicks();
			
		SDL_RenderClear(renderer); // Limpa o render a cada frame
		Game_Loop(); // Loop principal do jogo
		
		SDL_RenderPresent(renderer); // Atualiza  render a cada frame
					
		// Captura evento caso ao clicar no botão para fechar janela
		while (SDL_PollEvent(&_event)) {
			
			if (_event.type == SDL_QUIT) {
				isRunning = false;
			}
					
		}
						
		//Limita o FPS a um valor definido no #define FPS Core.h
		if ((1000 / FPS) >= SDL_GetTicks() - globalTime) {
			SDL_Delay(1000 / FPS - (SDL_GetTicks() - globalTime));
		
		}
	
	}
	///////////////////// Fim do Loop Principal ///////////////////////
	
	SDL_DestroyWindow(_window);
	SDL_DestroyRenderer(renderer);
	Mix_CloseAudio();
	SDL_Quit();
	
	return 0;

} /////////////////// Fim do método Main ////////////////////
Esempio n. 3
0
int Game_Menu_Loop(Game_Surface *surface, Mix_Chunk *sound[], TTF_Font *font_big, TTF_Font *font_normal, SDL_TimerID *timer_id)
{
    SDL_Event event;
    SDL_Rect piece_none_pos, arrow_position;
    //Structure contenant les données des niveaux
    Game_Level level[NOMBRE_NIVEAU] = {{{0}}};
    //Structure contenant les données du joueur
    Player_Score score[NOMBRE_NIVEAU] = {{0}};
    //Numéro du niveau, bool pour l'affichage de la flèche, numéro du menu
    int num_level = 0, continuer = 1, affiche_arrow = MENU_HIDE_ARROW, menu_select = MENU_MAIN;
    //Chargement des données du joueur
    if (Player_Score_Load(score))
    {
        return EXIT_FAILURE;
    }
    //Chargement des niveaux
    if (Game_Level_Load(level))
    {
        return EXIT_FAILURE;
    }
    //Affichage du menu principale
    Game_Menu_Display(surface, score, font_normal, num_level, MENU_MAIN);
    //Débloquage du premier niveau
    score[num_level].levelok = 1;
    //Boucle d'évènement de la SDL
    while(continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
        case SDL_QUIT:
            continuer = 0;
            break;
        case SDL_KEYDOWN:
            //Si on presse la touche ECHAP, et que l'on est pas sur le menu principale on affiche ce dernier
            if ((event.key.keysym.sym == SDLK_ESCAPE) && menu_select != MENU_MAIN)
            {
                menu_select = MENU_MAIN;
                Game_Menu_Display(surface, score, font_normal, num_level, MENU_MAIN);
            }
            break;
        case SDL_MOUSEMOTION:
            //Fonction permettant de positionner la flèche de sélection du menu selon l'emplacement de la souris
            affiche_arrow = Game_Menu_Selection(surface->background, &arrow_position, event.motion.x, event.motion.y, menu_select, &num_level, 0);
            //Gestion de l'affichage de la flèche de sélection du menu
            Game_Menu_Arrow(surface, &arrow_position, &affiche_arrow, menu_select);
            break;
        case SDL_MOUSEBUTTONDOWN:
            if (event.button.button == SDL_BUTTON_LEFT)
            {
                //Fonction qui permet de sélectionner le menu correspondant au choix de l'utilisateur selon le positionnement de la souris
                menu_select = Game_Menu_Selection(surface->background, &arrow_position, event.motion.x, event.motion.y, menu_select, &num_level, 1);
                //Operation à effectuer selon les choix de l'utilisateur
                switch (menu_select)
                {
                case MENU_NEXT:
                    //On passe au niveau suivant, sauf si l'utilisateur à terminé le jeu
                    if (num_level < NOMBRE_NIVEAU - 1)
                    {
                        ++num_level;
                    }
                    else
                    {
                        menu_select = MENU_FINISH;
                        num_level = 0;
                        break;
                    }
                case MENU_GAME:
                    //On lance une partie si le niveau choisis est débloqué
                    if (score[num_level].levelok)
                    {
                        //Chargement du niveau
                        Game_Level_Play(surface, font_big, level, num_level, &piece_none_pos);
                        //Boucle de la partie, retourne le menu à afficher selon si le joueur à gagné ou perdu
                        menu_select = Game_Loop(surface, sound, font_big, font_normal, level, score, num_level, &piece_none_pos, timer_id);
                    }
                    else
                    {
                        //Si l'utilisateur à choisi un niveau bloqué on réaffiche le menu level
                        menu_select = MENU_LEVEL;
                    }

                    if (menu_select == MENU_WIN)
                    {
                        //Si le joueur à gagné on débloque le niveau suivant sauf si c'est à la fin du jeu
                        if (num_level < NOMBRE_NIVEAU - 1)
                        {
                            score[num_level + 1].levelok = 1;
                        }
                        //On joue le son de fin du niveau
                        if (Mix_PlayChannel(0, sound[4], 0))
                        {
                            printf ("%s\n", Mix_GetError());
                        }
                    }
                    break;
                case MENU_QUIT:
                    continuer = 0;
                    break;
                }
                //Selon le choix du joueur ou le résultat de la partie on affiche l'image correspondante
                Game_Menu_Display(surface, score, font_normal, num_level, menu_select);
            }
            break;
        }
        //On met à jour l'affichage
        SDL_Flip(surface->background);
    }
    //On sauvegarde les données du joueur
    if (Player_Score_Save(score))
    {
        return EXIT_FAILURE;
    }
    return 0;
}
Esempio n. 4
0
/*=========================================================================
// Name: Mainloop()
// Desc: the one and only mainloop ;-)
//=======================================================================*/
void Mainloop()
{
    SDL_Event event;

    while (!bDone) { /* Mainloop */
        switch (gamestate) {
        case STATE_MENU:
            MainMenu_Loop();
            SDL_Delay(TimeLeft());
            break;

        case STATE_PLAY:
            while (SDL_PollEvent(&event)) {
                switch (event.type) {
                case SDL_QUIT: bDone = 1; break;
                case SDL_KEYDOWN:
                    /* Escape can be pressed everytime to get back to the menu */
                    if (event.key.keysym.sym == SDLK_ESCAPE) 
                        gamestate = STATE_MENU;

                    if (!bPause && !bGameOver) /* Is the game active? */
                    switch (event.key.keysym.sym) {
                    case SDLK_SPACE:
                        MoveCluster(1); /* "drop" cluster...      */
                        NewCluster();   /* ... and create new one */
                        break;
                    case SDLK_DOWN:  if (MoveCluster(0)) NewCluster(); break;
                    case SDLK_LEFT:  MoveClusterLeft();  break;
                    case SDLK_RIGHT: MoveClusterRight(); break;
                    case SDLK_UP:    TurnClusterRight(); break;
                    case SDLK_p:     bPause = 1; break; /* Activate pause mode */
                    
                    case SDLK_c: /* Crazy mode... */
                        if (!bCrazy)
                            bCrazy = 1;
                        else {
                            BoxDrawInit();
                            bCrazy = 0;
                        }
                        break;
                        
#ifdef DEBUG_CHANGE_LEVEL_WITH_KEYS
                    case SDLK_w:
                        if (level < 10) {
                            level++;
                            PutSound(&sndNextlevel);
                        }
                        break;
                    case SDLK_q:
                        if (level > 0)
                            level--;
                        break;
#endif
                    default: break;
                    }
                    else if (event.key.keysym.sym == SDLK_p) /* deactivate pause mode again */
                        bPause = 0;

                    break;
                }
            }
            Game_Loop();

            SDL_Delay(TimeLeft());
            break;

        case STATE_GAMEOVER:
            break;

        case STATE_CREDITS:
            /* Credits_Loop(false); */
            SDL_Delay(TimeLeft());
            break;

        case STATE_EXIT:
            bDone = 1;
            break;
        }
    }
}