コード例 #1
0
ファイル: jogo.c プロジェクト: zimbrao/Comp-1-2015-1
void loop_eventos_jogo( Jogo* jogo ) {
   bool sair = false;
   bool seta_direita_pressionada = false,
        seta_esquerda_pressionada = false;
   
    while( !sair ) {
      if( !al_is_event_queue_empty(jogo->fila_eventos) ) {
	ALLEGRO_EVENT evento;
        al_wait_for_event( jogo->fila_eventos, &evento );
	
	if( evento.type == ALLEGRO_EVENT_KEY_DOWN )
          switch( evento.keyboard.keycode ) {
            case ALLEGRO_KEY_LEFT: seta_esquerda_pressionada = true; break;
	    case ALLEGRO_KEY_RIGHT: seta_direita_pressionada = true; break;
          }
        else if( evento.type == ALLEGRO_EVENT_KEY_UP ) 
          switch( evento.keyboard.keycode ) {
            case ALLEGRO_KEY_LEFT: seta_esquerda_pressionada = false; break;
	    case ALLEGRO_KEY_RIGHT: seta_direita_pressionada = false; break;
	    case ALLEGRO_KEY_X: sair = true; break;
          }
      }
      
      if( seta_direita_pressionada )
        move_tanque_jogo( jogo, DIREITA );
      else if( seta_esquerda_pressionada )   
	move_tanque_jogo( jogo, ESQUERDA );
      else
	move_tanque_jogo( jogo, PARAR );
      
      desenha_jogo( jogo );
    }
}
コード例 #2
0
void main_loop_jogo(Jogo* jogo){
	al_start_timer(jogo->timer);
	while(!jogo->sair){
		ALLEGRO_EVENT ev;
		al_wait_for_event(jogo->event_queue, &ev);
		switch (jogo->estado_do_jogo){		
			case MENU_INICIAL:
				processa_menu(jogo, jogo->menu[MENU_PRINCIPAL], ev);
				if(jogo->redraw && al_is_event_queue_empty( jogo->event_queue)){
					jogo->redraw = false;
					desenha_menu(jogo->menu[MENU_PRINCIPAL], jogo->largura, jogo->altura);
				}
				break;
			case PLAY:
				processa_jogo(jogo, ev);
				if(jogo->redraw && al_is_event_queue_empty( jogo->event_queue)){
					jogo->redraw = false;
					desenha_jogo(jogo);
				}
				break;
			case MENU_PAUSA:
				processa_menu(jogo, jogo->menu[MENU_DE_PAUSA], ev);
				if(jogo->redraw && al_is_event_queue_empty( jogo->event_queue)){
					jogo->redraw = false;
					desenha_menu(jogo->menu[MENU_DE_PAUSA], jogo->largura, jogo->altura);
				}
				break;
			case MENU_OPCOES:
				processa_menu(jogo, jogo->menu[MENU_DE_OPCOES], ev);
				if(jogo->redraw && al_is_event_queue_empty( jogo->event_queue)){
					jogo->redraw = false;
					desenha_menu(jogo->menu[MENU_DE_OPCOES], jogo->largura, jogo->altura);
				}
				break;
			case GAME_OVER:
				break;
		}
	}
}
コード例 #3
0
bool loop_de_jogo (Jogo* jogo) {
    al_start_timer(jogo->timer);
    bool doexit = false;
    bool redraw = true;

    while (!doexit) {
        ALLEGRO_EVENT ev;
        al_wait_for_event(jogo->event_queue, &ev);

		if (ev.type == ALLEGRO_EVENT_TIMER) {
        	redraw = true;
    
            if (jogo->key[KEY_LEFT] && get_posicao_x_min_player(&jogo->player) > 0 + BARREIRA_LATERAL_DISPLAY)
                move_player(&jogo->player, ESQUERDA);

            if (jogo->key[KEY_RIGHT] && get_posicao_x_max_player(&jogo->player) < jogo->largura - BARREIRA_LATERAL_DISPLAY)
                move_player(&jogo->player, DIREITA);
 
            if (jogo->key[KEY_ESCAPE] && jogo->loop_count_menu_pause > 1) {
                inicializa_menus(&jogo->menu);
                doexit = loop_menu(&jogo->menu, &jogo->hud, PAUSE);
                jogo->key[KEY_Z] = false;
                jogo->loop_count_menu_pause = 0;
            }

            if (jogo->key[KEY_Z]
                && jogo->loop_count_projetil > jogo->player.projetil_cooldown
                && jogo->loop_count_menu_pause > 1) {
                jogo->loop_count_projetil = 0;
                cria_projetil(&jogo->projetil_stack[jogo->numero_de_projeteis],
                              get_posicao_x_centro_player(&jogo->player),
                              jogo->player.posicao_y + 10,
                              CIMA);
                jogo->numero_de_projeteis++;
            }
    	}
 
      	else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
        	switch(ev.keyboard.keycode) {
            	case ALLEGRO_KEY_LEFT: 
            		jogo->key[KEY_LEFT] = true;
                	break;
 
            	case ALLEGRO_KEY_RIGHT:
               		jogo->key[KEY_RIGHT] = true;
               		break;

                case ALLEGRO_KEY_F1:
                    //F1 é o hard exit
                    doexit = true;
                    break;

                case ALLEGRO_KEY_ESCAPE:
                    jogo->key[KEY_ESCAPE] = true;
                    break;

            	case ALLEGRO_KEY_Z:
               		jogo->key[KEY_Z] = true;
               		break;
        }
    }

    	else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
        	switch(ev.keyboard.keycode) {
            	case ALLEGRO_KEY_LEFT: 
               		jogo->key[KEY_LEFT] = false;
               		break;
 
            	case ALLEGRO_KEY_RIGHT:
               		jogo->key[KEY_RIGHT] = false;
               		break;

            	case ALLEGRO_KEY_Z:
               		jogo->key[KEY_Z] = false;
               		break;
        }
    }
 
    	if (redraw && al_is_event_queue_empty(jogo->event_queue)) {

            /*CONDIÇÕES DE VITÓRIA
            return true;
            */

            colisao_player_vs_projetil(jogo);
            colisao_alien_vs_projetil(jogo);
            colisao_mothership_vs_projetil(jogo);

            for (int i = 0; i < jogo->numero_shields; i++)
                colisao_shield_vs_projetil (jogo, &jogo->shields[i]);
            
            redraw = false;
            jogo->key[KEY_ESCAPE] = false;

            if (!(jogo->loop_alien_movement % (GAME_FPS/2+jogo->fase)))
                rota_tropa (jogo->alien, jogo);

            if (!(jogo->loop_alien_shots % (GAME_FPS/2+jogo->fase))) {
                atira_tropa (jogo->alien, &jogo->projetil_stack[jogo->numero_de_projeteis]);
                jogo->numero_de_projeteis++;
            }

            incremento_loop_elementos_jogo(jogo);

            desenha_jogo(jogo);

            al_flip_display();

            if (jogo->hud.lives < 0) {
                inicializa_menus(&jogo->menu);
                doexit = loop_menu(&jogo->menu, &jogo->hud, GAME_OVER);
            }
		}
    }

    return false;
}