void showgun(t_env *e) { static int ct = 0; move_bullets(e); if (ct == 5 && !(ct = 0)) e->shooting = 0; if (e->shooting == 1) { ct++; if (ct == 1) { add_one_obj_tab(e); e->sprite_tab[e->sprites_nbr - 1].life = 0; e->sprite_tab[e->sprites_nbr - 1].pos_x = e->p.pos_x + 0.5 * e->p.dir_x; e->sprite_tab[e->sprites_nbr - 1].pos_y = e->p.pos_y + 0.5 * e->p.dir_y; e->sprite_tab[e->sprites_nbr - 1].dir_x = e->p.dir_x; e->sprite_tab[e->sprites_nbr - 1].dir_y = e->p.dir_y; e->sprite_tab[e->sprites_nbr - 1].plane_x = 0; e->sprite_tab[e->sprites_nbr - 1].plane_y = 1; e->sprite_tab[e->sprites_nbr - 1].tex_id = 13; } } }
//posun hry o casovy tik void update_game(float time, int k_up, int k_down, int k_right, int k_left, int k_fire) { //pozadi pro koncovy screen hry if (playerdead) { move_stars(time); move_enemies(time); move_bullets(time); update_particles(time); move_bonuses(time); deathtimer-=time; if ((deathtimer<=0) && k_fire) { //zacatek nove hry finish_game(); init_game(); } } else { handle_levels(); //odecteni casu od casovacu bonusu shieldtimer-=time; canontimer-=time; reload+=time; //ovladani raketky (funkce z main.c) if (k_left) speedx-=time*1300; if (k_right) speedx+=time*1300; if (k_up) speedy+=time*1300; if (k_down) speedy-=time*1300; //strelba mozna jen po specifickem casovem intervalu if (k_fire && ((canontimer>0)?(reload>(0.2/(plevel))):(reload>(0.5/(plevel*0.9))))) { if (canontimer<=0) //strelba zavisla na power levelu add_bullet(posx, posy+50, 0, 200, plevel, 1, 1); else //silenej gun po sebrani zeleneho bonusu add_bullet(posx, posy+50, 0.8*speedx+200*DFRAND*DFRAND*DFRAND, 300+speedy+20*DFRAND, 10*plevel, 1, 1); reload=0; } //aplikace rychlosti raketky na pozici posx+=speedx*time; posy+=speedy*time; //aby raketka brzdila stejne pri ruznem frameratu speedx*=powf(0.02, time); //powf = exponenciela speedy*=powf(0.02, time); //okraje hraciho pole pro raketku if (posx<-225) {posx=-225; speedx=0;} if (posx>225) {posx=225; speedx=0;} if (posy<-335) {posy=-335; speedy=0;} if (posy>-100) {posy=-100; speedy=0;} move_stars(time); move_enemies(time); move_bullets(time); update_particles(time); move_bonuses(time); } }
void Game::run() { move_invader(); move_bullets(); hit(); }
int modifica_janela(char **campos, int side, int codigo) { int i; switch(codigo) { case NSH: if(strcmp(campos[1],"P2")==0) side=RIGHT; if(strcmp(campos[1],"P1")==0) side=LEFT; /**SE SYNC - TEM QUE ACTIVAR THREAD PARA ACTUALIZAR BALAS**/ for ( i = 0; i < maxbalas; i++ ) { if ( bullets[side][i].empty ) { break; } } if ( i < maxbalas ) { bullets[side][i].empty = FALSE; bullets[side][i].y = cowboys[side].y + 2; /***BLOQUEAR*/ cowboys[side].bulletsleft--; if ( side == LEFT ) { bullets[side][i].x = cowboys[side].x+4; move(bullets[side][i].y, bullets[side][i].x); delch(); insch('>'); } else { bullets[side][i].x = cowboys[side].x-1; move(bullets[side][i].y, bullets[side][i].x); delch(); insch('<'); } refresh(); } return FALSE; break; case REL: /****BLOQUEAR***/ cowboys[LEFT].bulletsleft=maxbalas; cowboys[RIGHT].bulletsleft=maxbalas; free(campos[0]); return FALSE; break; case BLT: /**Move as balas*/ if(!check_dead(LEFT) && !check_dead(RIGHT)) { for ( i = 0; i < maxbalas; i++ ) { if ( bullets[side][i].empty ) { break; } } if(i<maxbalas+1) move_bullets(); } free(campos[0]); return FALSE; break; case MOV: if(strcmp(campos[1],"P1")==0) side = LEFT; else side = RIGHT; delete_cowboy(side); cowboys[side].y = atoi(campos[2]); draw_cowboy(side); return FALSE; break; case EOG: clear(); if(strcmp(campos[1],"P1")==0) { mvwprintw(wnd, NROWS/2, NCOLS/2-(strlen("VENCEDOR DA PARTIDA: ")+strlen(cowboys[LEFT].name))/2, "Vencedor da partida: %s",cowboys[LEFT].name); cowboys[LEFT].games=atoi(campos[2]); } else if(strcmp(campos[1],"P2")==0) { mvwprintw(wnd, NROWS/2, NCOLS/2-(strlen("VENCEDOR DA PARTIDA: ")+strlen(cowboys[RIGHT].name))/2, "Vencedor da partida: %s",cowboys[RIGHT].name); cowboys[RIGHT].games=atoi(campos[2]); } else { mvwprintw(wnd, NROWS/2-4, NCOLS/2-(strlen("VENCEDOR DA PARTIDA: JOGADOR EMPATE"))/2, "Vencedor da partida: Empate"); } wtimeout(wnd,-1); mvwprintw(wnd, 0, 0, "High Noon - Projecto de Programacao de Sistemas"); /**Colocar numero da partida?*/ mvwprintw(wnd, 1, 0, "Fim da Partida Numero: %d",cowboys[RIGHT].games+cowboys[LEFT].games); mvwprintw(wnd, NROWS-1, 0, "Pressione uma tecla qualquer para começar um novo jogo\n"); refresh(); getch(); clear(); refresh(); /**Recebe novamente tudo*/ close_HN_window(); /*delwin(wnd);*/ boas_vindas(side,FALSE); com_partida(side); clear(); refresh(); draw_cowboy(LEFT); draw_cowboy(RIGHT); return FALSE; break; case EXT: if(strcmp(campos[1],"P1")==0) side = LEFT; else side = RIGHT; cowboys[side].games=atoi(campos[2]); cowboys[!side].games=atoi(campos[3]); return TRUE; break; case ERR: break; default: close_HN_window(); printf("ERRO: Mensagem nao reconhecida!\n"); exit(EXIT_FAILURE); break; } return FALSE; }