Esempio n. 1
0
int main()
{
 allegro_init();
 install_timer();
 install_keyboard();
 set_color_depth(32);
 set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
 set_window_title("MACAUBAU");

 /// Funcoes
 LOCK_VARIABLE(saida_programa);
 LOCK_FUNCTION(fechar_X);
 set_close_button_callback(fechar_X);


 tempMsec=0;
 LOCK_FUNCTION(tempo_Turtle);
 LOCK_VARIABLE(tempMsec);
 install_int_ex(tempo_Msec, MSEC_TO_TIMER(1));

 int exit_program = FALSE;

 /// BITMAPS
 BITMAP* buffer=create_bitmap(SCREEN_W, SCREEN_H);
 BITMAP* personagem=load_bitmap("imagens/m1d.bmp", NULL);
 BITMAP* fundo=load_bitmap("imagens/fundo.bmp",NULL);
 BITMAP* turtle=load_bitmap("imagens/t1.bmp", NULL);
 BITMAP* gameover=load_bitmap("imagens/gameover.bmp",NULL);
 BITMAP* fail=load_bitmap("imagens/fail.bmp",NULL);

 BITMAP* per[4];
 per[0]=load_bitmap("imagens/m1d.bmp",NULL);
 per[1]=load_bitmap("imagens/m2d.bmp",NULL);
 per[2]=load_bitmap("imagens/m1e.bmp",NULL);
 per[3]=load_bitmap("imagens/m2e.bmp",NULL);

 /// Fonts
 FONT * fontscore = load_font("fontscore.pcx",NULL,NULL);

 /// Variaveis
 int score = 0,printnv=1;
 float nivel=1;
 int iPersonagem=0, seed, xPersonagem=0, colisao=0;
 int tempo_mov=tempMsec, tempo_animacao=tempMsec;
 int finalScore=0;

 struct turtle vetTurtle[4]={0,0,0,0};

 vetTurtle[0].tempo=tempMsec;
 vetTurtle[1].tempo=tempMsec;
 vetTurtle[2].tempo=tempMsec;

 while(!saida_programa)
 {
   /// ENTRADA
   if (key[KEY_ESC]) saida_programa=TRUE;

   /// ATUALIZACAO DE DADOS
   if(tempMsec-vetTurtle[0].tempo>=20)
   {
    vetTurtle[0].yTurtle+=10*nivel;
    vetTurtle[0].angulo+=7;
    vetTurtle[0].tempo=tempMsec;
   }

   if(vetTurtle[0].yTurtle>560 && colisao!=1)
   {
    seed=time(0);
    srand(seed);
    vetTurtle[0].xTurtle=(rand()%13)*70;

    score+=1;
    vetTurtle[0].yTurtle=0;
   }


   if(tempMsec-vetTurtle[1].tempo>=20)
   {
    vetTurtle[1].yTurtle+=9*nivel;
    vetTurtle[1].angulo+=7;
    vetTurtle[1].tempo=tempMsec;
   }

   if(vetTurtle[1].yTurtle>560 && colisao!=1)
   {
    seed=time(0);
    srand(seed);
    vetTurtle[1].xTurtle=(rand()%7+rand()%7)*70;

    score+=1;
    vetTurtle[1].yTurtle=0;
   }

   if(tempMsec-vetTurtle[2].tempo>=20)
   {
       vetTurtle[2].yTurtle+=9.5*nivel;
       vetTurtle[2].angulo+=7;
       vetTurtle[2].tempo=tempMsec;
   }
   if(vetTurtle[2].yTurtle>560 && colisao!=1)
   {
       seed=time(0);
       srand(seed);
       vetTurtle[2].xTurtle=(rand()%5+rand()%8+rand()%2)*70;


       score+=1;
       vetTurtle[2].yTurtle=0;
   }

   /// * ======== MOVIMENTO PERSONAGEM ======== * ///

    ///*xPersonagem -- *iPersonagem -- *colisao -- *tempMsec -- *tempo_mov -- *tempo_animacao
    mov_Personagem(&xPersonagem, &iPersonagem, &colisao, &tempMsec, &tempo_mov, &tempo_animacao);

   /// * ======== COLISOES ========== * ///

   func_Colisao(xPersonagem,vetTurtle[0].xTurtle,vetTurtle[0].yTurtle,&colisao);
   func_Colisao(xPersonagem,vetTurtle[1].xTurtle,vetTurtle[1].yTurtle,&colisao);
   func_Colisao(xPersonagem,vetTurtle[2].xTurtle,vetTurtle[2].yTurtle,&colisao);

   /// * ========== NIVEIS - DIFICULDADES =========== * ///
   func_Nivel(score,&nivel,&printnv);

   if(vetTurtle[0].angulo>255) vetTurtle[0].angulo=0;
   if(vetTurtle[1].angulo>255) vetTurtle[1].angulo=0;
   if(vetTurtle[2].angulo>255) vetTurtle[2].angulo=0;


   /// * ======== DESENHOS ========= * ///

   clear(buffer);
   draw_sprite(buffer,fundo,0,0);

    if(colisao==0)
   draw_sprite_ex(buffer,per[iPersonagem],xPersonagem,500,0,0);

   else
   {
     if(score!=0)finalScore=score;
     draw_sprite(buffer,gameover,0,0);
     textprintf_ex(buffer,fontscore,300,320,makecol(181,230,29), -1, "FINAL SCORE: %d", finalScore);
     nivel=1;
     score=0;
     printnv=1;
   }

   /// ========== Desenho das Turtles ======== ///
   rotate_sprite(buffer,turtle,vetTurtle[0].xTurtle,vetTurtle[0].yTurtle,ftofix(vetTurtle[0].angulo));
   rotate_sprite(buffer,turtle,vetTurtle[1].xTurtle,vetTurtle[1].yTurtle,ftofix(vetTurtle[1].angulo));
   rotate_sprite(buffer,turtle,vetTurtle[2].xTurtle,vetTurtle[2].yTurtle,ftofix(vetTurtle[2].angulo));

   if(vetTurtle[0].yTurtle>=500 && colisao!=1) draw_sprite(buffer,fail,vetTurtle[0].xTurtle,540);
   if(vetTurtle[1].yTurtle>=500 && colisao!=1) draw_sprite(buffer,fail,vetTurtle[1].xTurtle,540);
   if(vetTurtle[2].yTurtle>=500 && colisao!=1) draw_sprite(buffer,fail,vetTurtle[2].xTurtle,540);



   if(colisao!=1)
   {
     textprintf_ex(buffer,fontscore,10,10,makecol(181,230,29), -1, "SCORE: %d", score);
     textprintf_ex(buffer,fontscore,700,10,makecol(181,230,29), -1, "NIVEL: %d",printnv);
   }

   draw_sprite(screen, buffer,0,0);

 }

 /// DESTROY
 destroy_font(fontscore);
 destroy_bitmap(buffer);
 destroy_bitmap(turtle);
 destroy_bitmap(personagem);
 destroy_bitmap(fundo);

 allegro_exit();
 return 0;
}
Esempio n. 2
0
int main(int argc, char **argv)
{
   SPRITE sprites[SPRITE_COUNT];
   BITMAP *buffer;
   BITMAP *pic;
   BITMAP *tmp;
   char buf[1024];
   char *filename;
   int mode = 0;
   int hold_space = 0;
   char *msg;
   int i;

   /* standard init */
   if (allegro_init() != 0)
      return 1;
   install_timer();
   install_keyboard();

   /* setting graphics mode */
   set_color_depth(16);
   if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0) != 0) {
      if (set_gfx_mode(GFX_SAFE, 640, 480, 0, 0) != 0) {
         set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
         allegro_message("Unable to set any graphic mode\n%s\n",
                 allegro_error);
         return 1;
      }
   }

   /* set initial position, direction and drawing for all sprites */
   for (i = 0; i < SPRITE_COUNT; i++)
      setup_sprite(&sprites[i], i);

   /* sort the sprites by drawing level */
   qsort(sprites, SPRITE_COUNT, sizeof(SPRITE), sprite_compare);

   /* locate the bitmap we will use */
   replace_filename(buf, argv[0], "allegro.pcx", sizeof(buf));
   filename = buf;

   /* load the bitmap and stretch it */
   tmp = load_bitmap(filename, NULL);
   pic = create_bitmap(64, 64);
   stretch_blit(tmp, pic, 0, 0, tmp->w, tmp->h, 0, 0, pic->w, pic->h);
   destroy_bitmap(tmp);

   /* we are using double buffer mode, so create the back buffer */
   buffer = create_bitmap(screen->w, screen->h);

   set_trans_blender(128, 0, 64, 128);

   /* exit on Esc key */
   while (!key[KEY_ESC]) {
      /* move every sprite and draw it on the back buffer */
      for (i = 0; i < SPRITE_COUNT; i++) {
         SPRITE *s = &sprites[i];
         move_sprite(s);
         draw_sprite_ex(buffer, pic, s->x, s->y, s->draw_type, mode);
      }

      /* handle the space key */
      if (key[KEY_SPACE] && !hold_space) {
         hold_space = 1;
         /* switch to next flipping mode */
         switch (mode) {
            case DRAW_SPRITE_H_FLIP:
               mode = DRAW_SPRITE_V_FLIP;
               break;
            case DRAW_SPRITE_V_FLIP:
               mode = DRAW_SPRITE_VH_FLIP;
               break;
            case DRAW_SPRITE_VH_FLIP:
               mode = DRAW_SPRITE_NO_FLIP;
               break;
            case DRAW_SPRITE_NO_FLIP:
               mode = DRAW_SPRITE_H_FLIP;
               break;
         }
      }
      if (!key[KEY_SPACE]) {
         hold_space = 0;
      }

      /* set the title according to the flipping mode used */
      if (mode == DRAW_SPRITE_VH_FLIP) {
         msg = "horizontal and vertical flip";
      } else if (mode == DRAW_SPRITE_H_FLIP) {
         msg = "horizontal flip";
      } else if (mode == DRAW_SPRITE_V_FLIP) {
         msg = "vertical flip";
      } else {
         msg = "no flipping";
      }
      textprintf_ex(buffer, font, 1, 1, makecol(255, 255, 255), -1, msg);

      /* finally blit the back buffer on the screen */
      blit(buffer, screen, 0, 0, 0, 0, buffer->w, buffer->h);
      clear_bitmap(buffer);

      /* reduce CPU usage */
      rest(20);
   }

   /* clean up */
   destroy_bitmap(pic);
   destroy_bitmap(buffer);

   return 0;
}