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