void tela(int status){ switch(status){ case 0: set_color(4); boas_vindas(); reset_color(); break; case 1: set_color(6); voce_ganhou(); reset_color(); break; case 2: set_color(1); voce_perdeu(); reset_color(); break; case 3: set_color(2); boa_viajem(); reset_color(); break; } }
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; }
void *th_jogadas(void *arg) { _Bool side = *(_Bool *)arg; int codigo=DRAW; char **resposta; char temp1[SMALL_BUFF]; char temp2[SMALL_BUFF]; lock(&actualiza); espera=TRUE; debug=FALSE; /**Comunica STR ao servidor assim que confirmado pelo jogador*/ boas_vindas(side,TRUE); draw_heading(nome_jogo, cowboys[LEFT].name, cowboys[LEFT].bulletsleft, cowboys[LEFT].games, cowboys[RIGHT].name, cowboys[RIGHT].bulletsleft, cowboys[RIGHT].games, codigo); draw_cowboy(LEFT); draw_cowboy(RIGHT); unlock(&actualiza); codigo=NODRAW; for(;;) { /**Espera por comunicacoes*/ resposta=espera_resposta(&cowboys[side].sfd,resposta,&codigo); lock(&actualiza); lock(&ecra); if(modifica_janela(resposta, side, codigo)) break; draw_heading(nome_jogo, cowboys[LEFT].name, cowboys[LEFT].bulletsleft, cowboys[LEFT].games, cowboys[RIGHT].name, cowboys[RIGHT].bulletsleft, cowboys[RIGHT].games, codigo); unlock(&actualiza); unlock(&ecra); } quit=TRUE; clear(); refresh(); wtimeout(wnd,-1); mvwprintw(wnd, 1, 0, "Estatísticas finais"); mvwprintw(wnd, 0, 0, "High Noon - Projecto de Programacao de Sistemas"); memset((void*)&temp1,(int)'\0',sizeof(temp1)); mvwprintw(wnd, NROWS/2-1, NCOLS/2-(strlen(cowboys[LEFT].name)+strlen(" Vs ")+strlen(cowboys[RIGHT].name))/2, "%s Vs %s",cowboys[LEFT].name, cowboys[RIGHT].name); memset((void*)&temp1,(int)'\0',sizeof(temp1)); memset((void*)&temp2,(int)'\0',sizeof(temp2)); sprintf(temp1,"%d",cowboys[LEFT].games); sprintf(temp2,"%d",cowboys[RIGHT].games); mvwprintw(wnd, NROWS/2, NCOLS/2-(strlen(temp1)+strlen(" Vs ")+strlen(temp2))/2, "%s Vs %s", temp1, temp2); mvwprintw(wnd, NROWS-2, 0, "Obrigado por jogar\n"); mvwprintw(wnd, NROWS-1, 0, "Pressione uma tecla para terminar\n"); refresh(); getch(); close_HN_window(); delwin(wnd); unlock(&actualiza); unlock(&ecra); pthread_exit(0); }