Example #1
0
int main(void){
	//allegro variables
	ALLEGRO_DISPLAY *display = NULL;
	ALLEGRO_EVENT_QUEUE *event_queue = NULL;
	ALLEGRO_BITMAP *bg = NULL;
	ALLEGRO_TIMER *timer;

	//program init
	if(!al_init())										//initialize Allegro
		return -1;

	display = al_create_display(WIDTH, HEIGHT);			//create our display object

	if(!display)										//test display object
		return -1;

	//==============================================
	//ADDON INSTALL
	//==============================================
	al_install_keyboard();
	al_init_image_addon();
	al_init_font_addon();
	al_init_ttf_addon();
	al_init_primitives_addon();

    // FONT DEL PROGRAMA.
	ALLEGRO_FONT *font = al_load_ttf_font("Sarpanch-SemiBold.ttf",30,0 );

    // VARIABLES DEL JUEGO ========================
    bg = al_load_bitmap("img/sp1.jpg");

    SpaceShip nave_jugador;
    Enemy enemies1[10];
    Enemy enemies2[10];
    Enemy enemies3[10];
    Enemy enemies4[10];
    Enemy jefe1[10];
    Bullet bullets[5];


    char vidas_char[2];


    // INICIALIZAR OBJETOS====================
    InitShip(nave_jugador);
    InitBullet(bullets, NUM_BULLETS);
    InitEnemies(enemies1,ENM1,10,0,220,WIDTH/2);
    InitEnemies(enemies2,ENM2,8,50,180,WIDTH/2+100);
    InitEnemies(enemies3,ENM3,6,100,140,WIDTH);
    InitEnemies(enemies4,ENM4,4,150,100,(WIDTH/2)+100);
    InitEnemies(jefe1,JEFE,2,200,60);
    //DrawEnemies(enemies,NUM_ENEMIES);

	//==============================================
	//TIMER INIT AND STARTUP
	//==============================================
	event_queue = al_create_event_queue();
	timer = al_create_timer(1.0 / 60);

	al_register_event_source(event_queue, al_get_timer_event_source(timer));
	al_register_event_source(event_queue, al_get_keyboard_event_source());

	al_start_timer(timer);

    //AnimacionEntrada(enemies,NUM_ENEMIES);
    printf("ya");
    int animacion=1;
    int movimientos=0;
	while(!done){

		ALLEGRO_EVENT ev;
		al_wait_for_event(event_queue, &ev);

        // INFORMACION DEL JUEGO Y BG
        // DrawWindowStatus();
		al_draw_bitmap(bg, 0, 0, 0);
        al_draw_bitmap(nave_jugador.image, 5,440,0);
        al_draw_text(font, al_map_rgb(255,255,255), 40,430, 0, "X");
        sprintf(vidas_char,"%d",vidas);
        al_draw_text(font, al_map_rgb(255,255,255), 60,430, 0, vidas_char);
        al_draw_text(font, al_map_rgb(255,255,255), WIDTH/2 - 30, 0,ALLEGRO_ALIGN_CENTRE, "Score");
        char vartext[10];
        sprintf(vartext,"%d",score);
        al_draw_text(font, al_map_rgb(255,255,255), WIDTH/2 + 40, 0, 0, vartext);


		//==============================================
		//INPUT
		//==============================================
        if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
		{
			done = true;
		}
		else if(ev.type == ALLEGRO_EVENT_KEY_DOWN){
			switch(ev.keyboard.keycode){
			case ALLEGRO_KEY_ESCAPE:
				done = true;
				break;
			case ALLEGRO_KEY_LEFT:
				keys[LEFT] = true;
				break;
			case ALLEGRO_KEY_RIGHT:
				keys[RIGHT] = true;
				break;
			case ALLEGRO_KEY_SPACE:
				keys[SPACE] = true;
				FireBullet(bullets, NUM_BULLETS, nave_jugador);
				break;
			}
		}
		else if(ev.type == ALLEGRO_EVENT_KEY_UP)
        {
			switch(ev.keyboard.keycode)
			{
			case ALLEGRO_KEY_ESCAPE:
				done = true;
				break;
			case ALLEGRO_KEY_LEFT:
				keys[LEFT] = false;
				break;
			case ALLEGRO_KEY_RIGHT:
				keys[RIGHT] = false;
				break;
			case ALLEGRO_KEY_SPACE:
				keys[SPACE] = false;
				break;
			}
		}


		//==============================================
		//GAME UPDATE
		//==============================================
		else if(ev.type == ALLEGRO_EVENT_TIMER){
			render = true;

			if(keys[LEFT])
				MoveShipLeft(nave_jugador);
			else if(keys[RIGHT])
				MoveShipRight(nave_jugador);

            UpdateBullet(bullets, NUM_BULLETS);

            CollideBullet(bullets,NUM_BULLETS,enemies1,NUM_ENEMIES);
            CollideBullet(bullets,NUM_BULLETS,enemies2,8);
            CollideBullet(bullets,NUM_BULLETS,enemies3,6);
            CollideBullet(bullets,NUM_BULLETS,enemies4,4);
            CollideBullet(bullets,NUM_BULLETS,jefe1,2);
		}

		//==============================================
		//RENDER
		//==============================================
		if(render && al_is_event_queue_empty(event_queue))
		{
			if (animacion==1){
                printf("si primero");
                movEnemies(enemies1,10,1);
                movEnemies(enemies2, 8,1);
                movEnemies(enemies3,6,1);
                movEnemies(enemies4,4,1);
                movEnemies(jefe1,2,1);
                animacion=0;
                movimientos=1;
			}


			render = false;

            // Dibujar nave
			al_draw_bitmap(nave_jugador.image, nave_jugador.x - nave_jugador.w / 2, nave_jugador.y - nave_jugador.h / 2, 0);
			// Dibujar Balas
			DrawBullet(bullets, NUM_BULLETS);

            // Dibuja los enemigos.
            DrawEnemies(enemies1,10);
            DrawEnemies(enemies2,8);
            DrawEnemies(enemies3,6);
            DrawEnemies(enemies4,4);
            DrawEnemies(jefe1,2);

			al_flip_display();
			al_clear_to_color(al_map_rgb(0,0,0));
			if (movimientos){
                movimientos=0;
                movEnemies(enemies1,10,2);
                movEnemies(enemies2,8,3);
			}
		}

	}


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

    al_destroy_bitmap(enemies1[i].image);

	al_destroy_event_queue(event_queue);
	al_destroy_timer(timer);
	al_destroy_display(display);						//destroy our display object

	return 0;
}
Example #2
0
/* Run our test. */
static void run(void)
{
    ALLEGRO_EVENT event;
    float x, y;
    bool need_draw = true;

    while (1) {
        /* Perform frame skipping so we don't fall behind the timer events. */
        if (need_draw && al_is_event_queue_empty(ex.queue)) {
            tick();
            need_draw = false;
        }

        al_wait_for_event(ex.queue, &event);

        switch (event.type) {
        /* Was the X button on the window pressed? */
        case ALLEGRO_EVENT_DISPLAY_CLOSE:
            return;

        /* Was a key pressed? */
        case ALLEGRO_EVENT_KEY_DOWN:
            if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE)
                return;
            break;

        /* Is it time for the next timer tick? */
        case ALLEGRO_EVENT_TIMER:
            need_draw = true;
            break;

        /* Mouse click? */
        case ALLEGRO_EVENT_MOUSE_BUTTON_UP:
            x = event.mouse.x;
            y = event.mouse.y;
            if (x >= ex.BUTTONS_X) {
                int button = y / 20;
                if (button == 2) ex.image = 0;
                if (button == 3) ex.image = 1;
                if (button == 4) ex.image = 2;
                if (button == 5) ex.image = 3;
                if (button == 6) ex.image = 4;
                if (button == 7) ex.image = 5;

                if (button == 10) ex.mode = 0;

                if (button == 11) ex.mode = 1;
                if (button == 12) ex.mode = 2;
                if (button == 13) ex.mode = 3;
                if (button == 14) ex.mode = 4;
                if (button == 15) ex.mode = 5;

                if (button == 16) ex.mode = 6;
                if (button == 17) ex.mode = 7;
                if (button == 18) ex.mode = 8;
                if (button == 19) ex.mode = 9;
                if (button == 20) ex.mode = 10;
            }
            break;
        }
    }
}
Example #3
0
int main() {
    //allegro stuff
    ALLEGRO_DISPLAY *al_display;
    ALLEGRO_EVENT_QUEUE *queue;
    ALLEGRO_EVENT event;    
    ALLEGRO_TIMER *loop_timer;
    int need_draw = 1;
    
    //widgets
    ALGUI_DISPLAY *display;
    
    //other
    ALGUI_SKIN *skin;
    
    /**** INIT ****/
    
    //init allegro
    al_init();
    al_install_keyboard();
    al_install_mouse();
    al_init_image_addon();
    al_init_font_addon();
    al_init_ttf_addon();
    al_init_primitives_addon();
    
    //init algui
    algui_init();
    
    /**** CREATE ALLEGRO RESOURCES ****/
    
    //set flags
    al_set_new_display_flags(al_get_new_display_flags() | ALLEGRO_GENERATE_EXPOSE_EVENTS | ALLEGRO_RESIZABLE | ALLEGRO_WINDOWED);
    
    //create a al_display
    al_display = al_create_display(640, 480);
    assert(al_display);        
    
    //create timers and events
    queue = al_create_event_queue();    
    loop_timer = al_create_timer(1.0 / 60.0);    
    al_register_event_source(queue, al_get_keyboard_event_source());
    al_register_event_source(queue, al_get_mouse_event_source());
    al_register_event_source(queue, al_get_display_event_source(al_display));
    al_register_event_source(queue, al_get_timer_event_source(loop_timer));    
    
    /**** CREATE WIDGETS ****/
    
    //create the display widget
    display = algui_create_display();
    algui_resize_widget(algui_get_display_widget(display), 640, 480);
    
    //skin widgets
    skin = algui_load_skin("test/test-skin/test-skin.txt");
    algui_skin_widget(algui_get_display_widget(display), skin);
        
    /**** MANAGE EVENTS ****/
    
    //event loop        
    al_start_timer(loop_timer);
    for(;;) {
        //wait for event
        al_wait_for_event(queue, &event);
        
        switch (event.type) {
            //close
            case ALLEGRO_EVENT_DISPLAY_CLOSE:
                goto END;
                
            //keydown                
            case ALLEGRO_EVENT_KEY_DOWN:
                if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE) goto END;
                algui_dispatch_event(algui_get_display_widget(display), &event);
                break;                                

            //redraw
            case ALLEGRO_EVENT_DISPLAY_EXPOSE:
                need_draw = 1;
                break;            
                
            //remove the input focus                
            case ALLEGRO_EVENT_DISPLAY_SWITCH_OUT:
                algui_dispatch_event(algui_get_display_widget(display), &event);
                need_draw = 1;
                break;            
                        
            //handle timers
            case ALLEGRO_EVENT_TIMER:
                if (event.timer.source == loop_timer) need_draw = 1;
                else algui_dispatch_event(algui_get_display_widget(display), &event);
                break;
                
            //dispatch event to the widgets                
			default:                                
                algui_dispatch_event(algui_get_display_widget(display), &event);
                break;
        }

        if (need_draw && al_is_event_queue_empty(queue)) {
            algui_draw_widget(algui_get_display_widget(display));
            al_flip_display();
            need_draw = false;
        }                
    }
    
    /**** CLEANUP ****/
    
    END:

    //cleanup the gui
    algui_destroy_widget(algui_get_display_widget(display));
    algui_destroy_skin(skin);
    algui_cleanup();
    
    //cleanup allegro
    al_destroy_timer(loop_timer);
    al_destroy_event_queue(queue);  
    al_destroy_display(al_display);
   
    return 0;
}
int main() {
  bool menu = true;
  char pontuacao[100];
  char vida[100];
  ALLEGRO_COLOR  font_color;
  ALLEGRO_FONT *font,*font2;
  ALLEGRO_AUDIO_STREAM *musica = NULL;
  
  camera *cam = camera_inicializa(0);
  if(!cam)
    erro("erro na inicializacao da camera\n");
  int x = 0, y =  0;
  int largura = cam->largura;
  int altura = cam->altura;
  int fps = 0,tempo = 5;
  int ndisco = 9;
 
  if(!al_init())
    erro("erro na inicializacao do allegro\n");

  if(!al_init_image_addon())
    erro("erro na inicializacao do adicional de imagem\n");

  al_init_font_addon();
  al_init_ttf_addon();

    font_color = al_map_rgb(0, 0, 0);
    
    font = al_load_ttf_font("Fontes/Blokletters-Viltstift.ttf", 20, 0);
    font2 = al_load_ttf_font("Fontes/Blokletters-Viltstift.ttf", 50, 0);
    


  if(!al_init_primitives_addon())
    erro("erro na inicializacao do adicional de primitivas\n");

  ALLEGRO_TIMER *timer = al_create_timer(1.0 / FPS);
  if(!timer)
    erro("erro na criacao do relogio\n");

  ALLEGRO_DISPLAY *display = al_create_display(2 * largura,altura);
  if(!display)
    erro("erro na criacao da janela\n");

  ALLEGRO_EVENT_QUEUE *queue = al_create_event_queue();
  if(!queue)
    erro("erro na criacao da fila\n");

   if (!al_install_audio())
    {
        fprintf(stderr, "Falha ao inicializar áudio.\n");
        return false;
    }
 
    if (!al_init_acodec_addon())
    {
        fprintf(stderr, "Falha ao inicializar codecs de áudio.\n");
        return false;
    }
    if (!al_reserve_samples(1))
    {
        fprintf(stderr, "Falha ao alocar canais de áudio.\n");
        return false;
    }

  musica = al_load_audio_stream("Audio/elementary.ogg", 4, 1024);
  if(!musica)
        erro("Erro na alocação da musica de fundo\n");

  al_attach_audio_stream_to_mixer(musica, al_get_default_mixer());
  al_set_audio_stream_playing(musica, true);

  al_register_event_source(queue, al_get_timer_event_source(timer));
  al_register_event_source(queue, al_get_display_event_source(display));

  al_start_timer(timer);
  
  unsigned char ***matriz = camera_aloca_matriz(cam);
  ALLEGRO_BITMAP *buffer = al_get_backbuffer(display);
  ALLEGRO_BITMAP *fundo = al_load_bitmap("Imagens/Elementary2.png");

  if(!fundo)
    erro("erro ao carregar Elementary.png");

  ALLEGRO_BITMAP *esquerda = al_create_sub_bitmap(buffer, 0, 0, largura, altura);
  ALLEGRO_BITMAP *direita = al_create_sub_bitmap(buffer, largura, 0, largura, altura);

  /**********/
  Disco *discos[9];
  bool perdeu = false;
  carregarDiscos(discos);
  int pontos=0,velo = 1;
  int aux1 = 1;
  int vidas = 10;
  int ultimoDisco = 0;
  int distance = 0;
  int desenhar = 0;
  int terminar = 0;
  al_set_target_bitmap(esquerda);
  al_draw_bitmap(fundo,0,0,0);
  while(1) {

    ALLEGRO_EVENT event;

    al_wait_for_event(queue, &event);

    switch(event.type) {
    case ALLEGRO_EVENT_TIMER:
      desenhar = 1;
      break;
    case ALLEGRO_EVENT_DISPLAY_CLOSE:
      terminar = 1;
      break;
   
    }

    if(terminar)
      break;

    if(desenhar && al_is_event_queue_empty(queue)) {
      desenhar = 0;
      camera_atualiza(cam);
      mediana(cam);
      /**********/
      al_set_target_bitmap(esquerda);
      al_draw_bitmap(fundo,0,0,0);
      
      if(!menu){
        while(aux1 <= ndisco){
          if(discos[aux1]->status == false){
            if(distance > 50 || ultimoDisco==0  ){
              printf("%d\n",aux1 );
              al_draw_bitmap(discos[aux1]->elemento,discos[aux1]->pos_x,discos[aux1]->pos_y,0);
              discos[aux1]->status = true;
              distance = 0;
              ultimoDisco = aux1;
              break;
            }else
             aux1++;
          }else{
              discos[aux1]->pos_y+=(10+velo);
              al_draw_bitmap(discos[aux1]->elemento,discos[aux1]->pos_x,discos[aux1]->pos_y,0);
            aux1++;
              
            }
        }
        distance = discos[ultimoDisco]->pos_y;
        for(aux1 = 1;aux1<ndisco;aux1++){
          if(discos[aux1]->pos_x >= x-30 && discos[aux1]->pos_x <= x+30 && discos[aux1]->pos_y >= y-30 &&  discos[aux1]->pos_y <= y+30){
            if(discos[aux1]->tipo == 2){ // Tipo do fogo(Necessario para vencer o jogo)
            pontos +=10;
            velo += 1;
            discos[aux1]->pos_x = rand()%9 * 55;
            discos[aux1]->pos_y = 0;
            discos[aux1]->status = false;
          }else if(discos[aux1]->tipo == 1){ //Tipo da agua(Perde o jogo se destruir esse disco)
            discos[aux1]->pos_x = rand()%9 * 55;
            discos[aux1]->pos_y = 0;
            discos[aux1]->status = false;
            al_flip_display();
            vidas--;
          }else if(discos[aux1]->tipo == 3){//Tipo planta(Aumenta velocidade de queda das peças)
            velo *= 2;
            discos[aux1]->pos_x = rand()%9 * 55;
            discos[aux1]->pos_y = 0;
            discos[aux1]->status = false;
          }

        }else if( discos[aux1]->pos_y > 480){
          if(discos[aux1]->tipo == 2){ //Tipo da agua e Planta(Não perde se deixar cair)
               discos[aux1]->pos_x = rand()%9 * 55;
            discos[aux1]->pos_y = 0;
            discos[aux1]->status = false;
            al_flip_display();
            vidas--;
          }else{
            discos[aux1]->pos_x = rand()%9 * 55;
            discos[aux1]->pos_y = 0;
            discos[aux1]->status = false;
          }
        }
      }

        aux1 = 1;
      sprintf(pontuacao,"PONTUAÇÃO: %d",pontos);
      al_draw_text(font, al_map_rgb(255, 255, 255), 50, 5, 0,pontuacao);
       sprintf(vida,"VIDAS: %d",vidas);
      al_draw_text(font, al_map_rgb(255, 255, 255), 300, 5, 0,vida);
      al_flip_display();

      }
       if(perdeu){
        al_draw_text(font2, al_map_rgb(255, 0, 0), 50, 100, 0,"PONTUAÇÃO FINAL");
        sprintf(pontuacao,"%d",pontos);
        al_draw_text(font2, al_map_rgb(255, 0, 0), 250, 170, 0,pontuacao);
        al_flip_display();
        al_rest(3);
        break;
      }
       
      if(vidas == 0){
        perdeu = true;
      }

      if(menu){
        if(abrirJogo(x,y,&fps,&tempo,font,font2, font_color)){
          fundo = al_load_bitmap("Imagens/galaxia.png");
          menu = false;
        }
      }
      cameraRastreia(cam,&x,&y);
   

      al_set_target_bitmap(direita);
      camera_copia(cam, cam->quadro, direita);
      al_flip_display();
    }
  }
  al_destroy_bitmap(direita);
  al_destroy_bitmap(fundo);
  al_destroy_bitmap(esquerda);
  camera_libera_matriz(cam, matriz);
int fri = 9;
while(fri != 0){
  free(discos[fri]);
  fri--;

}


  al_stop_timer(timer);

  al_unregister_event_source(queue, al_get_display_event_source(display));
  al_unregister_event_source(queue, al_get_timer_event_source(timer));

  al_destroy_event_queue(queue);
  al_destroy_display(display);
  al_destroy_timer(timer);
  al_destroy_audio_stream(musica);
  al_shutdown_primitives_addon();
  al_shutdown_image_addon();
  al_uninstall_system();

  camera_finaliza(cam);

  return EXIT_SUCCESS;
}
Example #5
0
/*
    Begin game execution
*/
void Tetris::play() {
    simplog.writeLog( LOG_INFO, "Tetris started successfully!" );

    // Start the timer
    al_start_timer( timer );
    simplog.writeLog( LOG_VERBOSE, "Timer started" );

    // Run loop variables
    bool done = false;
    bool redraw = true;
    double lastTime = al_get_time();
    double currentFPS = 0.0;
    int frames_done = 1;
    ALLEGRO_EVENT event;

    // Run loop
    while( !done ) {
        // Wait for an event to occur
        al_wait_for_event( main_queue, &event );

        // Redraw only when the timer event is triggered to cap FPS
        if( event.type == ALLEGRO_EVENT_TIMER ) {
            redraw = true;
        } else if( event.type == ALLEGRO_EVENT_DISPLAY_CLOSE ) {
            done = true;
        }

        // Get current time
        double currentTime = al_get_time();

        // Calculate delta time
        double delta = currentTime - lastTime;

        // Calculate current FPS
        if( delta >= 1.0 ) {
            currentFPS = frames_done / delta;
    
            frames_done = 0;
            lastTime = currentTime;
        }

        // Redraw if the timer was triggered, and the event queue is empty
        if( redraw && al_is_event_queue_empty( main_queue ) ) {
            redraw = false;

            // Update and render the current state
            bool updateOkay = states->top()->update( delta );
            bool renderOkay = states->top()->render();

            // Check if update and render completed okay for the current state
            if( !updateOkay || !renderOkay ) {
                // Delete the current state and pop if off the stack
                delete states->top();
                states->pop();

                // If there are no states left, end the run loop
                if( states->empty() ) {
                    done = true;
                }
            }

            // Print the FPS in the upper left corner
            if( showFPS ) {
                al_draw_textf( font12, al_map_rgb( 255, 255, 255 ), 0, 0, ALLEGRO_ALIGN_LEFT, "FPS: %.2f", currentFPS );
            }

            // Flip the display
            al_flip_display();
        }

        // Increment the current frames total
        frames_done++;
    }
}
Example #6
0
void game_loop(void)
{
    for (int x = 0; x < 16; x++)
            {
                //for each y value between 2 and 13
                for (int y = 0; y < 16; y++)
                {
                    randX = 6 + (rand() % (int)(12 - 6 + 1));
                    randY = 0 + (rand() % (int)(3 - 0 + 1));
                    //drawDungeonTile(randX, randY, x, y);
                    floorArray [x] [y] [0] = randX;
                    floorArray [x] [y] [1] = randY;
                }
            }

    player p1;
    //(speed, friction, sprint accel, max speed)
    //default: p1.setMovement(1.4, .4, 1.8, 4);
    p1.setMovement(1.4, .4, 1.8, 4);
    p1.setPosition(tileSize * 7, tileSize * 12);
    p1.setX(240);
    p1.setY(240);
    printf("%f, %f \n", p1.getX(), p1.getY());

    al_start_timer(timer);
 
    while (!done) {
        ALLEGRO_EVENT event;
        al_wait_for_event(event_queue, &event);
 
        if (event.type == ALLEGRO_EVENT_TIMER) 
        {
            if(key[keyW] && p1.getY() >= p1.getMaxSpeed() + 1)
            {
                p1.setDy( p1.getDy() - p1.getSpeed());
            }

            if(key[keyS] && p1.getY() <= screenH - squareSize - (p1.getMaxSpeed() + 1))
            {
                p1.setDy( p1.getDy() + p1.getSpeed());
            }

            if(key[keyA] && p1.getX() >= (p1.getMaxSpeed() + 1))
            {
                p1.setDx( p1.getDx() - p1.getSpeed());
            }

            if(key[keyD] && p1.getX() <= screenW - squareSize - (p1.getMaxSpeed() + 1))
            {
                p1.setDx( p1.getDx() + p1.getSpeed());
            }

            if(key[keyShift] && (key[keyW] || key[keyA] ||key[keyS] ||key[keyD])) 
            {
                p1.setDx(p1.getDx() * p1.getSprintAccel());
                p1.setDy(p1.getDy() * p1.getSprintAccel());
            }

            if (abs(p1.getDx()) > p1.getMaxSpeed())
            {
               if(p1.getDx() < 0)
               {
                  p1.setDx( -p1.getMaxSpeed());
               }
               if(p1.getDx() > 0)
               {
                  p1.setDx( p1.getMaxSpeed());
               }
            }

            //max velocity Y
            if (abs(p1.getDy()) > p1.getMaxSpeed())
            {
               if(p1.getDy() < 0)
               {
                  p1.setDy(-p1.getMaxSpeed());
               }
               if(p1.getDy() > 0)
               {
                  p1.setDy( p1.getMaxSpeed() );
               }
            }


            redraw = true;
            //update_logic();
            
            //update player position
            p1.setX(p1.getX() + p1.getDx());
            //X axis
            //detect and respond to collision with obstacles
            p1.setX(playerWallCollisionX(p1.getX(),p1.getDx(),p1.getY(),room111));
            p1.setDx(p1.getDx() * p1.getFriction());

            //Y axis
            p1.setY(p1.getY() + p1.getDy());
            p1.setY(playerWallCollisionY(p1.getY(),p1.getDy(),p1.getX(),room111));
            p1.setDy(p1.getDy() * p1.getFriction());


               if (textCounter)
               {
                  textCounter = textCounter + 1;
                  if (textCounter == 60)
                  {
                     textCounter = 0;
                  }
               }
            redraw = true;
         }

        //key pressed down
        else if (event.type == ALLEGRO_EVENT_KEY_DOWN) 
        {
            switch (event.keyboard.keycode)
            {
                case ALLEGRO_KEY_ESCAPE:
                done = true;

                case ALLEGRO_KEY_W:
                key[keyW] = true;
                break;

                case ALLEGRO_KEY_A:
                key[keyA] = true;
                break;

                case ALLEGRO_KEY_S:
                key[keyS] = true;
                break;

                case ALLEGRO_KEY_D:
                key[keyD] = true;
                break;

                case ALLEGRO_KEY_LSHIFT:
                key[keyShift] = true;
                break;
            }
        }

        //key released
        else if (event.type == ALLEGRO_EVENT_KEY_UP)
        {
            switch (event.keyboard.keycode)
            {
                case ALLEGRO_KEY_W:
                key[keyW] = false;
                break;

                case ALLEGRO_KEY_A:
                key[keyA] = false;
                break;

                case ALLEGRO_KEY_S:
                key[keyS] = false;
                break;

                case ALLEGRO_KEY_D:
                key[keyD] = false;
                break;

                case ALLEGRO_KEY_LSHIFT:
                key[keyShift] = false;
                break;
            }
        }
        
        else if(event.type == ALLEGRO_EVENT_MOUSE_AXES || ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY)
        {
           crosshair_x = event.mouse.x - crosshairSize/2;
           crosshair_y = event.mouse.y - crosshairSize/2;
        }
        
        if (redraw && al_is_event_queue_empty(event_queue)) {
            redraw = false;

            //Clear screen to green
            al_clear_to_color(al_map_rgb(0, 0, 0));

            //update_graphics();
            //graphics that will always be there
            drawDungeon(floorArray,room111);
            al_draw_bitmap(playerBitmap, p1.getX(), p1.getY(), 0);
            /*
            for (int i = 0; i < (sizeof(obstacles)/sizeof(*obstacles)); i++)
            {
                al_draw_bitmap(block, obstacles[i][0],obstacles[i][1],0);
            }
            */
            drawObstacles(obstacles,sizeof(obstacles)/sizeof(*obstacles));
            al_draw_bitmap(crosshair, crosshair_x, crosshair_y, 0);
            al_flip_display();
        }
    }

}
int main(int argc, char **argv){
    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    ALLEGRO_TIMER *timer = NULL;
    ALLEGRO_BITMAP *seletor = NULL;

    float tamanho = 25;
    float espacamento = SELETOR_SIZE + 19;
    float seletor_x = 1174;
    float seletor_y = 40;
    bool key[4] = { false, false, false, false };
    bool redraw = true;
    bool doexit = false;
    float posicao = 0;
    int mapa[770][3];
    bool envio[4] = { false, false, false, false };


    //Inicia o allegro
    al_init();
    al_init_image_addon();
    al_install_keyboard();

     // Inicialização do add-on para uso de fontes
    al_init_font_addon();
    al_init_ttf_addon();

    inicializaBitmaps();
    lerConf(mapa);

    //Cria a lista de eventos
    event_queue = al_create_event_queue();

    //Cria o timer
    timer = al_create_timer(1.0 / FPS);

    //Cria a janela
    display = al_create_display(SCREEN_W, SCREEN_H);

    //Limpa a janela com a cor preta
    al_clear_to_color(al_map_rgb(0, 0, 0));

    //Carrega a imagem de fundo na variável
    background = al_load_bitmap("img/fundo.png");
    //Desenha a imagem de fundo na posição (0,0)
    al_draw_bitmap(background, 0, 0, 0);

    //Carrega a imagem do seletor na variável
    seletor = al_load_bitmap("img/selecao.png");
    //Desenha o seletor na posição (1174,40)
    al_draw_bitmap(seletor, 1174, 40, 0);

    desenhaMapa(mapa, envio);

    //Registra os eventos
    al_register_event_source(event_queue, al_get_display_event_source(display));
    al_register_event_source(event_queue, al_get_timer_event_source(timer));
    al_register_event_source(event_queue, al_get_keyboard_event_source());

    al_flip_display();

    //Inicia o timer
    al_start_timer(timer);

    //Inicia contagem de tempo para a pergunta aparecer
    initClock();

    //While do jogo
    while(!doexit){
        //Aguarda o evento
        ALLEGRO_EVENT ev;
        al_wait_for_event(event_queue, &ev);

        //Se der o tempo do timer, verifica qual tecla foi pressionada e se é possível se mover para a posição de destino
        if(ev.type == ALLEGRO_EVENT_TIMER){
            if(key[KEY_LEFT] && (posicao == 1 || posicao == 3) && (janela_aberta == 0)) {
                seletor_x -= espacamento;
                if(posicao == 1)
                    posicao = 0;
                else
                    posicao = 2;
            }
            if(key[KEY_RIGHT] && (posicao == 0 || posicao == 2) && (janela_aberta == 0)) {
                seletor_x += espacamento;
                if(posicao == 0)
                    posicao = 1;
                else
                    posicao = 3;
            }
            if(key[KEY_UP] && (posicao == 2 || posicao == 3) && (janela_aberta == 0)) {
                seletor_y -= espacamento;
                if(posicao == 2)
                    posicao = 0;
                else
                    posicao = 1;
            }
            if(key[KEY_DOWN] && (posicao == 0 || posicao == 1) && (janela_aberta == 0)) {
                seletor_y += espacamento;
                if(posicao == 0)
                    posicao = 2;
                else
                    posicao = 3;
            }

            redraw = true;
        }
        //Se a janela for fechada, termina o jogo
        else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
            break;
        }
        //Se o evento for um tecla pressionada, seta a variável dessa tecla para "true" (pressionada)
        else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_LEFT:
                    key[KEY_LEFT] = true;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    key[KEY_RIGHT] = true;
                    break;

                case ALLEGRO_KEY_UP:
                    key[KEY_UP] = true;
                    break;

                case ALLEGRO_KEY_DOWN:
                    key[KEY_DOWN] = true;
                    break;
            }
        }
        //Se o evento for um tecla solta, seta a variável dessa tecla para "false" (caso seja Esc, encerra o programa)
        else if(ev.type == ALLEGRO_EVENT_KEY_UP) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_LEFT:
                    key[KEY_LEFT] = false;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    key[KEY_RIGHT] = false;
                    break;

                case ALLEGRO_KEY_ESCAPE:
                    doexit = true;
                    break;

                case ALLEGRO_KEY_UP:
                    key[KEY_UP] = false;
                    break;

                case ALLEGRO_KEY_DOWN:
                    key[KEY_DOWN] = false;
                    break;
                case ALLEGRO_KEY_ENTER:
                    if (janela_aberta == 0){
                        if(posicao == 0)
                            envio[VERMELHO] = true;
                        else if(posicao == 1)
                            envio[AZUL] = true;
                        else if(posicao == 2)
                            envio[VERDE] = true;
                        else if(posicao == 3)
                            envio[AMARELO] = true;
                    }

            }
        }

        //Redesenha o jogo
        if(redraw && al_is_event_queue_empty(event_queue)){
            redraw = false;
            al_draw_bitmap(background, 0, 0, 0);
            desenhaMapa(mapa, envio);
            movimento(mapa);
            if (janela_aberta == 0){
                if (checkClock()){
                    janela_aberta = 1;
                }
            }else{
                al_draw_bitmap(perguntas, 0, 0, 0);
                al_draw_textf(font, al_map_rgb(255, 255, 255), SCREEN_W / 2, 250, ALLEGRO_ALIGN_CENTRE, "%s", texto);

                printf("check\n");
                initClock();
            }
            al_draw_bitmap(seletor, seletor_x, seletor_y, 0);
            al_flip_display();
        }
    }

    //Destrói os objetos
    al_destroy_bitmap(background);
    al_destroy_bitmap(seletor);
    al_destroy_timer(timer);
    al_destroy_display(display);
    al_destroy_event_queue(event_queue);

    return 0;
}
Example #8
0
/** A Menu loopja
* @param menu-re mutato pointer
* @return nincs->void
* @author Pjatacsuk Bence
* @date 2011.10.2
*/
void MenuLoop(Menu* MyMenu)
{

	int redraw;
	bool MenuLoop = true;
//	allapot all;
	/* A megfelelõ event források regisztrálása, display,timer,keyboard */
	
	al_register_event_source(MyMenu->event_queue, al_get_display_event_source(MyMenu->display));
	
	al_register_event_source(MyMenu->event_queue, al_get_timer_event_source(MyMenu->timer));
	
	al_register_event_source(MyMenu->event_queue, al_get_keyboard_event_source());
	
	al_start_timer(MyMenu->timer); // timer inditás
	redraw = true;
	all = newgame;
	while(MenuLoop)
	{
		
		ALLEGRO_EVENT ev; // allegro event struct
		al_wait_for_event(MyMenu->event_queue, &ev);

		if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
		{
			break;
		}
		else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) //billentyû lenyomás vizsgálata
		{
			switch(ev.keyboard.keycode)
			{
				case ALLEGRO_KEY_UP:
				case ALLEGRO_KEY_W:
					if(all == quit)
					{
						all = newgame;
					}
					

					break;
				case ALLEGRO_KEY_DOWN:
				case ALLEGRO_KEY_S:
					if(all == newgame)
					{
						all = quit;
					}
					break;
				case ALLEGRO_KEY_ENTER:
					if(all == newgame)
					{
						MenuLoop = false;
					}
					else if(all = quit)
					{
						STOP_GAME = 1;
						MenuLoop = false;
					}
					break;

			
			}
	
		}
		else {
			
			redraw = true;
		
		}
		if(redraw && al_is_event_queue_empty(MyMenu->event_queue)) 
		{
			al_draw_bitmap(MyMenu->bg,0,0,0);
			if(all == newgame)
			{
				al_draw_text(MyMenu->font,al_map_rgb(255,128,0),100,200,0,"New Game");
				al_draw_text(MyMenu->font,al_map_rgb(203,203,203),100,300,0,"Quit");
			}
			else
			{
				al_draw_text(MyMenu->font,al_map_rgb(203,203,203),100,200,0,"New Game");
				al_draw_text(MyMenu->font,al_map_rgb(255,128,0),100,300,0,"Quit");
			}
			al_flip_display();
			redraw = false;
		}
		
	}
	
	
}
Example #9
0
static void main_loop(ALLEGRO_DISPLAY *display, ALLEGRO_BITMAP *picture)
{
   ALLEGRO_EVENT_QUEUE *queue;
   ALLEGRO_EVENT event;
   bool can_draw;
   int new_res;

   queue = al_create_event_queue();
   al_register_event_source(queue, al_get_keyboard_event_source());
   al_register_event_source(queue, al_get_display_event_source(display));

   can_draw = true;

   while (1) {
      if (al_is_event_queue_empty(queue) && can_draw) {
         redraw(picture);
      }
      al_wait_for_event(queue, &event);

      if (event.type == ALLEGRO_EVENT_DISPLAY_LOST) {
         log_printf("Display lost\n");
         can_draw = false;
         continue;
      }
      if (event.type == ALLEGRO_EVENT_DISPLAY_FOUND) {
         log_printf("Display found\n");
         can_draw = true;
         continue;
      }
      if (event.type != ALLEGRO_EVENT_KEY_CHAR) {
         continue;
      }

      if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE) {
         break;
      }

      new_res = cur_res;

      if (event.keyboard.unichar == '+' ||
            event.keyboard.unichar == ' ' ||
            event.keyboard.keycode == ALLEGRO_KEY_ENTER) {
         new_res++;
         if (new_res >= NUM_RESOLUTIONS)
            new_res = 0;
      }
      else if (event.keyboard.unichar == '-') {
         new_res--;
         if (new_res < 0)
            new_res = NUM_RESOLUTIONS - 1;
      }

      if (new_res != cur_res) {
         cur_res = new_res;
         log_printf("Switching to %dx%d... ", res[cur_res].w, res[cur_res].h);
         if (al_resize_display(display, res[cur_res].w, res[cur_res].h)) {
            log_printf("Succeeded.\n");
         }
         else {
            log_printf("Failed. current resolution: %dx%d\n",
               al_get_display_width(display), al_get_display_height(display));
         }
      }
   }

   al_destroy_event_queue(queue);
}
Example #10
0
void gameloop() {
	while (!danmakux.done) {
		ALLEGRO_EVENT ev;
		al_wait_for_event(event_queue, &ev);
		if (ev.type == ALLEGRO_EVENT_TIMER) {
			redraw = true;
			update();
			gameLogic();
		}
		else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
			danmakux.done = true;
		}
		else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
			if (danmakux.state_playing && !danmakux.state_paused) {
				switch (ev.keyboard.keycode) {
					case ALLEGRO_KEY_UP:
						danmakux.player->moveu = true;
						break;
					case ALLEGRO_KEY_DOWN:
						danmakux.player->moved = true;
						break;
					case ALLEGRO_KEY_LEFT:
						danmakux.player->movel = true;
						break;
					case ALLEGRO_KEY_RIGHT:
						danmakux.player->mover = true;
						break;
					case ALLEGRO_KEY_Z:
						danmakux.player->fireFront = 1;
						break;
					case ALLEGRO_KEY_X:
						danmakux.player->fireBack = 1;
						break;
					case ALLEGRO_KEY_C:
						danmakux.player->fireSide = 1;
						break;
					case ALLEGRO_KEY_LSHIFT:
						danmakux.player->focused = true;
						break;
					case ALLEGRO_KEY_ESCAPE:
						break;
				}
			}
			else if (danmakux.state_menu) {
				std::stringstream levelno;
				std::string level;
				switch (ev.keyboard.keycode) {
					case ALLEGRO_KEY_UP:
						danmakux.menuChoice -= 1;
						if (danmakux.menuChoice < 0) danmakux.menuChoice = danmakux.menuitems.size()-1;
						break;
					case ALLEGRO_KEY_DOWN:
						danmakux.menuChoice = (danmakux.menuChoice + 1) % danmakux.menuitems.size();
						break;
					case ALLEGRO_KEY_LEFT:
						danmakux.menuChoice -= 1;
						if (danmakux.menuChoice < 0) danmakux.menuChoice = danmakux.menuitems.size()-1;
						break;
					case ALLEGRO_KEY_RIGHT:
						danmakux.menuChoice = (danmakux.menuChoice + 1) % danmakux.menuitems.size();
						break;
					case ALLEGRO_KEY_Z:
						switch (danmakux.menuChoice) {
						case 0:
							clearMenu();
							danmakux.state_menu = false;
							danmakux.state_playing = true;
							danmakux.state_paused = false;
							danmakux.state_dialog = false;
							levelno << danmakux.currentLevel;
							level = "level" + levelno.str();
							plyr_load(danmakux.player, "machine");
							loadLevel(level);
							break;
						case 1:
							break;
						case 2:
							danmakux.done = true;
							break;
						}
						break;
					case ALLEGRO_KEY_X:
						danmakux.menuChoice = 2;
						break;
				}
			}
			else if (danmakux.state_paused) {
				switch (ev.keyboard.keycode) {
					case ALLEGRO_KEY_UP:
						danmakux.menuChoice -= 1;
						if (danmakux.menuChoice < 0) danmakux.menuChoice = danmakux.pauseitems.size()-1;
						break;
					case ALLEGRO_KEY_DOWN:
						danmakux.menuChoice = (danmakux.menuChoice + 1) % danmakux.pauseitems.size();
						break;
					case ALLEGRO_KEY_LEFT:
						danmakux.menuChoice -= 1;
						if (danmakux.menuChoice < 0) danmakux.menuChoice = danmakux.pauseitems.size()-1;
						break;
					case ALLEGRO_KEY_RIGHT:
						danmakux.menuChoice = (danmakux.menuChoice + 1) % danmakux.pauseitems.size();
						break;
					case ALLEGRO_KEY_Z:
						break;
					case ALLEGRO_KEY_X:
						danmakux.fireBomb = true;
						break;
				}
			}
		}
		else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
			if (danmakux.state_playing && !danmakux.state_paused) {
				switch (ev.keyboard.keycode) {
					case ALLEGRO_KEY_UP:
						danmakux.player->moveu = false;
						break;
					case ALLEGRO_KEY_DOWN:
						danmakux.player->moved = false;
						break;
					case ALLEGRO_KEY_LEFT:
						danmakux.player->movel = false;
						break;
					case ALLEGRO_KEY_RIGHT:
						danmakux.player->mover = false;
						break;
					case ALLEGRO_KEY_Z:
						danmakux.player->fireFront = 0;
						break;
					case ALLEGRO_KEY_X:
						danmakux.player->fireBack = 0;
						break;
					case ALLEGRO_KEY_C:
						danmakux.player->fireSide = 0;
						break;
					case ALLEGRO_KEY_LSHIFT:
						danmakux.player->focused = false;
						break;
				}
			}
		}

		if (redraw && al_is_event_queue_empty(event_queue)) {
			redrawDisp();
		}
	}
}
Example #11
0
int main(int argc, char **argv){

    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    ALLEGRO_TIMER *timer = NULL;
    bool redraw = true;

    if(!al_init()) {
        fprintf(stderr, "failed to initialize allegro!\n");
        return -1;
    }

    timer = al_create_timer(1.0 / FPS);
    if(!timer) {
        fprintf(stderr, "failed to create timer!\n");
        return -1;
    }

    display = al_create_display(640, 480);
    if(!display) {
        fprintf(stderr, "failed to create display!\n");
        al_destroy_timer(timer);
        return -1;
    }

    event_queue = al_create_event_queue();
    if(!event_queue) {
        fprintf(stderr, "failed to create event_queue!\n");
        al_destroy_display(display);
        al_destroy_timer(timer);
        return -1;
    }

    al_register_event_source(event_queue, al_get_display_event_source(display));

    al_register_event_source(event_queue, al_get_timer_event_source(timer));

    al_clear_to_color(al_map_rgb(0,0,0));

    al_flip_display();

    al_start_timer(timer);

    while(1)
    {
        ALLEGRO_EVENT ev;
        al_wait_for_event(event_queue, &ev);

        if(ev.type == ALLEGRO_EVENT_TIMER) {
            redraw = true;
        }
        else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
            break;
        }

        if(redraw && al_is_event_queue_empty(event_queue)) {
            redraw = false;
            al_clear_to_color(al_map_rgb(0,0,0));
            al_flip_display();
        }
    }

    al_destroy_timer(timer);
    al_destroy_display(display);
    al_destroy_event_queue(event_queue);

    return 0;
}
Example #12
0
int main(int argc, char **argv)
{
   ALLEGRO_DISPLAY *display = NULL;
   ALLEGRO_EVENT_QUEUE *event_queue = NULL;
   ALLEGRO_TIMER *timer = NULL;
   ALLEGRO_BITMAP *bouncer = NULL;
   float bouncer_x = SCREEN_W / 2.0 - BOUNCER_SIZE / 2.0;
   float bouncer_y = SCREEN_H / 2.0 - BOUNCER_SIZE / 2.0;
   bool key[4] = { false, false, false, false };
   bool redraw = true;
   bool doexit = false;
    srand(time(NULL));
 
   if(!al_init()) {
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
   }
 
    al_install_keyboard();
    al_init_primitives_addon();
       
   timer = al_create_timer(1.0 / FPS);
   if(!timer) {
      fprintf(stderr, "failed to create timer!\n");
      return -1;
   }
 
   display = al_create_display(SCREEN_W, SCREEN_H);
   if(!display) {
      fprintf(stderr, "failed to create display!\n");
      al_destroy_timer(timer);
      return -1;
   }
 
   bouncer = al_create_bitmap(BOUNCER_SIZE, BOUNCER_SIZE);
   if(!bouncer) {
      fprintf(stderr, "failed to create bouncer bitmap!\n");
      al_destroy_display(display);
      al_destroy_timer(timer);
      return -1;
   }
 
   al_set_target_bitmap(bouncer);
 
   al_clear_to_color(al_map_rgb(255, 255, 0));

   al_set_target_bitmap(al_get_backbuffer(display));
 
   event_queue = al_create_event_queue();
   if(!event_queue) {
      fprintf(stderr, "failed to create event_queue!\n");
      al_destroy_bitmap(bouncer);
      al_destroy_display(display);
      al_destroy_timer(timer);
      return -1;
   }
 
   al_register_event_source(event_queue, al_get_display_event_source(display));
 
   al_register_event_source(event_queue, al_get_timer_event_source(timer));
 
   al_register_event_source(event_queue, al_get_keyboard_event_source());
 
   al_clear_to_color(al_map_rgb(255,255,0));
 
   al_flip_display();
 
   al_start_timer(timer);
 
   //¡¡QUE EMPIEZE LA FIESTA!!
    //¿En qué momento ponemos como verdaderos lo booleanos de las teclas?
    while(!doexit)
   {
      ALLEGRO_EVENT ev;
      al_wait_for_event(event_queue, &ev);
 
      if(ev.type == ALLEGRO_EVENT_TIMER/*?*/) {
         //Revisa si se sale de los bordes de la pantalla, pero no sé porqué no lo hace siempre
          if(key[KEY_UP] && bouncer_y >= 4.0) {
            bouncer_y -= 4.0;
         }
 
         if(key[KEY_DOWN] && bouncer_y <= SCREEN_H - BOUNCER_SIZE - 4.0) {
            bouncer_y += 4.0;
         }
 
         if(key[KEY_LEFT] && bouncer_x >= 4.0) {
            bouncer_x -= 4.0;
         }
 
         if(key[KEY_RIGHT] && bouncer_x <= SCREEN_W - BOUNCER_SIZE - 4.0) {
            bouncer_x += 4.0;
         }
 
         redraw = true;
      }
      else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
         break;
      }
      else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) {
         switch(ev.keyboard.keycode) {
            case ALLEGRO_KEY_W:
               key[KEY_UP] = true;
               break;
 
            case ALLEGRO_KEY_DOWN:
               key[KEY_DOWN] = true;
               break;
 
            case ALLEGRO_KEY_LEFT: 
               key[KEY_LEFT] = true;
               break;
 
            case ALLEGRO_KEY_RIGHT:
               key[KEY_RIGHT] = true;
               break;
         }
      }
      else if(ev.type == ALLEGRO_EVENT_KEY_UP) {
         switch(ev.keyboard.keycode) {
            case ALLEGRO_KEY_UP:
               key[KEY_UP] = false;
               break;
 
            case ALLEGRO_KEY_DOWN:
               key[KEY_DOWN] = false;
               break;
 
            case ALLEGRO_KEY_LEFT: 
               key[KEY_LEFT] = false;
               break;
 
            case ALLEGRO_KEY_RIGHT:
               key[KEY_RIGHT] = false;
               break;
            case ALLEGRO_KEY_ESCAPE:
               doexit = true;
               break;
         }
      }
 
      if(redraw && al_is_event_queue_empty(event_queue)) {
         redraw = false;
 
         al_clear_to_color(al_map_rgb(0,0,0));
 
         al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0);
 
         al_flip_display();
      }
   }
 
   al_destroy_bitmap(bouncer);
   al_destroy_timer(timer);
   al_destroy_display(display);
   al_destroy_event_queue(event_queue);
 
   return 0;
}
Example #13
0
void Mousebinds::update() noexcept
{
    m_mouseLeftClick = false;
    m_mouseRightClick = false;
    m_mouseWheelChange = 0;
    if (leftMouseHeld())
    {
        m_mouseLeftClickHeldDuration++;
    }
    if (rightMouseHeld())
    {
        m_mouseRightClickHeldDuration++;
    }
    while (!al_is_event_queue_empty(m_events))
    {
        al_get_next_event(m_events, &m_event);
        ALLEGRO_EVENT_TYPE ty = m_event.type;
        if (ty == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN)
        {
            m_mouseEvent = m_event.mouse;
            //left mouse button
            if (m_mouseEvent.button & 1)
            {
                m_mouseLeftClick = true;
                m_mouseLeftClickHeld = true;
                m_mouseLeftClickHeldDuration = 0;
                //printf("left mouse click at x: %d y: %d\n", m_mouseEvent.x, m_mouseEvent.y);
            }
            //right mouse button
            else if (m_mouseEvent.button & 2)
            {
                m_mouseRightClick = true;
                m_mouseRightClickHeld = true;
                m_mouseRightClickHeldDuration = 0;
                //printf("right mouse click at x: %d y: %d\n", m_mouseEvent.x, m_mouseEvent.y);
            }
        }
        if (ty == ALLEGRO_EVENT_MOUSE_BUTTON_UP)
        {
            m_mouseEvent = m_event.mouse;
            //left mouse button
            if (m_mouseEvent.button & 1)
            {
                m_mouseLeftClick = false;
                m_mouseLeftClickHeld = false;
                m_mouseLeftClickHeldDuration = 0;
                //printf("left mouse click at x: %d y: %d\n", m_mouseEvent.x, m_mouseEvent.y);
            }
            //right mouse button
            else if (m_mouseEvent.button & 2)
            {
                m_mouseRightClick = false;
                m_mouseRightClickHeld = false;
                m_mouseRightClickHeldDuration = 0;
                //printf("right mouse click at x: %d y: %d\n", m_mouseEvent.x, m_mouseEvent.y);
            }
        }

        //mouse was moved
        if (ty == ALLEGRO_EVENT_MOUSE_AXES)
        {
            m_mouseEvent = m_event.mouse;
            m_mousePos.x = m_mouseEvent.x;
            m_mousePos.y = m_mouseEvent.y;
            m_mouseWheel = m_mouseEvent.z;
            m_mouseWheelChange = m_mouseEvent.dz;
            //printf("mouse at x: %d y: %d\n", mouseEvent.x, mouseEvent.y);
        }
    }
}
Example #14
0
int main(int argc, char **argv)
{
   ALLEGRO_DISPLAY *display = NULL;
   ALLEGRO_EVENT_QUEUE *event_queue = NULL;
   ALLEGRO_TIMER *timer = NULL;
   ALLEGRO_BITMAP *bouncer = NULL;
   float bouncer_x = SCREEN_W / 2.0 - BOUNCER_SIZE / 2.0;
   float bouncer_y = SCREEN_H / 2.0 - BOUNCER_SIZE / 2.0;
   bool redraw = true;
 
   if(!al_init()) {
         fprintf(stderr, "failed to initialize allegro!\n");
         return -1;
      }
 
   if(!al_install_mouse()) {
         fprintf(stderr, "failed to initialize the mouse!\n");
         return -1;
      }
 
   timer = al_create_timer(1.0 / FPS);
   if(!timer) {
         fprintf(stderr, "failed to create timer!\n");
         return -1;
      }
 
   display = al_create_display(SCREEN_W, SCREEN_H);
   if(!display) {
         fprintf(stderr, "failed to create display!\n");
         al_destroy_timer(timer);
         return -1;
      }
 
   bouncer = al_create_bitmap(BOUNCER_SIZE, BOUNCER_SIZE);
   if(!bouncer) {
         fprintf(stderr, "failed to create bouncer bitmap!\n");
         al_destroy_display(display);
         al_destroy_timer(timer);
         return -1;
      }
 
   al_set_target_bitmap(bouncer);
 
   al_clear_to_color(al_map_rgb(255, 0, 255));
 
   al_set_target_bitmap(al_get_backbuffer(display));
 
   event_queue = al_create_event_queue();
   if(!event_queue) {
         fprintf(stderr, "failed to create event_queue!\n");
         al_destroy_bitmap(bouncer);
         al_destroy_display(display);
         al_destroy_timer(timer);
         return -1;
      }
 
   al_register_event_source(event_queue, al_get_display_event_source(display));
 
   al_register_event_source(event_queue, al_get_timer_event_source(timer));
 
   al_register_event_source(event_queue, al_get_mouse_event_source());
 
   al_clear_to_color(al_map_rgb(0,0,0));
 
   al_flip_display();
 
   al_start_timer(timer);
 
   while(1)
   {
         ALLEGRO_EVENT ev;
         al_wait_for_event(event_queue, &ev);
    
         if(ev.type == ALLEGRO_EVENT_TIMER) {
                  redraw = true;
               }
         else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
                  break;
               }
         else if(ev.type == ALLEGRO_EVENT_MOUSE_AXES ||
                               ev.type == ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY) {
          
                  bouncer_x = ev.mouse.x;
                  bouncer_y = ev.mouse.y;
               }
         else if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP) {
                   break;
               }
    
         if(redraw && al_is_event_queue_empty(event_queue)) {
                  redraw = false;
          
                  al_clear_to_color(al_map_rgb(0,0,0));
          
                  al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0);
          
                  al_flip_display();
               }
      }
 
   al_destroy_bitmap(bouncer);
   al_destroy_timer(timer);
   al_destroy_display(display);
   al_destroy_event_queue(event_queue);
 
   return 0;
}
Example #15
0
void do_highscores(int score)
{
   read_scores();

   ResourceManager& rm = ResourceManager::getInstance();
   Input *input = (Input *)rm.getData(RES_INPUT);
   ALLEGRO_FONT *sm_font = (ALLEGRO_FONT *)rm.getData(RES_SMALLFONT);
   ALLEGRO_FONT *big_font = (ALLEGRO_FONT *)rm.getData(RES_LARGEFONT);
   
   bool is_high = score >= highScores[NUM_SCORES-1].score;
   bool entering = is_high;
   double bail_time = al_get_time() + 8;
   int letter_num = 0;
   char name[4] = "   ";
   int character = 0;
   double next_input = al_get_time();
   double spin_start = 0;
   int spin_dir = 1;

   for (;;) {
      /* Catch close button presses */
      ALLEGRO_EVENT_QUEUE *events = ((DisplayResource *)rm.getResource(RES_DISPLAY))->getEventQueue();
      while (!al_is_event_queue_empty(events)) {
         ALLEGRO_EVENT event;
         al_get_next_event(events, &event);
#ifdef ALLEGRO_IPHONE
         if (event.type == ALLEGRO_EVENT_DISPLAY_HALT_DRAWING || event.type == ALLEGRO_EVENT_DISPLAY_SWITCH_OUT) {
            switch_game_out(event.type == ALLEGRO_EVENT_DISPLAY_HALT_DRAWING);
         }
         else if (event.type == ALLEGRO_EVENT_DISPLAY_RESUME_DRAWING || event.type == ALLEGRO_EVENT_DISPLAY_SWITCH_IN) {
            switch_game_in();
         }
#else
         if (event.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
            exit(0);
#endif
      }

      input->poll();
      
      if (entering && al_get_time() > next_input) {
         float lr = input->lr();

         if (lr != 0) {
            if (lr < 0) {
               character--;
               if (character < 0)
                  character = 25;
               spin_dir = 1;
            }
            else if (lr > 0) {
               character++;
               if (character >= 26)
                  character = 0;
               spin_dir = -1;
            }
            next_input = al_get_time()+0.2;
            my_play_sample(RES_FIRESMALL);
            spin_start = al_get_time();
         }

         if (input->b1() && letter_num < 3) {
            name[letter_num] = 'A' + character;
            letter_num++;
            if (letter_num >= 3) {
               entering = false;
               bail_time = al_get_time()+8;
               insert_score(name, score);
               write_scores();
            }
            next_input = al_get_time()+0.2;
            my_play_sample(RES_FIRELARGE);
         }
      }
      else if (!entering) {
         if (al_get_time() > bail_time) {
            return;
         }
         else if (input->b1() && al_get_time() > next_input) {
            al_rest(0.250);
            return;
         }
      }

      al_rest(0.010);

#ifdef ALLEGRO_IPHONE
      if (switched_out) {
         continue;
      }
#endif

      al_clear_to_color(al_map_rgb(0, 0, 0));

      if (entering) {
         float a = ALLEGRO_PI*3/2;
         float ainc = ALLEGRO_PI*2 / 26;
         double elapsed = al_get_time() - spin_start;
         if (elapsed < 0.1) {
            a += (elapsed / 0.1) * ainc * spin_dir;
         }
         float scrh = BB_H / 2 - 32;
         float h = al_get_font_line_height(sm_font);
         for (int i = 0; i < 26; i++) {
            int c = character + i;
            if (c >= 26)
               c -= 26;
            char s[2];
            s[1] = 0;
            s[0] = 'A' +  c;
            int x = BB_W/2 + (cos(a) * scrh) - al_get_text_width(sm_font, s);
            int y = BB_H/2 + (sin(a) * scrh) - h/2;
            al_draw_textf(sm_font, i == 0 ? al_map_rgb(255, 255, 0) : al_map_rgb(200, 200, 200), x, y, 0, "%s", s);
            a += ainc;
         }
         char tmp[4] = { 0, };
         for (int i = 0; i < 3 && name[i] != ' '; i++) {
            tmp[i] = name[i];
         }
         al_draw_textf(big_font, al_map_rgb(0, 255, 0), BB_W/2, BB_H/2-20, ALLEGRO_ALIGN_CENTRE, "%s", tmp);
         al_draw_text(sm_font, al_map_rgb(200, 200, 200), BB_W/2, BB_H/2-20+5+al_get_font_line_height(big_font), ALLEGRO_ALIGN_CENTRE, "high score!");
      }
      else {
         int yy = BB_H/2 - al_get_font_line_height(big_font)*NUM_SCORES/2;
         for (int i = 0; i < NUM_SCORES; i++) {
            al_draw_textf(big_font, al_map_rgb(255, 255, 255), BB_W/2-10, yy, ALLEGRO_ALIGN_RIGHT, "%s", highScores[i].name);
            al_draw_textf(big_font, al_map_rgb(255, 255, 0), BB_W/2+10, yy, ALLEGRO_ALIGN_LEFT, "%d", highScores[i].score);
            yy += al_get_font_line_height(big_font);
         }
      }

#ifdef ALLEGRO_IPHONE
      input->draw();
#endif

      al_flip_display();
   }
}
int
main (int argc, char **argv)
{


  Pelota pelota[N];

  srand (time (NULL));
  iniciar_allegro ();

  for (int i = 0; i < N; i++)
    pelota[i].set_dibujo (bm);

  while (1)
    {				/* Buzz Lightyear */
      ALLEGRO_EVENT ev;
      ALLEGRO_TIMEOUT timeout;
      al_init_timeout (&timeout, 0.06);

      bool get_event = al_wait_for_event_until (event_queue, &ev, &timeout);

      if (get_event)
	{
	  if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
	    break;
	  if (ev.type == ALLEGRO_EVENT_TIMER)
	    redraw = true;
	  if (ev.type == ALLEGRO_EVENT_KEY_DOWN)
	    {
	      switch (ev.keyboard.keycode)
		{
		case ALLEGRO_KEY_UP:
		  tecla[KEY_UP] = true;
		  break;
		case ALLEGRO_KEY_DOWN:
		  tecla[KEY_DOWN] = true;
		  break;
		case ALLEGRO_KEY_LEFT:
		  tecla[KEY_LEFT] = true;
		  break;
		case ALLEGRO_KEY_RIGHT:
		  tecla[KEY_RIGHT] = true;
		  break;
		}
	    }
	  if (ev.type == ALLEGRO_EVENT_KEY_UP)
	    {
	      switch (ev.keyboard.keycode)
		{
		case ALLEGRO_KEY_UP:
		  tecla[KEY_UP] = false;
		  break;
		case ALLEGRO_KEY_DOWN:
		  tecla[KEY_DOWN] = false;
		  break;
		case ALLEGRO_KEY_LEFT:
		  tecla[KEY_LEFT] = false;
		  break;
		case ALLEGRO_KEY_RIGHT:
		  tecla[KEY_RIGHT] = false;
		  break;
		case ALLEGRO_KEY_LSHIFT:
		  sprite_number++;
		  break;
		}
	    }
	}

      /* Actualizar las coordenadas de la pelota */
      if (tecla[KEY_UP])
	pelota.change_vy (-DELTA);
      if (tecla[KEY_DOWN])
	pelota.change_vy (DELTA);
      if (tecla[KEY_LEFT])
	pelota.change_vx (-DELTA);
      if (tecla[KEY_RIGHT])
	pelota.change_vx (DELTA);

      for (int i = 0; i < N; i++)
	pelota[i].actualizate ();

      if (redraw && al_is_event_queue_empty (event_queue))
	{
	  al_clear_to_color (al_map_rgb (0, 0, 0));
	  al_draw_bitmap (bm2, 0, 0, 0);
	  for (int i = 0; i < N; i++)
	    al_draw_bitmap (pelota[i].get_dibujo (), pelota[i].get_x () + 450,
			    pelota[i].get_y () + 450, 0);

	  al_flip_display ();
	  redraw = false;
	}

    }

  destruir_allegro ();

  return 0;
}
Example #17
0
void game_loop(void)
{
    bool redraw = true;
    al_start_timer(timer);

    int windowWidth = al_get_display_width(display);
    int windowHeight = al_get_display_height(display);
        
    User user{};
    user.user_x = windowWidth/2;
    int level_nr = 1;

    LevelData level(create_level(60, level_nr, true));
    
    ALLEGRO_KEYBOARD_STATE kbd_state;
    
    double start_time = 0;
    double time_last = 0;
    double time_curr = 0;
    double elapsed_time = 0;
    double elapsed_time_unadjusted = 0;

    bool death = false;
    int finished_level = 5;
    int num_kills = 0;  
    while (!done)
    {        
        auto& opponents = level.opponents;
        
        ALLEGRO_EVENT event;
        al_wait_for_event(event_queue, &event);

        if (event.type == ALLEGRO_EVENT_TIMER)
        {
            //done = main_loop.tick();
            redraw = true;
            time_curr = al_get_time();
            double dt = time_curr - time_last;
            dt = std::min(dt, 0.2);
            elapsed_time_unadjusted += dt;
            elapsed_time = elapsed_time_unadjusted - start_time;
            
            for (auto& opponent : opponents)
            {
                if (!opponent.active && elapsed_time >= opponent.time)
                {
                    opponent.active = true;
                    opponent.x = opponent.direction == Direction::LEFT ? windowWidth - 100 : 100;                    
                }
                else if (opponent.active)
                {
                    int sign = opponent.direction == Direction::LEFT ? -1 : 1;
                    opponent.x += sign*opponent.speed*dt;
                }
            }
            
            for (int i = 0; i < opponents.size(); i++)
            {
                auto& opponent = opponents[i];
                if (opponent.active && overlaps(user.user_x, opponent.x, user.rect_size))
                {
                    user.user_shape = opponent.is_shapeshifter ? opponent.shape : user.user_shape;
                    if (opponent.shape != user.user_shape)
                    {
                        death = true;
                    }
                    else
                    {
                        num_kills++;
                    }
                    opponents.erase(opponents.begin() + i);
                    i--;                    
                }
            }
            
            al_get_keyboard_state(&kbd_state);
            bool left = al_key_down(&kbd_state,ALLEGRO_KEY_LEFT) || al_key_down(&kbd_state, ALLEGRO_KEY_A);
            bool right = al_key_down(&kbd_state,ALLEGRO_KEY_RIGHT) || al_key_down(&kbd_state, ALLEGRO_KEY_D);

            if (left && !right)
            {
                user.user_x = user.user_x - user.user_speed*dt;
            }
            else if (!left && right)
            {
                user.user_x = user.user_x + user.user_speed*dt;
            }
            
            user.user_x = std::max(100.0 + 2*user.rect_size, user.user_x);
            user.user_x = std::min(static_cast<double>(windowWidth) - 100.0 -(2*user.rect_size), user.user_x);            
            
            time_last = time_curr;
        }
        else if (event.type == ALLEGRO_EVENT_KEY_DOWN) {
            if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE) {
                done = true;
            }
            {
                //main_loop.key_pressed(event.keyboard.keycode);
            }
        }
        else if (event.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
          done = true;
        }

        if (redraw && al_is_event_queue_empty(event_queue)) {
            redraw = false;
            al_clear_to_color(ColorScheme::color_bg());
            
            Drawing::draw_all(windowWidth, windowHeight, user, opponents);

            if (level.first_level)
            {
                Drawing::draw_tutorial_texts(font, ColorScheme::color1(), windowWidth/2 , windowHeight/5, elapsed_time);
            }
            else if (level_nr != finished_level)
            {
                Drawing::draw_level_texts(font, ColorScheme::color1(), windowWidth/2, windowHeight/5, level_nr, elapsed_time);
            }
            else
            {
                Drawing::draw_credits(font, ColorScheme::color1(), windowWidth/2, windowHeight/5);
            }
            al_flip_display();
        }
        
        if (death)
        {
            if (level_nr == 1)
                level = create_level(60, level_nr, false);
            else
                level = create_level(60, level_nr, false);

            user = User{};
            user.user_x = windowWidth/2;
            start_time = al_get_time();
            death = false;
            num_kills = 0;            
        }
        else if (opponents.empty())
        {
            level_nr++;
            level = create_level(60, level_nr, false);
            user = User{};
            user.user_x = windowWidth/2;
            start_time = al_get_time();
            death = false;
            num_kills = 0;      
        }
    }
}
Example #18
0
int main(){
	/*Game Settings*/

	State state = STARTED;
	int render = 0;
	ALLEGRO_DISPLAY *display;
	ALLEGRO_EVENT_QUEUE *queue;
	ALLEGRO_TIMER *timer;
	ALLEGRO_FONT *pixelate;
	ALLEGRO_BITMAP *back1;
	ALLEGRO_BITMAP *back2;
	ALLEGRO_BITMAP *space;
	ALLEGRO_BITMAP *logo;
	struct Background bg1;
	struct Background bg2;
	struct Background bgspace;

	al_init();

	display = al_create_display(800, 600);
	al_set_window_position(display, 100, 100);
	al_set_window_title(display, "GaliType - Grupo 6");

	al_init_font_addon();
	al_init_ttf_addon();
	al_init_image_addon();
	al_install_keyboard();

	back1 = al_load_bitmap("back1.png");
	back2 = al_load_bitmap("back2.png");
	space = al_load_bitmap("space.jpg");
	logo = al_load_bitmap("logo.png");

	initBack(&bg1, 0, 0, 1.5, -1, 800, 600, back1);
	initBack(&bg2, 0, 0, 1, -1, 800, 600, back2);
	initBack(&bgspace, 0, 0, 0.5, -1, 1000, 600, space);

	queue = al_create_event_queue();
	timer = al_create_timer(1.0 / 60);

	al_register_event_source(queue, al_get_timer_event_source(timer));
	al_register_event_source(queue, al_get_keyboard_event_source());
	al_register_event_source(queue, al_get_display_event_source(display));



	pixelate = al_load_ttf_font("Pixelate.ttf", 30, 0);

	al_start_timer(timer);
	while (state != FINISHED){
		ALLEGRO_EVENT ev;
		al_wait_for_event(queue, &ev);
		if (ev.type == ALLEGRO_EVENT_KEY_DOWN){
			if (state == STARTED){
				switch (ev.keyboard.keycode)
				{
				case ALLEGRO_KEY_ESCAPE:
					state = FINISHED;
					break;
				case ALLEGRO_KEY_ENTER:
					state = SELECT_DIFFICULTY;
					break;
				}
			}
			if (state == SELECT_DIFFICULTY){
				switch (ev.keyboard.keycode){
					case ALLEGRO_KEY_1:
					case ALLEGRO_KEY_PAD_1:
						startGame(EASY);
						break;
					case ALLEGRO_KEY_2:
					case ALLEGRO_KEY_PAD_2:
						startGame(MEDIUM);
						break;
					case ALLEGRO_KEY_3:
					case ALLEGRO_KEY_PAD_3:
						startGame(HARD);
						break;
					case ALLEGRO_KEY_4:
					case ALLEGRO_KEY_PAD_4:
						startGame(TYPING_MASTER);
						break;
					case ALLEGRO_KEY_ESCAPE:
						state = STARTED;
						break;
				}
			}
		}

		else if (ev.type == ALLEGRO_EVENT_TIMER)
		{
			updateBack(&bg1);
			updateBack(&bg2);
			updateBack(&bgspace);
			render = 1;
		}
		else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE){
			state = FINISHED;
		}
		if (render == 1 && al_is_event_queue_empty(queue))
		{
			render = 0;
			drawBack(&bgspace);
			drawBack(&bg1);
			drawBack(&bg2);

			al_draw_bitmap(logo, 50, 25, 0);
			if (state == STARTED){
				al_draw_text(pixelate, al_map_rgb(255, 255, 255), 50, 250, 0, "Get ready to type...");
				al_draw_text(pixelate, al_map_rgb(255, 255, 255), 50, 350, 0, "Press Enter to start a new game");
				al_draw_text(pixelate, al_map_rgb(255, 255, 255), 50, 450, 0, "Press Esc to exit.");
			}
			if (state == SELECT_DIFFICULTY){
				al_draw_text(pixelate, al_map_rgb(255, 255, 255), 50, 250, 0, "Select difficulty:");
				al_draw_text(pixelate, al_map_rgb(255, 255, 255), 50, 300, 0, "1. Easy");
				al_draw_text(pixelate, al_map_rgb(255, 255, 255), 50, 350, 0, "2. Medium");
				al_draw_text(pixelate, al_map_rgb(255, 255, 255), 50, 400, 0, "3. Hard");
				al_draw_text(pixelate, al_map_rgb(255, 255, 255), 50, 450, 0, "4. Typing Boss");
				al_draw_text(pixelate, al_map_rgb(255, 255, 255), 50, 500, 0, "Press Esc to return...");
			}
			al_flip_display();
			al_clear_to_color(al_map_rgb(0, 0, 0));

		}

	}

	al_destroy_bitmap(back1);
	al_destroy_bitmap(back2);
	al_destroy_bitmap(space);
	al_destroy_bitmap(logo);
	al_destroy_font(pixelate);
	al_destroy_display(display);
	return 0;
}
Example #19
0
void loopGame()
{
    bool fin = true;
    bool key[KEY_MAX]={0};

    while(fin) {
        ALLEGRO_EVENT event = {0};

        al_wait_for_event(queue, &event);

        switch (event.type) {
            case ALLEGRO_EVENT_DISPLAY_CLOSE:
                fin = false;
                break;
            case ALLEGRO_EVENT_KEY_DOWN:
                switch (event.keyboard.keycode) {
                    case ALLEGRO_KEY_UP:
                        key[KEY_UP] = true;
                        break;
                    case ALLEGRO_KEY_DOWN:
                        key[KEY_DOWN] = true;
                        break;
                    case ALLEGRO_KEY_A:
                        key[KEY_A] = true;
                        break;
                    case ALLEGRO_KEY_Q:
                        key[KEY_Q] = true;
                        break;
                }
                break;
            case ALLEGRO_EVENT_KEY_UP:
                switch (event.keyboard.keycode) {
                    case ALLEGRO_KEY_UP:
                        key[KEY_UP] = false;
                        break;
                    case ALLEGRO_KEY_DOWN:
                        key[KEY_DOWN] = false;
                        break;
                    case ALLEGRO_KEY_A:
                        key[KEY_A] = false;
                        break;
                    case ALLEGRO_KEY_Q:
                        key[KEY_Q] = false;
                        break;
                }
                break;
            case ALLEGRO_EVENT_TIMER:
                player1.y -= key[KEY_UP] * 10;
                player1.y += key[KEY_DOWN] * 10;
                if(mode == MULTI)
                {
                    player2.y -= key[KEY_A] * 10;
                    player2.y += key[KEY_Q] * 10;
                }
                ball.x += ball.dx;
                ball.y += ball.dy;
                if(mode == SOLO)
                    playComputer();
                if(al_is_event_queue_empty(queue))
                    drawWorld();
                break;
        }
    }
}
Example #20
0
int main(int argc, char **argv){

    struct Movil nave;
    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_BITMAP  *sprites   = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    ALLEGRO_TIMER *timer = NULL;
    bool key[4] = { false, false, false, false  };
    bool redraw = true;
    bool doexit = false;

    /* Alegro startup */

    if(!al_init()) {
        al_show_native_message_box(display, "Error", "Error", "Failed to initialize allegro!",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);
        return 0;
    }

    if(!al_init_image_addon()) {
        al_show_native_message_box(display, "Error", "Error", "Failed to initialize al_init_image_addon!",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);
        return 0;
    }

    if(!al_install_keyboard()){
        al_show_native_message_box(display, "Error", "Error", "Failed to initialize al_init_image_addon!",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);
        return 0;
    };

    /* Alegro artifact creation */

    display = al_create_display(SCREEN_W, SCREEN_H);

    if(!display) {
        al_show_native_message_box(display, "Error", "Error", "Failed to initialize display!",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);
        return 0;
    }

    timer = al_create_timer(1.0 / FPS);
    if(!timer) {
        al_show_native_message_box(display, "Error", "Error", "failed to create timer!\n",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);
        al_destroy_display(display);
        return -1;
    }
    event_queue = al_create_event_queue();
    if(!event_queue) {
        al_show_native_message_box(display, "Error", "Error", "failed to create event_queue!\n",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);
        al_destroy_timer(timer);
        return -1;
    }

    /* stitching */
    sprites = al_load_bitmap("images/xenon2_sprites.png");

    if(!sprites) {
        al_show_native_message_box(display, "Error", "Error", "Failed to load sprites!",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);
        al_destroy_timer(timer);
        al_destroy_event_queue(event_queue);
        return 0;
    }

    al_register_event_source(event_queue, al_get_display_event_source(display));
    al_register_event_source(event_queue, al_get_keyboard_event_source());
    al_register_event_source(event_queue, al_get_timer_event_source(timer));


    /* Init game objects */
    init(sprites, &nave);

    al_clear_to_color(al_map_rgb(0,0,0));
    al_flip_display();
    al_start_timer(timer);


    /* Game loop */

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


        if(ev.type == ALLEGRO_EVENT_TIMER)
            redraw = true;
        else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
            break;
        else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_UP:
                    key[KEY_UP] = true;
                    break;

                case ALLEGRO_KEY_DOWN:
                    key[KEY_DOWN] = true;
                    break;

                case ALLEGRO_KEY_LEFT:
                    key[KEY_LEFT] = true;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    key[KEY_RIGHT] = true;
                    break;
            }
        } else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_UP:
                    key[KEY_UP] = false;
                    break;

                case ALLEGRO_KEY_DOWN:
                    key[KEY_DOWN] = false;
                    break;

                case ALLEGRO_KEY_LEFT:
                    key[KEY_LEFT] = false;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    key[KEY_RIGHT] = false;
                    break;

                case ALLEGRO_KEY_ESCAPE:
                    doexit = true;
                    break;
            }
        }

        update_physics(key, &nave);

        if(redraw && al_is_event_queue_empty(event_queue)) {
            redraw = false;
            //al_draw_bitmap(sprites,200,200,0);
            al_draw_bitmap(nave.img, 100, 100, 0);
            al_flip_display();
        }

    }

    /* Housekeeping */

    al_rest(2);

    al_destroy_display(display);
    al_destroy_timer(timer);
    al_destroy_event_queue(event_queue);
    al_destroy_bitmap(sprites);

    return 0;
}
Example #21
0
int main(int argc, char **argv){

    //tela
    ALLEGRO_DISPLAY *display = NULL;
    //fila de eventos detectados pelo Allegro (ex: tecla que foi apertada, clique do mouse etc)
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    //temporizador: quando FPS = 10, a cada 0.1 segundos o tempo passa de t para t+1 e a fila de eventos detecta
    ALLEGRO_TIMER *timer = NULL;
    //figura do passaro
    ALLEGRO_BITMAP *bird = NULL;
    //variavel que indica se eh para redesenhar o passaro
    bool redraw = true;


    //------------------------------ rotinas de inicializacao -------------------------


	//inicializa o allegro. Se nao conseguir, imprime na tela uma msg de erro.
    if(!al_init()) {
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
    }

	//inicializa o temporizador com a taxa de 1 quadro a cada 0.1 segundos. Se nao conseguir, imprime na tela uma msg de erro.
    timer = al_create_timer(1.0 / FPS);
    if(!timer) {
      fprintf(stderr, "failed to create timer!\n");
      return -1;
    }

	//inicializa a tela. Se nao conseguir, imprime na tela uma msg de erro.
    display = al_create_display(SCREEN_W, SCREEN_H);
    if(!display) {
      fprintf(stderr, "failed to create display!\n");
      al_destroy_timer(timer);
      return -1;
    }

    //inicializar o modulo de imagens
    al_init_image_addon();

    //carregar a figura .jpg na variavel bird
    bird = al_load_bitmap("Angry-Bird.jpg");
	//se nao conseguiu achar o arquivo, imprime uma msg de erro
    if(!bird) {
      fprintf(stderr, "failed to create bird bitmap!\n");
      al_destroy_display(display);
      al_destroy_timer(timer);
      return -1;
    }
    //largura e altura da figura do passaro
    float largura_passaro =  al_get_bitmap_width(bird);
    float altura_passaro =  al_get_bitmap_height(bird);
    //posicao x e y inicial do passaro na tela
    float bird_x = 0;
    float bird_y = SCREEN_H / 2.0 -  altura_passaro / 2.0;

    //variacao de x e y ao longo do tempo
    float bird_dx = 1.0, bird_dy = 0.0;

    //criar a fila de eventos
    event_queue = al_create_event_queue();
	//se nao conseguiu criar a fila de eventos
    if(!event_queue) {
      fprintf(stderr, "failed to create event_queue!\n");
      al_destroy_bitmap(bird);
      al_destroy_display(display);
      al_destroy_timer(timer);
      return -1;
    }

    //registrar mudancas na tela dentro da fila de eventos, isto e, sempre que a tela mudar, um evento ocorrerah
    al_register_event_source(event_queue, al_get_display_event_source(display));

    //coloca o timer na fila de eventos, isto e, sempre que o tempo passar, um evento eh gerado
    al_register_event_source(event_queue, al_get_timer_event_source(timer));

    //limpa a tela e coloca o fundo preto, cor: rgb(0,0,0) = preto
    al_clear_to_color(al_map_rgb(0,0,0));

    //reinicializa a tela
    al_flip_display();

    //inicia o temporizador
    al_start_timer(timer);

    //enquanto a posicao x do passaro for menor que a largura da tela
    while(bird_x < SCREEN_W)
    {
        //variavel do tipo evento
        ALLEGRO_EVENT ev;
        //a variavel ev recebe o primeiro evento da fila de eventos
        al_wait_for_event(event_queue, &ev);
        //se for um evento de timer, ou seja, se foi o tempo que passou de t para t+1
        if(ev.type == ALLEGRO_EVENT_TIMER) {
            //incrementa as posicoes x e y do passaro com o seu deslocamento dx e dy
            bird_x += bird_dx;
            bird_y += bird_dy;
            //como eu movi o passaro, preciso redesenhar ele (remova essa linha e veja o que acontece)
            redraw = true;
        }
        //se o evento for o fechamento da tela (clicando no x no canto superior direito)
        else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE  ) {
            //paro de executar o while
            break;
        }
        //se for para eu redesenhar a tela e nao tenho mais nenhum evento para ler
        if(redraw && al_is_event_queue_empty(event_queue)) {
            //nao preciso redesenhar
            redraw = false;
            //limpo a tela
            al_clear_to_color(al_map_rgb(0,0,0));
            //desenho o passaro na nova posicao
            al_draw_bitmap(bird, bird_x, bird_y, 0);
            //dou um refresh na tela
            al_flip_display();
        }
    } //fim while

    //rotinas de fim de jogo
    al_destroy_bitmap(bird);
    al_destroy_timer(timer);
    al_destroy_display(display);
    al_destroy_event_queue(event_queue);

    return 0;
}
Example #22
0
int main(void)
{
    bool done = false; // Variavel booleana para identificar se o programa terminou de ser executado
    bool redraw = true; // Enquanto essa variavel for verdadeira, ira ser desenhado algo na tela
    bool desenha = true;
    int draw[5]= {0, 0, 0, 0, 0};
    int pos_x = WIDTH / 2;
    int pos_y = HEIGHT / 2;
    int timer_tiros = 0;
    int timer_energy = 0;
    int timer_heats = 0;
    int timer_tamenho_heat = 0;
    int timer_componente = 0;
    int count = 0;


    Gamer(gamer);
    Zone zone[LINHAS][COLUNAS];
    Bullet bullets[NUM_BULLETS+1];
    Energy energy[NUM_ENERGYS+1];
    Heat heats[NUM_HEAT+1];
    Zombie zombie[NUM_ZOMBIES];
    Battery battery[NUM_BATTERY];


    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    ALLEGRO_TIMER *timer = NULL;
    ALLEGRO_FONT *font18 = NULL;
    ALLEGRO_FONT *font_maior = NULL;
    ALLEGRO_BITMAP *resistor = NULL;
    ALLEGRO_BITMAP *capacitor = NULL;
    ALLEGRO_BITMAP *indutor = NULL;
    ALLEGRO_BITMAP *diodo = NULL;
    ALLEGRO_BITMAP *bateria = NULL;
    ALLEGRO_BITMAP *protoboard = NULL;
    ALLEGRO_BITMAP *fogo = NULL;
    ALLEGRO_BITMAP *zombie_bitmap = NULL;
    ALLEGRO_BITMAP *ataque_eletromagnetico = NULL;
    ALLEGRO_BITMAP *energia_capacitor = NULL;
    ALLEGRO_BITMAP *logo = NULL;


    if(!al_init())										//initialize Allegro
        return -1;

    display = al_create_display(WIDTH, HEIGHT);			//create our display object

    if(!display)										//test display object
        return -1;

    al_init_primitives_addon();
    al_install_keyboard();
    al_init_font_addon();
    al_init_ttf_addon();
    al_install_mouse();
    al_init_image_addon();

    resistor = al_load_bitmap("Resistor.png");
    capacitor = al_load_bitmap("Capacitor.png");
    indutor = al_load_bitmap("Indutor.png");
    diodo = al_load_bitmap("Diodo.png");
    bateria = al_load_bitmap("Bateria.png");
    protoboard = al_load_bitmap("Protoboard.png");
    fogo = al_load_bitmap("fogo_resistor/fire1.png");
    zombie_bitmap = al_load_bitmap("Zombie.png");
    ataque_eletromagnetico = al_load_bitmap("eletromagnetismo.jpg");
    energia_capacitor = al_load_bitmap("energia_capacitor.png");
    logo = al_load_bitmap("logo_EvsZ.jpg");

    al_convert_mask_to_alpha(resistor, al_map_rgb(255, 0, 255));
    al_convert_mask_to_alpha(capacitor, al_map_rgb(255, 0, 255));
    al_convert_mask_to_alpha(indutor, al_map_rgb(255, 0, 255));
    al_convert_mask_to_alpha(diodo, al_map_rgb(255, 0, 255));
    al_convert_mask_to_alpha(bateria, al_map_rgb(255, 0, 255));
    al_convert_mask_to_alpha(zombie_bitmap, al_map_rgb(255, 255, 255));
    al_convert_mask_to_alpha(ataque_eletromagnetico, al_map_rgb(255, 255, 255));


    event_queue = al_create_event_queue();
    timer = al_create_timer(1.0 / FPS);

    InitGamer(gamer);
    InitZone(zone, LINHAS, COLUNAS);
    InitBullet(bullets, NUM_BULLETS+1);
    InitHeat(heats, NUM_HEAT+1);
    InitZombie(zombie, NUM_ZOMBIES);
    InitEnergy(energy, NUM_ENERGYS+1);
    InitBattery(battery, NUM_BATTERY);

    font18 = al_load_font("arial.ttf", 18, 0);
    font_maior = al_load_font("arial.ttf", 24, 0);

    al_register_event_source(event_queue, al_get_mouse_event_source());
    al_register_event_source(event_queue, al_get_keyboard_event_source());
    al_register_event_source(event_queue, al_get_timer_event_source(timer));
    al_register_event_source(event_queue, al_get_display_event_source(display));

    al_hide_mouse_cursor(display);
    al_start_timer(timer);

    while(!done)
    {
        ALLEGRO_EVENT ev;
/*===============================================================================================================================================*/
        if(state == MENU)
        {
            al_wait_for_event(event_queue, &ev);

            al_draw_bitmap(logo, WIDTH / 2 - 145, HEIGHT - 500, 0);
            al_draw_text(font18, al_map_rgb(255, 255, 255), WIDTH / 2, HEIGHT / 2, ALLEGRO_ALIGN_CENTRE, "Os Zombies querem roubar seu diploma, proteja-o");
            al_draw_text(font18, al_map_rgb(0, 255, 255), WIDTH / 2, HEIGHT / 2 + 100, ALLEGRO_ALIGN_CENTRE, "Pressione Space para jogar");
            al_draw_text(font_maior, al_map_rgb(0, 255, 0), WIDTH / 2, HEIGHT / 2 + 150, ALLEGRO_ALIGN_CENTRE, "Tecla 1 = Resistor Tecla 2 = Capacitor  Tecla 3 = Indutor  Tecla 4 = Diodo");
            if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
                if(ev.keyboard.keycode == ALLEGRO_KEY_SPACE)
                    state = PLAYING;

            if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
                done = true;

            al_flip_display();

        }
/*===============================================================================================================================================*/
        if(state == PLAYING)
        {
            al_wait_for_event(event_queue, &ev);

            if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
                done = true;

            if(ev.type == ALLEGRO_EVENT_TIMER)
            {
                redraw = true;


                    for(int i = 0; i < LINHAS; i++)
                        for(int j=0; j<COLUNAS; j++)
                            if(zone[i][j].x < pos_x &&
                                    zone[i][j].x + ZONEX > pos_x &&
                                    zone[i][j].y < pos_y &&
                                    zone[i][j].y + ZONEY > pos_y)
                                if(desenha)
                                    if(zone[i][j].draw == 0)
                                    {
                                        if(keys[KEY_1] && gamer.energy >= 100)
                                        {
                                            zone[i][j].draw = draw[1];
                                            gamer.energy -=100;
                                            draw[1] = 0;
                                        }
                                        if(keys[KEY_2] && gamer.energy >= 50)
                                        {
                                            zone[i][j].draw = draw[2];
                                            gamer.energy -=50;
                                            draw[2] = 0;
                                        }
                                        if(keys[KEY_3] && gamer.energy >= 100)
                                        {
                                            zone[i][j].draw = draw[3];
                                            gamer.energy -=100;
                                            draw[3] = 0;
                                        }
                                        if(keys[KEY_4] && gamer.energy >= 100)
                                        {
                                            zone[i][j].draw = draw[4];
                                            gamer.energy -=100;
                                            draw[4] = 0;
                                        }
                                    }
                timer_battery_speed++;
                timer_battery_start++;
                if(timer_battery_start >= 360) // diminui a frequencia com que nasce uma bateria nova
                {
                    StartBattery(battery, NUM_BATTERY);
                    timer_battery_start = 0;
                }

                if(timer_battery_speed >= 2) // reduz um pouco a velocidade da bateria
                {
                    UpdateBattery(battery, NUM_BATTERY);
                    timer_battery_speed = 0;
                }


                timer_heats++;

                for(int i=0; i<LINHAS; i++)
                    for(int j=0; j<COLUNAS; j++)
                        if(zone[i][j].draw == 1)
                            if(timer_heats >= 200)
                            {
                                FireHeat(heats, NUM_HEAT+1, zone);
                                timer_heats = 0;
                            }

                timer_energy++;
                timer_energy_cap_death++;

                for(int i=0; i<LINHAS; i++)
                    for(int j=0; j<COLUNAS; j++)
                        if(zone[i][j].draw == 2)
                        {
                            if(timer_energy >= 420)
                            {
                                CreateEnergy(energy, NUM_ENERGYS+1, zone);
                                timer_energy = 0;
                            }

                        }

                timer_tiros++;

                for(int i=0; i<LINHAS; i++)
                    for(int j=0; j<COLUNAS; j++)
                        if(zone[i][j].draw == 3)
                            if(timer_tiros >= 200) // faz os Electronics atirarem numa velocidade constante
                            {
                                FireBullet(bullets, NUM_BULLETS+1, zone);
                                timer_tiros = 0;
                            }
                timer_zombie_start++;
                timer_zombie_speed++;
                timer_dificuldade++;
                if(timer_zombie_start >= 3)
                {
                    StartZombie(zombie, NUM_ZOMBIES);
                    timer_zombie_start = 0;
                }
                if(dificuldade >20 && dificuldade <=500)
                {
                if(timer_dificuldade >= 300)
                    {
                        dificuldade -= 30;
                        timer_dificuldade = 0;
                    }
                }
                if(timer_zombie_speed >= 3)
                {
                    UpdateZombie(zombie, NUM_ZOMBIES);
                    timer_zombie_speed = 0;
                }


                UpdateBullet(bullets, NUM_BULLETS+1);
                CollideBullet(bullets, NUM_BULLETS, zombie, NUM_ZOMBIES, gamer);
                CollideHeat(heats, NUM_HEAT, zombie, NUM_ZOMBIES, gamer, timer_tamenho_heat);
                CollideZone(zone, LINHAS, COLUNAS, zombie, NUM_ZOMBIES);
                CollideZoneDiodo(zone, LINHAS, COLUNAS, zombie, NUM_ZOMBIES);


                for(int i = 0; i < NUM_ENERGYS; i++)
                    if(energy[i].live)
                        if(energy[i].x - energy[i].boundx < pos_x &&
                                energy[i].x + energy[i].boundx > pos_x &&
                                energy[i].y - energy[i].boundy < pos_y &&
                                energy[i].y + energy[i].boundy > pos_y)
                        {
                            energy[i].live = false;
                            gamer.energy += 25;
                        }


            }
            else if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
            {
                switch(ev.keyboard.keycode)
                {
                case ALLEGRO_KEY_ESCAPE:
                    done = true;
                    break;
                case ALLEGRO_KEY_1:
                    keys[KEY_1] = true;
                    break;
                case ALLEGRO_KEY_2:
                    keys[KEY_2] = true;
                    break;
                case ALLEGRO_KEY_3:
                    keys[KEY_3] = true;
                    break;
                case ALLEGRO_KEY_4:
                    keys[KEY_4] = true;
                    break;
                }
            }
            else if(ev.type == ALLEGRO_EVENT_KEY_UP)
            {
                switch(ev.keyboard.keycode)
                {
                case ALLEGRO_KEY_ESCAPE:
                    done = true;
                    break;
                case ALLEGRO_KEY_1:
                    keys[KEY_1] = false;
                    break;
                case ALLEGRO_KEY_2:
                    keys[KEY_2] = false;
                    break;
                case ALLEGRO_KEY_3:
                    keys[KEY_3] = false;
                    break;
                case ALLEGRO_KEY_4:
                    keys[KEY_4] = false;
                    break;
                }
            }
            else if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN)
            {
                if (ev.mouse.button & 2)
                    done = true;
            }
            else if(ev.type == ALLEGRO_EVENT_MOUSE_AXES)
            {
                pos_x = ev.mouse.x;
                pos_y = ev.mouse.y;
                CaptureBattery(battery, NUM_BATTERY, ev.mouse.x, ev.mouse.y, gamer);
            }

            timer_componente++;

            if(timer_componente >= 10)
            {
                if(keys[KEY_1])
                    draw[1] = 1;
                if(keys[KEY_2])
                    draw[2] = 2;
                if(keys[KEY_3])
                    draw[3] = 3;
                if(keys[KEY_4])
                    draw[4] = 4;
            }

            if(redraw && al_is_event_queue_empty(event_queue))
            {
                redraw = false;


                DrawZone(zone, LINHAS, COLUNAS, resistor, capacitor, indutor, diodo);
                DrawBullet(bullets, NUM_BULLETS+1, ataque_eletromagnetico);
                DrawEnergy(energy, NUM_ENERGYS+1, energia_capacitor);
                DrawZombie(zombie, NUM_ZOMBIES, zombie_bitmap);
                DrawBattery(battery, NUM_BATTERY, bateria);
                timer_tamenho_heat++;
                DrawHeat(heats, NUM_HEAT+1, timer_tamenho_heat, fogo);
                if(timer_tamenho_heat > 80)
                    for(int i=0; i<NUM_HEAT; i++)
                    {
                        heats[i].live = false;
                        timer_tamenho_heat = 0;
                    }


                al_draw_filled_rectangle(pos_x, pos_y, pos_x + 10, pos_y + 10, al_map_rgb(0, 0, 0));
                count++;
                al_draw_textf(font18, al_map_rgb(255, 0, 0), WIDTH*13/16, 85, 0, "Time: %i", count/60);
                al_draw_textf(font18, al_map_rgb(255, 0, 0), WIDTH*13/300, 85, 0, "Energy: %i", gamer.energy);
                al_draw_textf(font18, al_map_rgb(255, 0, 0), WIDTH*13/25, 85, 0, "Score: %i", gamer.score);
                al_flip_display();
                al_draw_bitmap(protoboard, 0, 0, 0);
            }

        }
    /*================================================================================================================================================*/
        if(state == GAMEOVER)
        {
            al_wait_for_event(event_queue, &ev);
            al_clear_to_color(al_map_rgb(0,0,0));
            al_draw_text(font18, al_map_rgb(255, 168, 255), WIDTH / 2, HEIGHT / 2, ALLEGRO_ALIGN_CENTRE, "Os Zombies roubaram seu diploma");
            al_draw_text(font18, al_map_rgb(255, 255, 255), WIDTH / 2, HEIGHT / 2 +40, ALLEGRO_ALIGN_CENTRE, "Pressione Space para sair");
            al_draw_textf(font_maior, al_map_rgb(255, 0, 0), WIDTH*13/28, 85, 0, "Score: %i", gamer.score);
            al_flip_display();

            if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
                done = true;

            if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
                if(ev.keyboard.keycode == ALLEGRO_KEY_SPACE)
            {
                al_destroy_event_queue(event_queue);
                al_destroy_timer(timer);
                al_destroy_font(font18);
                al_destroy_bitmap(resistor);
                al_destroy_bitmap(capacitor);
                al_destroy_bitmap(indutor);
                al_destroy_bitmap(diodo);
                al_destroy_bitmap(bateria);
                al_destroy_bitmap(protoboard);
                al_destroy_bitmap(zombie_bitmap);
                al_destroy_display(display);

            }




        }
    }


    return 0;
}
int main(int argc, const char **argv){


    // Variables
    ALLEGRO_DISPLAY *ventana = NULL;
    ALLEGRO_EVENT_QUEUE *mensajes = NULL;
    ALLEGRO_TIMER *alarma = NULL;
    bool dibujar = true;

    struct Nave nave[N];

    srand(time(NULL));
    srand48(time(NULL));
    al_init();

    // Crear:
    ventana = al_create_display(SW, SH);
    mensajes = al_create_event_queue();
    alarma = al_create_timer(1/60.);

    al_register_event_source(mensajes,
            al_get_display_event_source(ventana));
    al_register_event_source(mensajes,
            al_get_timer_event_source(alarma));


    iniciar(nave);
    al_set_target_bitmap(al_get_backbuffer(ventana));
    al_start_timer(alarma);

    while(1) {
        ALLEGRO_EVENT ev;
        al_wait_for_event(mensajes, &ev);

        if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
            break;

        if (ev.type == ALLEGRO_EVENT_TIMER)
            dibujar = true;

        if (dibujar && al_is_event_queue_empty(mensajes) ){
            dibujar = false;
            recalcular_posiciones(nave);
            al_clear_to_color(al_map_rgb(0,0,0));
            for (int i=0; i<N; i++)
                al_draw_bitmap(nave[i].img, nave[i].x, nave[i].y, 0);
            al_flip_display();

        }
        //   Miro los eventos
        //     Si cierran la ventan
        //        salgo del bucle
        //     Si se cumple el tiempo:
        //        repintar
        //   Si repintar
        //      No repintar
        //      Mover el cuadrado
        //      Pintar
    }

    al_destroy_timer(alarma);
    al_destroy_display(ventana);
    al_destroy_event_queue(mensajes);

    return EXIT_SUCCESS;
}
Example #24
0
//int main(int argc, char **argv)
int main(int, char **)
{
    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    ALLEGRO_TIMER *timer = NULL;

    Entity *player = new Entity();

    //bool key[4] = { false, false, false, false };
    int mvkeys[2] = { 0, 0 };

    bool redraw = true;
    bool doexit = false;

    if(!al_init())
    {
        fprintf(stderr, "failed to initialize allegro!\n");
        return -1;
    }

    if(!al_init_image_addon())
    {
        fprintf(stderr, "failed to initialize image addon!\n");
        return -1;
    }

    if(!al_install_keyboard())
    {
        fprintf(stderr, "failed to initialize the keyboard!\n");
        return -1;
    }

    //--Calculate how long each frame should last in milliseconds, then create
    //  a timer which ticks at that interval
    timer = al_create_timer(1.0 / FPS);
    if(!timer)
    {
        fprintf(stderr, "failed to create timer!\n");
        return -1;
    }

    display = al_create_display(SCREEN_W, SCREEN_H);
    if(!display)
    {
        fprintf(stderr, "failed to create display!\n");
        al_destroy_timer(timer);
        return -1;
    }

    //--Create a camera object for everything to use
    fprintf(stderr, "Creating camera\n");
    Camera* camera = new Camera();
    //--Initialize player entity
    player->init(display,camera);
    //player.init(display,sprite_x,sprite_y);
    //if (player->generate_bitmap() == -1) return -1;
    player->set_pos(SCREEN_W/2.0-SPRITE_W/2.0,SCREEN_H/2.0-SPRITE_H/2.0);

    MapManager* mapmanager = new MapManager(camera, player);
    mapmanager->add_map("data/levels/testmap.tmx");
    mapmanager->set_active_map("data/levels/testmap.tmx");
    //mapmanager->reset_camera(0,64);
    player->set_mapmanager(mapmanager);
    //fprintf(stderr, "Tileset for ID %i is %s\n",52,mapmanager->get_active_map()->get_tileset_for_id(19)->name);
    //TileMap *testmap = new TileMap("data/levels/outside.tmx");

    event_queue = al_create_event_queue();
    if(!event_queue)
    {
        fprintf(stderr, "failed to create event_queue!\n");
        delete player;
        delete mapmanager;
        al_destroy_display(display);
        al_destroy_timer(timer);
        return -1;
    }

    al_register_event_source(event_queue, al_get_display_event_source(display));
    al_register_event_source(event_queue, al_get_timer_event_source(timer));
    al_register_event_source(event_queue, al_get_keyboard_event_source());

    al_clear_to_color(al_map_rgb(0,0,0));

    al_flip_display();

    al_start_timer(timer);

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

        //--Game Logic--//
        if(ev.type == ALLEGRO_EVENT_TIMER)
        {
            mapmanager->update();
            player->update(mvkeys);
            //player->updatealt(mvkeys, key);

            redraw = true;
          }
        else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
        {
            break;
        }
        //--Store keypress info
        else if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
        {
            //printf("\n\nKEYCODE: %i\n\n", ev.keyboard.keycode);
            switch(ev.keyboard.keycode)
            {
                case ALLEGRO_KEY_UP:
                    //key[KEY_UP] = true;
                    mvkeys[3] = 1;
                    break;

                case ALLEGRO_KEY_DOWN:
                    //key[KEY_DOWN] = true;
                    mvkeys[4] = 1;
                    break;

                case ALLEGRO_KEY_LEFT:
                    //key[KEY_LEFT] = true;
                    if (!mvkeys[0])
                    {
                        mvkeys[0] = ALLEGRO_KEY_LEFT;
                    }
                    else
                    {
                        //mvkeys[1] = ALLEGRO_KEY_LEFT;
                        mvkeys[1] = mvkeys[0];
                        mvkeys[0] = ALLEGRO_KEY_LEFT;
                    }
                    break;

                case ALLEGRO_KEY_RIGHT:
                    //key[KEY_RIGHT] = true;
                    if (!mvkeys[0])
                    {
                        mvkeys[0] = ALLEGRO_KEY_RIGHT;
                    }
                    else
                    {
                        //mvkeys[1] = ALLEGRO_KEY_RIGHT;
                        mvkeys[1] = mvkeys[0];
                        mvkeys[0] = ALLEGRO_KEY_RIGHT;
                    }
                    break;
            }
        }
        else if(ev.type == ALLEGRO_EVENT_KEY_UP)
        {
            switch(ev.keyboard.keycode)
            {
                case ALLEGRO_KEY_UP:
                    //key[KEY_UP] = false;
                    mvkeys[3] = 0;
                    break;

                case ALLEGRO_KEY_DOWN:
                    //key[KEY_DOWN] = false;
                    mvkeys[4] = 0;
                    break;

                case ALLEGRO_KEY_LEFT:
                    //key[KEY_LEFT] = false;
                    if (mvkeys[0] == ALLEGRO_KEY_LEFT)
                    {
                        mvkeys[0] = mvkeys[1];
                        mvkeys[1] = 0;
                    }
                    else if (mvkeys[1] == ALLEGRO_KEY_LEFT)
                    {
                        mvkeys[1] = 0;
                    }
                    break;

                case ALLEGRO_KEY_RIGHT:
                    //key[KEY_RIGHT] = false;
                    if (mvkeys[0] == ALLEGRO_KEY_RIGHT)
                    {
                        mvkeys[0] = mvkeys[1];
                        mvkeys[1] = 0;

                    }
                    else if (mvkeys[1] == ALLEGRO_KEY_RIGHT)
                    {
                        mvkeys[1] = 0;
                    }
                    break;

                case ALLEGRO_KEY_ESCAPE:
                    doexit = true;
                    break;
            }
        }

        //printf("\n[%i, %i]\n\n", mvkeys[0], mvkeys[1]);

        //--The screen has updated and needs to be redrawn
        //--Draw Logic--//
        if(redraw && al_is_event_queue_empty(event_queue))
        {
            redraw = false;

            al_clear_to_color(al_map_rgb(50,50,50));

            mapmanager->drawbg();
            player->draw();
            mapmanager->drawmg();
            mapmanager->drawfg();

            al_flip_display();
        }
    }

    //--You could let Allegro do this automatically, but it's allegedly faster
    //  if you do it manually
    delete player;
    //delete testmap;
    delete mapmanager;
    al_destroy_timer(timer);
    al_destroy_display(display);
    al_destroy_event_queue(event_queue);

    return 0;
}
Example #25
0
int main () {
    ALLEGRO_DISPLAY *display;
    ALLEGRO_EVENT_QUEUE *eventQueue;
    ALLEGRO_TIMER *timer;

    bool done = false;

    al_init();
    display = al_create_display(1280, 720);
    al_set_window_title(display, "IsoWorld");
    eventQueue = al_create_event_queue();
    timer = al_create_timer(1.0/constFps);

    al_init_primitives_addon();
    al_install_keyboard();
    al_init_image_addon();

    al_register_event_source(eventQueue, al_get_display_event_source(display));
    al_register_event_source(eventQueue, al_get_timer_event_source(timer));
    al_register_event_source(eventQueue, al_get_keyboard_event_source());

    bool redraw = false;
    enum Keys { key_up, key_down, key_left, key_right };

    Map map("Examples/ex1.map");

    al_clear_to_color(al_map_rgb(0, 0, 0));
    al_start_timer(timer);
    while (!done) {
        ALLEGRO_EVENT ev;
        al_wait_for_event(eventQueue, &ev);

        if (ev.type == ALLEGRO_EVENT_TIMER) {
            redraw = true;
        } else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
            done = true;
        } else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
            switch (ev.keyboard.keycode) {
            case ALLEGRO_KEY_Q:
            case ALLEGRO_KEY_ESCAPE:
                done = true;
                break;
            default:
                break;
            }
        } else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
        }

        if (redraw && al_is_event_queue_empty(eventQueue)) {
            redraw = false;
            al_clear_to_color(al_map_rgb_f(0.0, 0.0, 0.0));

            map.Draw();
            al_draw_line(0, 720/2, 1280, 720/2, al_map_rgb(255,0,0),1);
            al_draw_line(1280/2, 0, 1280/2, 720, al_map_rgb(255,0,0),1);

            al_flip_display();
        }
    }

    al_destroy_timer(timer);
    al_destroy_event_queue(eventQueue);
    al_destroy_display(display);
}
Example #26
0
int main(int argc, char **argv)
{

//--------------------------------------------------------------------------------------------------------------------------------
#pragma region "Variable Initialization"
	
	const float FPS = 60;
	int screenw = 900;
	int screenh = 650;
	float bounce = 32;
	float bouncer_x = screenw / 2.0 - bounce / 2.0;
	float bouncer_y = screenh / 2.0 - bounce / 2.0;
	float wall1_x = 30.0;
	float wall1_y = 40.0;
	float wall1_w = 30.0;
	float wall1_h = 30.0;
	bool key[4] = { false, false, false, false };
	bool redraw = true;
	bool exiting = false;
	bool menu = false;
	enum MYKEYS 
	{
		KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT
	};
	pac game;

	game.setpacmanx(bouncer_x);
	game.setpacmany(bouncer_y);


	ALLEGRO_DISPLAY *display = NULL;			
	ALLEGRO_EVENT_QUEUE *event_queue = NULL;
	ALLEGRO_TIMER *timer = NULL;
	ALLEGRO_BITMAP *bouncer = NULL;
	ALLEGRO_BITMAP *wall1 = NULL;

#pragma endregion

//--------------------------------------------------------------------------------------------------------------------------------
#pragma region "System Protection" 
	
	// Begining Initialization
	// Checks if Allegro is initialized
	if (!al_init()) {
		fprintf(stderr, "failed to initialize allegro!\n");
		return -1;
	}

	//Checks if keyboard is initialized
	if (!al_install_keyboard()) {
		fprintf(stderr, "failed to initialize the keyboard!\n");
		return -1;
	}

	//Checks if mouse is initialized
	if (!al_install_mouse()) {
		fprintf(stderr, "failed to initialize the mouse!\n");
		return -1;
	}

	//Intializes timer to fps and then checks if there is a timer
	timer = al_create_timer(1.0 / FPS);
	if (!timer) {
		fprintf(stderr, "failed to create timer!\n");
		return -1;
	}

	//checks if there is a display
	display = al_create_display(screenw , screenh);
	if (!display) {
		fprintf(stderr, "failed to create display!\n");
		return -1;
	}

	al_init_font_addon();
	al_init_ttf_addon();

	ALLEGRO_FONT *font = al_load_ttf_font("DroidSans.ttf", 36, 0);
	ALLEGRO_FONT *font2 = al_load_ttf_font("DroidSans.ttf", 12, 0);

	if (!font){
		fprintf(stderr, "Could not load 'pirulen.ttf'.\n");
		return -1;
	}

	bouncer = al_create_bitmap(bounce, bounce);
	if (!bouncer) {
		fprintf(stderr, "failed to create bouncer bitmap!\n");
		al_destroy_display(display);
		al_destroy_timer(timer);
		return -1;
	}

	wall1 = al_create_bitmap(wall1_w, wall1_h);
	if (!bouncer) {
		fprintf(stderr, "failed to create bouncer bitmap!\n");
		al_destroy_display(display);
		al_destroy_timer(timer);
		return -1;
	}

	al_init_image_addon();


	ALLEGRO_DISPLAY_MODE   disp_data;
	al_get_display_mode(al_get_num_display_modes() - 1, &disp_data);
	

	al_set_target_bitmap(bouncer);

	al_clear_to_color(al_map_rgb(255, 0, 0));

	al_set_target_bitmap(al_get_backbuffer(display));

	al_set_target_bitmap(wall1);

	al_clear_to_color(al_map_rgb(0, 0, 255));

	al_set_target_bitmap(al_get_backbuffer(display));

	event_queue = al_create_event_queue();
	if (!event_queue) {
		fprintf(stderr, "failed to create event_queue!\n");
		al_destroy_bitmap(bouncer);
		al_destroy_display(display);
		al_destroy_timer(timer);
		return -1;
	}

#pragma endregion

//--------------------------------------------------------------------------------------------------------------------------------
#pragma region "Event Initialization"
	al_register_event_source(event_queue, al_get_display_event_source(display));  //display event handler
	al_register_event_source(event_queue, al_get_timer_event_source(timer));   //time envent handler
	al_register_event_source(event_queue, al_get_keyboard_event_source());   //keyboard event handler
	al_register_event_source(event_queue, al_get_mouse_event_source());  //mouse event handler
	al_clear_to_color(al_map_rgb(0, 0, 0));
	al_flip_display();
	al_start_timer(timer);
#pragma endregion

//--------------------------------------------------------------------------------------------------------------------------------
#pragma region "Simple Menu"
	while (!menu)
	{
		ALLEGRO_EVENT ev;
		al_wait_for_event(event_queue, &ev);

		if (ev.type == ALLEGRO_EVENT_KEY_UP) {
			if (ev.type == ALLEGRO_EVENT_KEY_UP) {
				switch (ev.keyboard.keycode) {
				case ALLEGRO_KEY_ENTER:
					menu = true;
					break;
				}
			}
		}
		else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
				break;
			}

		if (redraw && al_is_event_queue_empty(event_queue)) {
			redraw = false;

			al_clear_to_color(al_map_rgb(255, 255, 255));


			al_draw_text(font, al_map_rgb(0, 0, 0), screenw / 2, (screenh / 2), ALLEGRO_ALIGN_CENTRE, "Press Enter to Start");

			al_flip_display();
		}

	}
#pragma endregion

//--------------------------------------------------------------------------------------------------------------------------------
#pragma region "Driver Program"

	while (!exiting)
	{

#pragma region "Timer Events"

		ALLEGRO_EVENT ev;
		al_wait_for_event(event_queue, &ev);
		if (ev.type == ALLEGRO_EVENT_TIMER) {

			if(key[KEY_UP] && game.getpacmany() >= 4.0) {
				game.uppacman();
			}

			if (key[KEY_DOWN] && game.getpacmany() <= screenh - bounce - 4.0) {
				game.downpacman();
			}

			if (key[KEY_LEFT] && game.getpacmanx() >= 4.0) {
				game.leftpacman();
			}

			if (key[KEY_RIGHT] && game.getpacmany() <= screenw - bounce - 4.0) {
				game.rightpacman();
			}

			redraw = true;
		}

// "Closes the Window When Pressing X button"
		else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
			break;
		}
#pragma endregion

#pragma region "Checks for when key was pressed down"
		else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
			switch (ev.keyboard.keycode) {
			case ALLEGRO_KEY_UP:
				key[KEY_UP] = true;
				break;

			case ALLEGRO_KEY_DOWN:
				key[KEY_DOWN] = true;
				break;

			case ALLEGRO_KEY_LEFT:
				key[KEY_LEFT] = true;
				break;

			case ALLEGRO_KEY_RIGHT:
				key[KEY_RIGHT] = true;
				break;
			}
		}
#pragma endregion 

#pragma region "Checks for when key was released"
		else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
			switch (ev.keyboard.keycode) {
			case ALLEGRO_KEY_UP:
				key[KEY_UP] = false;
				break;

			case ALLEGRO_KEY_DOWN:
				key[KEY_DOWN] = false;
				break;

			case ALLEGRO_KEY_LEFT:
				key[KEY_LEFT] = false;
				break;

			case ALLEGRO_KEY_RIGHT:
				key[KEY_RIGHT] = false;
				break;

			case ALLEGRO_KEY_ESCAPE:
				exiting = true;
				break;

			case ALLEGRO_KEY_Q:
				exiting = true;
				break;

			//Full screen when f is pressed
			case ALLEGRO_KEY_F:
				if (screenw != disp_data.width)
				{
					al_set_new_display_flags(ALLEGRO_FULLSCREEN);
					display = al_create_display(disp_data.width, disp_data.height);
					screenw = disp_data.width;
					screenh = disp_data.height;
					wall1_x = 2 * (screenw / 10);
					wall1_y = (screenh / screenh) + 50 * (screenh / screenh);
				}
				
				break;

			//Normal screen when n is pressed
			case ALLEGRO_KEY_N:
				if (screenw != 640)
				{
					al_set_new_display_flags(ALLEGRO_FULLSCREEN_WINDOW);
					display = al_create_display(640, 480);
					screenw = 640;
					screenh = 480;
				}
				break;

			}
		}

#pragma endregion

#pragma region "Redraw Objects"
		if (redraw && al_is_event_queue_empty(event_queue)) {
			redraw = false;

			al_clear_to_color(al_map_rgb(0, 0, 0));

			al_draw_bitmap(wall1, wall1_x, wall1_y, 0);

			al_draw_bitmap(bouncer, game.getpacmanx(), game.getpacmany(), 0);

			al_draw_text(font2, al_map_rgb(255, 0, 0), screenw / 2, (screenh / screenh), ALLEGRO_ALIGN_CENTRE, "Moving a Square");

			al_flip_display();
		}
#pragma endregion

	}

#pragma endregion

//--------------------------------------------------------------------------------------------------------------------------------
#pragma region "Destroyers"

	al_destroy_bitmap(bouncer);
	al_destroy_timer(timer);
	al_destroy_display(display);
	al_destroy_event_queue(event_queue);
#pragma endregion

	return 0;
}
static void mainloop(void)
{
   ALLEGRO_EVENT_QUEUE *queue;
   ALLEGRO_TIMER *timer;
   float *buf;
   double pitch = 440;
   int i, si;
   int n = 0;
   bool redraw = false;
   
   for (i = 0; i < N; i++) {
      frequency[i] = 22050 * pow(2, i / (double)N);
      stream[i] = al_create_audio_stream(4, SAMPLES_PER_BUFFER, frequency[i],
         ALLEGRO_AUDIO_DEPTH_FLOAT32, ALLEGRO_CHANNEL_CONF_1);
      if (!stream[i]) {
         abort_example("Could not create stream.\n");
         return;
      }

      if (!al_attach_audio_stream_to_mixer(stream[i], al_get_default_mixer())) {
         abort_example("Could not attach stream to mixer.\n");
         return;
      }
   }

   queue = al_create_event_queue();
   al_register_event_source(queue, al_get_keyboard_event_source());
   for (i = 0; i < N; i++) {
      al_register_event_source(queue,
         al_get_audio_stream_event_source(stream[i]));
   }
#ifdef ALLEGRO_POPUP_EXAMPLES
   if (textlog) {
      al_register_event_source(queue, al_get_native_text_log_event_source(textlog));
   }
#endif

   log_printf("Generating %d sine waves of different sampling quality\n", N);
   log_printf("If Allegro's resampling is correct there should be little variation\n", N);

   timer = al_create_timer(1.0 / 60);
   al_register_event_source(queue, al_get_timer_event_source(timer));
   
   al_register_event_source(queue, al_get_display_event_source(display));

   al_start_timer(timer);
   while (n < 60 * frequency[0] / SAMPLES_PER_BUFFER * N) {
      ALLEGRO_EVENT event;

      al_wait_for_event(queue, &event);

      if (event.type == ALLEGRO_EVENT_AUDIO_STREAM_FRAGMENT) {
         for (si = 0; si < N; si++) {
            buf = al_get_audio_stream_fragment(stream[si]);
            if (!buf) {
               continue;
            }

            for (i = 0; i < SAMPLES_PER_BUFFER; i++) {
               double t = samplepos[si]++ / (double)frequency[si];
               buf[i] = sin(t * pitch * ALLEGRO_PI * 2) / N;
            }

            if (!al_set_audio_stream_fragment(stream[si], buf)) {
               log_printf("Error setting stream fragment.\n");
            }

            n++;
            log_printf("%d", si);
            if ((n % 60) == 0)
               log_printf("\n");
         }
      }
      
      if (event.type == ALLEGRO_EVENT_TIMER) {
         redraw = true;
      }

      if (event.type == ALLEGRO_EVENT_KEY_DOWN &&
            event.keyboard.keycode == ALLEGRO_KEY_ESCAPE) {
         break;
      }

      if (event.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
         break;
      }

#ifdef ALLEGRO_POPUP_EXAMPLES
      if (event.type == ALLEGRO_EVENT_NATIVE_DIALOG_CLOSE) {
         break;
      }
#endif

      if (redraw &&al_is_event_queue_empty(queue)) {
         ALLEGRO_COLOR c = al_map_rgb(0, 0, 0);
         int i;
         al_clear_to_color(al_map_rgb_f(1, 1, 1));
        
         for (i = 0; i < 640; i++) {
            al_draw_pixel(i, 50 + waveform[i] * 50, c);
         }

         al_flip_display();
         redraw = false;
      }
   }

   for (si = 0; si < N; si++) {
      al_drain_audio_stream(stream[si]);
   }

   log_printf("\n");

   al_destroy_event_queue(queue);
}
Example #28
0
static int do_gui(const std::vector<Widget *>& widgets, unsigned int selected)
{
   ResourceManager& rm = ResourceManager::getInstance();
   ALLEGRO_BITMAP *bg = (ALLEGRO_BITMAP *)rm.getData(RES_BACKGROUND);
   Input *input = (Input *)rm.getData(RES_INPUT);
   ALLEGRO_BITMAP *logo = (ALLEGRO_BITMAP *)rm.getData(RES_LOGO);
   int lw = al_get_bitmap_width(logo);
   int lh = al_get_bitmap_height(logo);
#ifndef ALLEGRO_IPHONE
   ALLEGRO_FONT *myfont = (ALLEGRO_FONT *)rm.getData(RES_SMALLFONT);
#endif

   bool redraw = true;

   for (;;) {
      /* Catch close button presses */
      ALLEGRO_EVENT_QUEUE *events = ((DisplayResource *)rm.getResource(RES_DISPLAY))->getEventQueue();
      while (!al_is_event_queue_empty(events)) {
         ALLEGRO_EVENT event;
         al_get_next_event(events, &event);
#ifdef ALLEGRO_IPHONE
         if (event.type == ALLEGRO_EVENT_DISPLAY_HALT_DRAWING || event.type == ALLEGRO_EVENT_DISPLAY_SWITCH_OUT) {
            switch_game_out(event.type == ALLEGRO_EVENT_DISPLAY_HALT_DRAWING);
         }
         else if (event.type == ALLEGRO_EVENT_DISPLAY_RESUME_DRAWING || event.type == ALLEGRO_EVENT_DISPLAY_SWITCH_IN) {
            switch_game_in();
         }
#else
         if (event.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
            exit(0);
#endif
      }

      input->poll();
#if defined ALLEGRO_IPHONE
      float ud;
      if (is_joypad_connected()) {
         ud = input->ud();
      }
      else {
         ud = input->lr();
      }
#else
      float ud = input->ud();
#endif
      if (ud < 0 && selected) {
         selected--;
         my_play_sample(RES_FIRELARGE);
         al_rest(0.200);
      }
      else if (ud > 0 && selected < (widgets.size()-1)) {
         selected++;
         my_play_sample(RES_FIRELARGE);
         al_rest(0.200);
      }
      if (input->b1()) {
         if (!widgets[selected]->activate())
            return selected;
      }
#ifndef ALLEGRO_IPHONE
      if (input->esc())
         return -1;
#endif

      redraw = true;

#ifdef ALLEGRO_IPHONE
      if (switched_out) {
         redraw = false;
      }
#endif

      al_rest(0.010);

      if (!redraw) {
         continue;
      }
      
      al_clear_to_color(al_map_rgb_f(0, 0, 0));

      /* draw */
      float h = al_get_bitmap_height(bg);
      float w = al_get_bitmap_width(bg);
      al_draw_bitmap(bg, (BB_W-w)/2, (BB_H-h)/2, 0);

      al_draw_bitmap(logo, (BB_W-lw)/2, (BB_H-lh)/4, 0);
      
      al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA);
#ifndef ALLEGRO_IPHONE
      al_draw_textf(myfont, al_map_rgb(255, 255, 0), BB_W/2, BB_H/2, ALLEGRO_ALIGN_CENTRE, "z/y to start");
#endif
      al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA);

      for (unsigned int i = 0; i < widgets.size(); i++) {
         widgets[i]->render(i == selected);
      }

#ifdef ALLEGRO_IPHONE
	input->draw();
#endif
      
      al_flip_display();
   }
}
Example #29
0
int main(int argc, const char *argv[])
{
   GLuint pid;
   ALLEGRO_DISPLAY *d;
   ALLEGRO_EVENT_QUEUE *queue;
   ALLEGRO_EVENT event;
   ALLEGRO_TIMER *timer;
   int frames = 0;
   double start;
   bool limited = true;

   if (argc > 1 && 0 == strcmp(argv[1], "-nolimit")) {
      limited = false;
   }

   if (!al_init()) {
      abort_example("Could not init Allegro.\n");
   }

   open_log();

   al_set_new_display_flags(ALLEGRO_OPENGL);
   al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 1, ALLEGRO_SUGGEST);
   al_set_new_display_option(ALLEGRO_SAMPLES, 4, ALLEGRO_SUGGEST);
   d = al_create_display(WINDOW_W, WINDOW_H);
   if (!d) {
      abort_example("Unable to open a OpenGL display.\n");
   }

   if (al_get_display_option(d, ALLEGRO_SAMPLE_BUFFERS)) {
      log_printf("With multisampling, level %i\n", al_get_display_option(d, ALLEGRO_SAMPLES));
   }
   else {
      log_printf("Without multisampling.\n");
   }

   al_install_keyboard();

   queue = al_create_event_queue();
   al_register_event_source(queue, al_get_keyboard_event_source());
   al_register_event_source(queue, al_get_display_event_source(d));

   if (limited) {
      timer = al_create_timer(1/60.0);
      al_register_event_source(queue, al_get_timer_event_source(timer));
      al_start_timer(timer);
   }
   else {
      timer = NULL;
   }

   if (al_get_opengl_extension_list()->ALLEGRO_GL_ARB_multisample) {
      glEnable(GL_MULTISAMPLE_ARB);
   }

   if (!al_get_opengl_extension_list()->ALLEGRO_GL_ARB_vertex_program) {
      abort_example("This example requires a video card that supports "
                     " the ARB_vertex_program extension.\n");
   }

   glEnable(GL_DEPTH_TEST);
   glShadeModel(GL_SMOOTH);
   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
   glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
   glDisable(GL_CULL_FACE);

   /* Setup projection and modelview matrices */
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(45.0, WINDOW_W/(float)WINDOW_H, 0.1, 100.0);

   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();

   /* Position the camera to look at our mesh from a distance */
   gluLookAt(0.0f, 20.0f, -45.0f, 0.0f, 0.0f, 0.0f, 0, 1, 0);

   create_mesh();

   /* Define the vertex program */
   glEnable(GL_VERTEX_PROGRAM_ARB);
   glGenProgramsARB(1, &pid);
   glBindProgramARB(GL_VERTEX_PROGRAM_ARB, pid);
   glGetError();

   if (al_get_opengl_extension_list()->ALLEGRO_GL_NV_vertex_program2_option) {
      glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
                        strlen(program_nv), program_nv);
   }
   else {
      glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
                        strlen(program), program);
   }

   /* Check for errors */
   if (glGetError()) {
      const char *pgm = al_get_opengl_extension_list()->ALLEGRO_GL_NV_vertex_program2_option
                        ? program_nv : program;
      GLint error_pos;
      const GLubyte *error_str = glGetString(GL_PROGRAM_ERROR_STRING_ARB);
      glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos);

      abort_example("Error compiling the vertex program:\n%s\n\nat "
            "character: %i\n%s\n", error_str, (int)error_pos,
            pgm + error_pos);
   }


   start = al_get_time();
   while (1) {
      if (limited) {
         al_wait_for_event(queue, NULL);
      }

      if (!al_is_event_queue_empty(queue)) {
         while (al_get_next_event(queue, &event)) {
            switch (event.type) {
               case ALLEGRO_EVENT_DISPLAY_CLOSE:
                  goto done;

               case ALLEGRO_EVENT_KEY_DOWN:
                  if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE)
                     goto done;
                  break;
            }
         }
      }

      draw_mesh();
      al_flip_display();
      frames++;
   }

done:
   log_printf("%.1f FPS\n", frames / (al_get_time() - start));
   glDeleteProgramsARB(1, &pid);
   al_destroy_event_queue(queue);
   al_destroy_display(d);
   close_log(true);

   return 0;
}
Example #30
0
int main(int argc, char **argv){

    /*declaramos nave como una estructura tipo móvil, q está definida
     * en el archivo "physics.h"*/
    struct Movil nave;


    /*creamos las variables de allegro, que son punteros
     * apuntando a NULL, de momento*/
    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_BITMAP *sprites = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    ALLEGRO_TIMER *timer = NULL;

    bool key[4] = {false, false, false,false};//Array para las teclas, todos a false 
    bool redraw = true;
    bool do_exit = false;

    /* Inicializamos allegro */
    if(!al_init()) {
        al_show_native_message_box (
                display,
                "Error",
                "Error",
                "Failed to initialize allegro!",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        return 0;
    }

    /* Inicializamos añadido de imágenes */
    if(!al_init_image_addon()) {
        al_show_native_message_box (
                display,
                "Error",
                "Error",
                "Failed to initialize al_init_image_addon!",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        return 0;
    }

ni    /* Inicializamos el teclado */
    if(!al_install_keyboard()) {
        al_show_native_message_box (
                display,
                "Error",
                "Error",
                "Failed to initialize al_init_image_addon!",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        return 0;
    };

    /* Alegro artifact creation
     * del display, timer, cola eventos y sprites*/

    display = al_create_display(SCREEN_W, SCREEN_H);
    if(!display) {
        al_show_native_message_box(
                display,
                "Error",
                "Error",
                "Failed to initialize display!",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        return 0;
    }


    timer = al_create_timer(1.0 / FPS);
    if(!timer) {
        al_show_native_message_box(
                display,
                "Error",
                "Error",
                "failed to create timer!\n",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);

        return 0;
    }


    event_queue = al_create_event_queue();
    if(!event_queue) {
        al_show_native_message_box(
                display,
                "Error",
                "Error",
                "failed to create event_queue!\n",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);
        al_destroy_timer(timer);

        return 0;
    }


    sprites = al_load_bitmap("images/xenon2_sprites.png");
    al_convert_mask_to_alpha(sprites, al_map_rgb(255,0,255));

    if(!sprites) {
        al_show_native_message_box(
                display,
                "Error",
                "Error",
                "Failed to load sprites!",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);
        al_destroy_timer(timer);
        al_destroy_event_queue(event_queue);

        return 0;
    }

    /* registramos todos los eventos provenientes de la pantalla
     * el keyboard y el temporizador*/
    al_register_event_source(event_queue, al_get_display_event_source(display));
    al_register_event_source(event_queue, al_get_keyboard_event_source());
    al_register_event_source(event_queue, al_get_timer_event_source(timer));


    /* Init es una funcion definida como extern el "physics.h" , que le meto
     * los sprites, que es el bitmap de la nave, y &nave, que es una dirección
     * de memoria donde hemos declarado nave como estructura*/
    init(sprites, &nave);

    al_start_timer(timer);

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

        if(ev.type == ALLEGRO_EVENT_TIMER)
            redraw = true;
        else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
            break;
        /* éste bloque funciona con el evento KEY_DOWN, y cuando apretamos
         * cualquier tecla, se registra el avento KEY_DOWN q corresponda */
        else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_UP:
                    key[KEY_THROTTLE] = true;
                    break;

                case ALLEGRO_KEY_DOWN:
                    key[KEY_BRAKE] = true;
                    break;

                case ALLEGRO_KEY_LEFT:
                    key[KEY_ROTATE_LEFT] = true;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    key[KEY_ROTATE_RIGHT] = true;
                    break;
            }
            /* Éste bloque funciona con el evento KEY_UP, cuando soltamos
             *  la tecla se registra el evento KEY_DOWN correspondiente.*/
        } else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_UP:
                    key[KEY_THROTTLE] = false;
                    break;

                case ALLEGRO_KEY_DOWN:
                    key[KEY_BRAKE] = false;
                    break;

                case ALLEGRO_KEY_LEFT:
                    key[KEY_ROTATE_LEFT] = false;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    key[KEY_ROTATE_RIGHT] = false;
                    break;

                case ALLEGRO_KEY_ESCAPE:
                    doexit = true;
                    break;
            }
        }

        if(redraw && al_is_event_queue_empty(event_queue)) {
            redraw = false;
            update_physics(key, &nave);
            al_clear_to_color(al_map_rgb(0,0,0));

 //         al_draw_bitmap(sprites,200,200,0);
            al_draw_bitmap(nave.img[2 + (int) (nave.v.x / ROLL) ],
                    SCREEN_W / 2 + nave.r.x,
                    SCREEN_H - 50 - nave.r.y,
                    0);
            al_flip_display();
        }
    }

        /* DEstrucción de los artefactos */
    al_destroy_display(display);
    al_destroy_timer(timer);
    al_destroy_event_queue(event_queue);
    al_destroy_bitmap(sprites);


    return 0;
}