void sleep_init(int mins) { char txt[256]; LOCK_FUNCTION(sleep_timeout); LOCK_FUNCTION(sleep_fadeout); /* See if fading is required */ sprintf(txt,get_config_string("[options]","sleep_fade","yes")); if(stricmp(txt,"YES") == 0) sleep_want_fade = TRUE; install_int_ex(sleep_timeout, SECS_TO_TIMER(mins*60)); }
int startGame(){ configAll(); BITMAP * nave = load_bitmap("img/35x45/nave.bmp",NULL); BITMAP * alien = load_bitmap("img/35x45/alien.bmp", NULL); BITMAP * gun = load_bitmap("img/35x45/gun.bmp", NULL); BITMAP * init = load_bitmap("img/start.bmp", NULL); BITMAP * bg = load_bitmap("img/bartop.bmp", NULL); BITMAP * buffer = create_bitmap(SCREEN_W,SCREEN_H); SAMPLE * sound = load_wav("wav/tiro.wav"); SAMPLE * music = load_sample("wav/laserHit.wav"); initStart(buffer,init); install_int_ex(countXa,SECS_TO_TIMER(1)); install_int_ex(countGun,MSEC_TO_TIMER(1)); gameControll(nave,buffer,alien,gun,bg,sound,music); destroyAll(nave,buffer,alien,gun,init,bg,sound,music); return 0; }
int humanvspsp(Player *p1, Player *p2) { BITMAP* buffer_field_game = create_bitmap(MAX_WIDTH, MAX_HEIGTH); BITMAP* buffer_border_and_info = create_bitmap(SCREEN_WIDTH, SCREEN_HEIGTH); int koniec = -1; reset_player(p1, 136, 230, 2); reset_player(p2, 136, 245, 3); clear_to_color(buffer_field_game, makecol(0, 0, 0)); rysuj_obramowanie(buffer_border_and_info, p1, p2); blit(buffer_border_and_info, screen, 0, 0, 0, 0, buffer_border_and_info->w, buffer_border_and_info->h); clear_keybuf(); odliczanie(); blit(buffer_border_and_info, screen, 0, 0, 0, 0, buffer_border_and_info->w, buffer_border_and_info->h); clear_key(); blit(buffer_field_game, buffer_border_and_info, 0, 0, 1, 1, buffer_field_game->w, buffer_field_game->h); blit(buffer_border_and_info, screen, 0, 0, 0, 0, buffer_border_and_info->w, buffer_border_and_info->h); p1_speed = 0; p2_speed = 0; speed = 25; install_int_ex(p1_speed_func, MSEC_TO_TIMER(speed)); install_int_ex(p2_speed_func, MSEC_TO_TIMER(speed)); install_int_ex(speed_func, SECS_TO_TIMER(1)); while(TRUE) { ai_run(p2, buffer_field_game); if((p1->x == p2->x) && (p1->y == p2->y)) { koniec = 0; break; } switch(p1->direction) { case UP: if(getpixel(buffer_field_game, p1->y, p1->x-1) != makecol(0, 0, 0)) { koniec = 1; } break; case DOWN: if(getpixel(buffer_field_game, p1->y, p1->x+1) != makecol(0, 0, 0)) { koniec = 1; } break; case LEFT: if(getpixel(buffer_field_game, p1->y-1, p1->x) != makecol(0, 0, 0)) { koniec = 1; } break; case RIGHT: if(getpixel(buffer_field_game, p1->y+1, p1->x) != makecol(0, 0, 0)) { koniec = 1; } break; } switch(p2->direction) { case UP: if(getpixel(buffer_field_game, p2->y, p2->x-1) != makecol(0, 0, 0)) { if(koniec == 1) { koniec = 0; break; } else { koniec = 2; } } break; case DOWN: if(getpixel(buffer_field_game, p2->y, p2->x+1) != makecol(0, 0, 0)) { if(koniec == 1) { koniec = 0; break; } else { koniec = 2; } } break; case LEFT: if(getpixel(buffer_field_game, p2->y-1, p2->x) != makecol(0, 0, 0)) { if(koniec == 1) { koniec = 0; break; } else { koniec = 2; } } break; case RIGHT: if(getpixel(buffer_field_game, p2->y+1, p2->x) != makecol(0, 0, 0)) { if(koniec == 1) { koniec = 0; break; } else { koniec = 2; } } break; } putpixel(buffer_field_game, p1->y, p1->x, makecol(255, 255, 255)); putpixel(buffer_field_game, p2->y, p2->x, makecol(86, 160, 222)); if(p1->x < MIN_HEIGTH || p1->x > MAX_HEIGTH-1 || p1->y < MIN_WIDTH || p1->y > MAX_WIDTH-1) { koniec = 1; } if(p2->x < MIN_HEIGTH || p2->x > MAX_HEIGTH-1 || p2->y < MIN_WIDTH || p2->y > MAX_WIDTH-1) { if(koniec == 1) { koniec = 0; break; } else { koniec = 2; } } blit(buffer_field_game, screen, 0, 0, 1, 1, buffer_field_game->w, buffer_field_game->h); if(koniec != -1) break; if(key[KEY_ESC]) break; if(key[KEY_ENTER]) { pause_game(0, p1, p2); odliczanie(); } #ifdef PSP if(key[KEY_RSHIFT]) { thid = sceKernelCreateThread("Screenshotpsp", screenshotpsp, 0x11, 256 * 1024, PSP_THREAD_ATTR_USER, NULL); sceKernelStartThread(thid, 0, NULL); } #else if(key[KEY_M]) { screenshot(); } #endif #if PSP if(key[KEY_UP]) #else if(key[KEY_W]) #endif { if(p1->direction != DOWN) p1->direction = UP; } #if PSP else if(key[KEY_DOWN]) #else else if(key[KEY_S]) #endif { if(p1->direction != UP) p1->direction = DOWN; } #if PSP else if(key[KEY_LEFT]) #else else if(key[KEY_A]) #endif { if(p1->direction != RIGHT) p1->direction = LEFT; } #if PSP else if(key[KEY_RIGHT]) #else else if(key[KEY_D]) #endif { if(p1->direction != LEFT) p1->direction = RIGHT; } clear_keybuf(); keypressed(); while(p1_speed > 0) { switch(p1->direction) { case UP: p1->x--; break; case DOWN: p1->x++; break; case LEFT: p1->y--; break; case RIGHT: p1->y++; break; } p1_speed--; } while(p2_speed > 0) { switch(p2->direction) { case UP: p2->x--; break; case DOWN: p2->x++; break; case LEFT: p2->y--; break; case RIGHT: p2->y++; break; } p2_speed--; } } remove_int(p1_speed_func); remove_int(p2_speed_func); remove_int(speed_func); destroy_bitmap(buffer_field_game); destroy_bitmap(buffer_border_and_info); return koniec; }
int main(void) { int c; if (allegro_init() != 0) return 1; install_keyboard(); install_timer(); if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0) != 0) { if (set_gfx_mode(GFX_SAFE, 320, 200, 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_palette(desktop_palette); clear_to_color(screen, makecol(255, 255, 255)); textprintf_centre_ex(screen, font, SCREEN_W/2, 8, makecol(0, 0, 0), makecol(255, 255, 255), "Driver: %s", timer_driver->name); /* use rest() to delay for a specified number of milliseconds */ textprintf_centre_ex(screen, font, SCREEN_W/2, 48, makecol(0, 0, 0), makecol(255, 255, 255), "Timing five seconds:"); for (c=1; c<=5; c++) { textprintf_centre_ex(screen, font, SCREEN_W/2, 62+c*10, makecol(0, 0, 0), makecol(255, 255, 255), "%d", c); rest(1000); if (keypressed()) { return 0; } } textprintf_centre_ex(screen, font, SCREEN_W/2, 142, makecol(0, 0, 0), makecol(255, 255, 255), "Press a key to set up interrupts"); readkey(); /* all variables and code used inside interrupt handlers must be locked */ LOCK_VARIABLE(x); LOCK_VARIABLE(y); LOCK_VARIABLE(z); LOCK_FUNCTION(inc_x); LOCK_FUNCTION(inc_y); LOCK_FUNCTION(inc_z); /* the speed can be specified in milliseconds (this is once a second) */ install_int(inc_x, 1000); /* or in beats per second (this is 10 ticks a second) */ install_int_ex(inc_y, BPS_TO_TIMER(10)); /* or in seconds (this is 10 seconds a tick) */ install_int_ex(inc_z, SECS_TO_TIMER(10)); /* the interrupts are now active... */ while (!keypressed()) { textprintf_centre_ex(screen, font, SCREEN_W/2, 176, makecol(0, 0, 0), makecol(255, 255, 255), "x=%d, y=%d, z=%d", x, y, z); rest(1); } return 0; }
/* Mode: 0 - Speed mode, 1 - time mode (other settings set globally) */ int game(int mode) { /* Vars */ int i=0,j=0,k=0; /* Multi use variables */ int x_max=64,y_max=64; /* Max coordinates */ int step = 8; /* Moneyman pixel per step */ int padding = 16; /* Field's distance from window edge */ int starttime=0; /* Start time (saved there later) */ int currtime=0; int p1collectedcoins = 0; /* Number of collected coins */ int p2collectedcoins = 0; int score = 0; /* Score if P1 (in 2P mode no scores) */ int p1wins=0; int p2wins=0; int finished = 0; /* Finished (0=none, 1 =p1, 2=p2) */ /* Moneyman coordinates */ int p1_x=x_max/2, p2_x=p1_x; int p1_y=y_max/2, p2_y=p1_y; struct obj_struct *objs=0; /* Dyn. array with coins + exit door */ BITMAP *buffer=0,*p1pic=0,*p2pic=0,*coinpic=0,*exitpic=0; /* all bitmaps */ /* Init movement timer */ install_int_ex(increment_coinmove_counter, SECS_TO_TIMER(relocinterval)); /* Load bitmaps */ buffer = create_bitmap(800,600); p1pic = load_bitmap("gfx/MoneyMan.bmp",NULL); p2pic = load_bitmap("gfx/Player2.bmp",NULL); coinpic = load_bitmap("gfx/Coin.bmp",NULL); exitpic = load_bitmap("gfx/Exit.bmp",NULL); /* Random seed */ srand(time(NULL)); /* Init objects */ objs = malloc(sizeof(*objs)*(coinnumber+1)); /* Allocate */ if (objs==0) { /* Allocation failed */ fprintf(stderr,"Memory couldn't be allocated, sorry :( free your RAM!\n"); return 1; } init_objs(objs,coinnumber+1); /* Init with 0 */ objs[0].hidden = 1; /* Door invisible */ relocate_objs(objs,coinnumber+1,x_max,y_max); /* Random position */ readysetgo(); starttime = time(NULL); /* Here it's fair to start time counting */ while (!key[KEY_ESC] && !close_button_pressed) { /* ESC quits game */ clear_bitmap(buffer); rectfill(buffer,0,0,buffer->w,buffer->h,backcolor); while (speed_counter > 0) { /* logical tick event happened */ /* Collision check */ for (i=1; i<coinnumber+1; i++) { /* For coins - if visible, hide, increase counter */ if (PicCollision(p1pic,p1_x*step,p1_y*step, coinpic,objs[i].x*step,objs[i].y*step) && objs[i].hidden==0) { objs[i].hidden=1; p1collectedcoins++; } if (players==2) if (PicCollision(p2pic,p2_x*step,p2_y*step, coinpic,objs[i].x*step,objs[i].y*step) && objs[i].hidden==0) { objs[i].hidden=1; p2collectedcoins++; } } /* All coins collected - show door (speed mode) */ if (mode==0 && p1collectedcoins+p2collectedcoins == coinnumber) { objs[0].hidden=0; } currtime = time(NULL)-starttime; /* Calculate current score */ if (players==1) { if (mode==0) score = get_score(p1collectedcoins,relocinterval,currtime); else if (mode==1) score = get_score(p1collectedcoins,relocinterval,ttime); } if ((mode==0 && PicCollision(p1pic,p1_x*step,p1_y*step, exitpic,objs[0].x*step,objs[0].y*step) && objs[0].hidden==0) || (mode==1 && currtime>=ttime)) { finished = 1; } else if (players == 2) if (mode==0 && PicCollision(p2pic,p2_x*step,p2_y*step, exitpic,objs[0].x*step,objs[0].y*step) && objs[0].hidden==0) finished = 2; /* Movement of MoneyMan */ if(key[KEY_LEFT] && p1_x > 0) p1_x--; else if(key[KEY_RIGHT] && p1_x < x_max) p1_x++; if(key[KEY_UP] && p1_y > 0) p1_y--; else if(key[KEY_DOWN] && p1_y < y_max) p1_y++; /* Movement of P2 */ if(key[KEY_A] && p2_x > 0) p2_x--; else if(key[KEY_D] && p2_x < x_max) p2_x++; if(key[KEY_W] && p2_y > 0) p2_y--; else if(key[KEY_S] && p2_y < y_max) p2_y++; /*Reset tick counter*/ speed_counter=0; } /* win count (must be here) */ if (players==2 && mode==0) { /* More coins + reaches door -> win, else -> draw */ if (finished==1 && p1collectedcoins>p2collectedcoins) p1wins++; else if (finished==2 && p2collectedcoins>p1collectedcoins) p2wins++; } else if (players==2 && mode==1 && finished) { /* more coins -> win, else -> draw */ if (p1collectedcoins>p2collectedcoins) p1wins++; else if (p2collectedcoins>p1collectedcoins) p2wins++; } /* Move coins every some secs */ if (coinmove_counter > 0) { relocate_objs(objs,coinnumber+1,x_max,y_max); if (mode==1) /* Time mode */ for(i=1;i<coinnumber+1;i++) /* Make visible again */ objs[i].hidden=0; coinmove_counter = 0; /* reset interval tick */ } /* Fill buffer */ if (objs[0].hidden==0) /* index 0 = exit door */ draw_sprite(buffer,exitpic,step*objs[0].x+padding,step*objs[0].y+padding); for(i=1;i<=coinnumber;i++) /* the coins */ if (objs[i].hidden==0) draw_sprite(buffer,coinpic,step*objs[i].x+padding,step*objs[i].y+padding); /* Draw money man */ draw_sprite(buffer,p1pic,step*p1_x+padding,step*p1_y+padding); if (players==2) draw_sprite(buffer,p2pic,step*p2_x+padding,step*p2_y+padding); /* Borders of game field */ i=(x_max+p1pic->w/step)*step+padding; j=(y_max+p1pic->h/step)*step+padding; /* Draw borders */ for (k=0;k<5;k++) rect(buffer,padding-k,padding-k,i+k,j+k,makecol(0,0,255-k*20)); /* Print info */ textprintf_ex(buffer,myfont,i+padding,32,titlecol,-1,"MoneyMan"); textprintf_ex(buffer,myfont,i+padding,fontpxsize * 2, menuselcol,-1, (mode==0) ? "Time: %d" : "Time left: %d", (mode==0) ? currtime : ttime-currtime ); textprintf_ex(buffer,myfont,i+padding,fontpxsize * 3, menuselcol,-1, (mode==0) ? "Coins left: %d" : "P1 Coins: %d" , (mode==0) ? coinnumber-(p1collectedcoins+p2collectedcoins) : p1collectedcoins ); if (players==2 && mode==1) textprintf_ex(buffer,myfont,i+padding,fontpxsize * 4, menuselcol,-1, "P2 Coins: %d" , p2collectedcoins ); if (players==1) textprintf_ex(buffer,myfont, (x_max+p1pic->w/step)*step+2*padding,fontpxsize*5, menuselcol,-1, "Score: %d",score); /* Draw wins info */ if (players==2) { textprintf_ex(buffer,myfont, (x_max+p1pic->w/step)*step+2*padding,fontpxsize*11, infocol,backcolor, "P1 wins: %d",p1wins); textprintf_ex(buffer,myfont, (x_max+p1pic->w/step)*step+2*padding,fontpxsize*12, infocol,backcolor, "P2 wins: %d",p2wins); } /* Apply on screen */ blit(buffer,screen,0,0,0,0,800,600); /*Copy buffer to screen*/ /* If win */ if (finished) { if (mode==0) textprintf_ex(screen,myfont, (x_max+p1pic->w/step)*step+2*padding,fontpxsize*6, infocol,-1, "Finished!"); else if (mode==1) textprintf_ex(screen,myfont, (x_max+p1pic->w/step)*step+2*padding,fontpxsize*6, infocol,-1, "Time is over!"); if (players==1) add_if_highscore(score); textprintf_ex(screen,myfont, (x_max+p1pic->w/step)*step+2*padding,fontpxsize*8, infocol,-1, "ENTER=retry"); textprintf_ex(screen,myfont, (x_max+p1pic->w/step)*step+2*padding,fontpxsize*9, infocol,-1, "ESC=quit"); while(!(key[KEY_ENTER] || key[KEY_ESC])); if (key[KEY_ENTER]) { readysetgo(); finished = 0; p1collectedcoins = 0; p2collectedcoins = 0; init_objs(objs,coinnumber+1); relocate_objs(objs,coinnumber+1,x_max,y_max); objs[0].hidden = 1; /* hide door again */ remove_int(increment_coinmove_counter); install_int_ex(increment_coinmove_counter, SECS_TO_TIMER(relocinterval)); starttime = time(NULL); } } } /* clean up on finish */ remove_int(increment_coinmove_counter); destroy_bitmap(exitpic); destroy_bitmap(coinpic); destroy_bitmap(p1pic); destroy_bitmap(p2pic); destroy_bitmap(buffer); free(objs); objs=0; clear_bitmap(screen); rectfill(screen,0,0,screen->w,screen->h,backcolor); return 0; }
void main() { allegro_init(); install_keyboard(); set_color_depth(32); set_gfx_mode(GFX_AUTODETECT_WINDOWED, 1000, 600, 0, 0); install_int_ex(ContaMsec, MSEC_TO_TIMER(1)); install_int_ex(ContaSec, SECS_TO_TIMER(1)); install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL); MIDI* bgSound = load_midi("sounds/BGM.mid"); SAMPLE* snakeHit = load_wav("sounds/cobraDamage.wav"); SAMPLE* snakeHitSelf = load_wav("sounds/cobraDamage2.wav"); SAMPLE* snakeDeath = load_wav("sounds/cobraDeath.wav"); SAMPLE* gameOver = load_wav("sounds/gameOver.wav"); InicializaPP(); int swt = 0; struct Cobra snake[500]; //Estrutura que representa a cobra e suas bmpPartes. int xst=0, yst=10, xst2=190, yst2 = 40; //Coordenadas de referência da área de Status do jogo int xL = 0, yL = 425, xL2 = 190, yL2 = 590; //Coordenadas de referência da Tabela de Comidas buffer = create_bitmap(800,600); //Bitmap principal de desenho status = create_bitmap(200,600); //Bitmap principal de desenho clear_to_color(status, makecol(0,0,0)); clear_to_color(buffer, makecol(0,0,0)); //INICIO: Inicializacao Sprites bmpSapo = load_bitmap("images/sapo_20x20.bmp",pallet); bmpAranha = load_bitmap("images/ARANHA_20X20.bmp",pallet); bmpMaca = load_bitmap("images/MACA_20x20.bmp",pallet); bmpMilho = load_bitmap("images/milho_20X20.bmp",pallet); bmpCobraHead = load_bitmap("images/cobraHeadVerde.bmp",pallet); bmpFundo = load_bitmap("images/fundoAreia.bmp",pallet); bmpCobrinha = load_bitmap("images/cobrinha.bmp",pallet); bmpParte = load_bitmap("images/cobraCorpo2.BMP",pallet); bmpBordaVert = load_bitmap("images/bordaVert.bmp",pallet); bmpBordaHoriz = load_bitmap("images/bordaHoriz.bmp",pallet); myfont = load_font("Terminal.pcx", pallet, NULL); //Fonte personalizada //FIM: Inicializacao Sprites //INICIO: Comidas Comida cmdSapo; cmdSapo.x = 300; cmdSapo.y = 400; cmdSapo.bmp = bmpSapo; cmdSapo.spStand = load_wav("sounds/sapoStand.wav"); cmdSapo.spDie = load_wav("sounds/sapoDie.wav"); cmdSapo.visible = true; cmdSapo.ponto = 50; cmdSapo.taman = 1; Comida cmdAranha; cmdAranha.x = 60; cmdAranha.y = 500; cmdAranha.bmp = bmpAranha; cmdAranha.spStand = load_wav("sounds/sapoStand.wav"); cmdAranha.spDie = load_wav("sounds/aranhaDie.wav"); cmdAranha.visible = true; cmdAranha.ponto = 30; cmdAranha.taman = 3; Comida cmdMaca; cmdMaca.x = 100; cmdMaca.y = 100; cmdMaca.bmp = bmpMaca; cmdMaca.spStand = load_wav("sounds/sapoStand.wav"); cmdMaca.spDie = snakeBit; cmdMaca.visible = true; cmdMaca.ponto = 20; cmdMaca.taman = 4; Comida cmdMilho; cmdMilho.x = 600; cmdMilho.y = 100; cmdMilho.bmp = bmpMilho; //cmdmilho.spStand = load_wav("sounds/sapoStand.wav"); cmdMilho.spDie = snakeBit; cmdMilho.visible = true; cmdMilho.ponto = 10; cmdMilho.taman = 5; Comida cmdCobrinha; cmdCobrinha.x = 600; cmdCobrinha.y = 480; cmdCobrinha.bmp = bmpCobrinha; cmdCobrinha.spStand = load_wav("sounds/cobrinhaStand.wav"); cmdCobrinha.spDie = load_wav("sounds/cobrinhaDie.wav"); cmdCobrinha.visible = true; cmdCobrinha.ponto = 40; cmdCobrinha.taman = 2; Comida comidas[20]; comidas[0] = cmdSapo; comidas[1] = cmdAranha; comidas[2] = cmdMaca; comidas[3] = cmdMilho; comidas[4] = cmdCobrinha; comidas[5] = cmdAranha; comidas[6] = cmdMilho; comidas[7] = cmdMilho; comidas[8] = cmdMilho; comidas[9] = cmdCobrinha; comidas[10] = cmdSapo; comidas[11] = cmdAranha; comidas[12] = cmdMaca; comidas[13] = cmdMilho; comidas[14] = cmdCobrinha; comidas[15] = cmdAranha; comidas[16] = cmdMilho; comidas[17] = cmdMilho; comidas[18] = cmdMilho; comidas[19] = cmdCobrinha; //FIM: Comidas Vida vidas[6]; for (int i = 0;i < 6; i++){ vidas[i].x = i*30; vidas[i].y = 0; vidas[i].bmp = bmpCobraHead; vidas[i].visible = true; } //INICIO: Desenho da área de status do jogo. Pontos, Fase, Tamanho, Tempo, Vidas for (int i = -1;i<2;i++){rect(status, xst+i, yst+i, xst2-i, 40-i, makecol(210,192,152));} textprintf_ex(status, myfont, xst+5,68, makecol(255,0,0), -1,"Fase: 1" ); for (int i = -1;i<2;i++){rect(status, xst+i, yst+50+i, xst2-i, yst2+50-i, makecol(210,192,152));} for (int i = -1;i<2;i++){rect(status, xst+i, yst+100+i, xst2-i, yst2+100-i, makecol(210,192,152));} for (int i = -1;i<2;i++){rect(status, xst+i, yst+150+i, xst2-i, yst2+150-i, makecol(210,192,152));} for (int i = 0;i < 6; i++){ if (vidas[i].visible){ draw_sprite(status, vidas[i].bmp, vidas[i].x, vidas[i].y+195); } } //FIM: Desenho da área status do jogo. Pontos, Fase, Tamanho, Tempo, Vidas //INICIO: Desenho da Tabela de Comida do jogo. textprintf_ex(status, myfont, xL,yL-20, makecol(255,0,0 ), -1,"Comidas" ); for (int i = -1;i<2;i++){rect(status, xL+i, yL+i, xL2-i, yL2-i, makecol(210,192,152));} draw_sprite(status, bmpMilho, xL+10, yL+10); textprintf_ex(status, font, xL+40,yL+20, makecol(255,255,0 ), -1,"10 pontos" ); draw_sprite(status, bmpMaca, xL+10, yL+40); textprintf_ex(status, font, xL+40,yL+50, makecol(255,0,0 ), -1,"20 pontos" ); draw_sprite(status, bmpAranha, xL+10, yL+70); textprintf_ex(status, font, xL+40,yL+80, makecol(153,0,255 ), -1,"30 pontos" ); draw_sprite(status, bmpCobrinha, xL+10, yL+100); textprintf_ex(status, font, xL+40,yL+110, makecol(255,255,153 ), -1,"40 pontos" ); draw_sprite(status, bmpSapo, xL+10, yL+130); textprintf_ex(status, font, xL+40,yL+140, makecol(110,220,0 ), -1,"50 pontos " ); //FIM: Desenho da Tabela de Comida do jogo. //INICIO: Desenho do campo de ação da cobra. draw_sprite(buffer, bmpFundo, xC,yC); draw_sprite(buffer, bmpBordaVert, xC,yC); draw_sprite(buffer, bmpBordaVert, xC2-20,yC); draw_sprite(buffer, bmpBordaHoriz, xC,xC); draw_sprite(buffer, bmpBordaHoriz, xC,yC2-20); //FIM: Desenho do campo de ação da cobra //INICIO: Desenho da cobra snake[0].bmp = bmpCobraHead; for (int i = 1;i<tamCobra;i++){ snake[i].bmp = bmpParte; } //FIM: Desenho da cobra char control; int veloc; control = menu_inicial(); if (control == 'j'){veloc = 120;}else{veloc = 50;} play_midi(bgSound,0); draw_sprite(screen,status,800,0); DesenhaCampoAcao(); int x=20, y=20 , xx, yy; int dirx = 20, diry = 0; int tipoCol = 0; int tamComida; //Tamanho que a comida capturada aumentará a cobra int ptsComida; //Quantidade de pontos que a comida vale int pontosAtual = 0; //Quantidade de pontos while (!key[KEY_ESC]) { DesenhaCampoAcao(); if(control == 't'){ if (key[KEY_UP]){ if (dirx != 0) { diry = -20; dirx = 0; } } if (key[KEY_DOWN]){ if (dirx != 0) { diry = 20; dirx = 0; } } if (key[KEY_LEFT]){ if (diry != 0) { dirx = -20; diry = 0; } } if (key[KEY_RIGHT]){ if (diry != 0) { dirx = 20; diry = 0; } } } else if(control = 'j') { swt = inp32(0x379); if (swt == 95){ if ((countMsecCmd / 100) > 1){ if (dirx == 20 && diry == 0) { diry = 20; dirx = 0; } else if (dirx == 0 && diry == 20) { dirx = -20; diry = 0; } else if (dirx == -20 && diry == 0) { diry = -20; dirx = 0; } else if (dirx == 0 && diry == -20) { dirx = 20; diry = 0; } countMsecCmd = 0; } } if (swt == 63){ if ((countMsecCmd / 100) > 1){ if (dirx == 0 && diry == 20) { diry = 0; dirx = 20; } else if (dirx == 20 && diry == 0) { dirx = 0; diry = -20; } else if (dirx == 0 && diry == -20) { diry = 0; dirx = -20; } else if (dirx == -20 && diry == 0) { dirx = 0; diry = 20; } countMsecCmd = 0; } } } if ((countMsec / veloc) > 1){ x += dirx; y += diry; if (VerifCollision(snake, comidas, x, y, &xx, &yy, tamCobra, &tipoCol, &ptsComida, &tamComida)){ switch (tipoCol){ case 0: break; case 1://colisao com corpo textprintf_ex(screen, font, 0,560, makecol(255,0,0 ), -1,"Colisao Em : x: %d y: %d TipoCol: %d", xx, yy, tipoCol); tipoCol = 0; ResetaPosicaoCobra(snake, tamCobra); play_sample(snakeHitSelf,255,90,1000,0); if (qtdVidas > 1){qtdVidas=0;} else {qtdVidas = -1;} MostraVidas(qtdVidas,vidas); x=20; y=20; dirx = 20; diry = 0; AcendeLuzes(); break; case 2://colisao obstaculos textprintf_ex(screen, font, 0,560, makecol(255,0,0 ), -1,"Colisao Em : x: %d y: %d TipoCol: %d", xx, yy, tipoCol); tipoCol = 0; ResetaPosicaoCobra(snake, tamCobra); play_sample(snakeHit,255,90,1000,0); qtdVidas--; MostraVidas(qtdVidas,vidas); x=20; y=20; dirx = 20; diry = 0; AcendeLuzes(); break; case 3: //colisao comida textprintf_ex(screen, font, 0,560, makecol(255,0,0 ), -1,"Colisao Em : x: %d y: %d TipoCol: %d", xx, yy, tipoCol); AumentaCobra(snake, &tamCobra, tamComida, bmpParte); pontosAtual += ptsComida; tipoCol = 0; CriaComida(comidas); break; } } MoveSnake(snake, x, y, tamCobra); MostraStatus(pontosAtual, tamCobra); draw_sprite(screen,status,800,0); countMsec = 0; for (int i = 0;i < tamCobra;i++){ draw_sprite(buffer, snake[i].bmp, snake[i].x,snake[i].y); } for (int i = 0;i < 10;i++){ if (comidas[i].visible){ draw_sprite(buffer, comidas[i].bmp, comidas[i].x,comidas[i].y); } } draw_sprite(screen,buffer,0,0); IntercalaLeds(); } else if(qtdVidas < 0) { play_sample(snakeDeath,255,90,1000,0); stop_midi(); play_sample(gameOver,255,90,1000,0); GravaRank(pontosAtual, countSec, tamCobra); clear_to_color(buffer, makecol(165,229,101)); clear_to_color(screen, makecol(165,229,101)); MostraRank(); textprintf_ex(buffer, myfont, 300,500, makecol(255,0,0), -1,"Aperte ESC para sair...." ); draw_sprite(screen,buffer,0,0); break; } } while (!key[KEY_ESC]) {} FinalizaPP(); }