int check_select(Uint32 timeout) { SOCKET maxfd; int retval; struct timeval tv; struct timeval before; struct timeval left; fd_set maskr; fd_set maskw; int done; check_dead(); FD_ZERO(&maskr); FD_ZERO(&maskw); maxfd = fill_fd(&maskr, &maskw); tv.tv_sec = timeout / 1000; tv.tv_usec = (timeout % 1000) * 1000; done = 0; while (!done) { cnt->select_recv = 0; gettimeofday(&before, NULL); retval = select((int)maxfd + 1, &maskr, &maskw, NULL, &tv); done = 0; if (retval > 0 && check_clients(&maskr, &maskw, &retval)) done += 1; if (retval > 0 && check_server(&maskr, &maskw, &retval)) done += 8; if (retval) { if (retval < 0 && errno != EINTR) fprintf(stderr, "select: %s", strerror(errno)); else fprintf(stderr, "select: on m'aurait mentit (reste:%d) ?\n", retval); exit(-1); } check_dead(); if (!timeout) return (done); gettimeofday(&left, NULL); left.tv_sec -= before.tv_sec; left.tv_usec -= before.tv_usec; if (cnt->select_recv && left.tv_sec < tv.tv_sec && left.tv_usec < tv.tv_usec) { done = 0; memcpy(&tv, &left, sizeof(left)); } } return (done); }
int ia_play(t_player *player, t_map map) { t_msg msg; int ret; lock(); if (check_dead(player, map) == FAILURE) ret = FAILURE; else if (read_msg(CASE_DEAD_MSG_ID + player->pos.x + player->pos.y * MAP_SIZE, &msg, IPC_NOWAIT) == SUCCESS) ret = ia_exit(player, map); else if (read_msg(TEAM_MSG_ID + player->id_team, &msg, IPC_NOWAIT) == SUCCESS) { if (msg.type == MSG_GETOUT) ret = ia_exit(player, map); else if (msg.type == MSG_GO_TO_ALLY || msg.type == MSG_GO_TO_ENNEMY) ret = ia_path_finding(player, map, msg.type); } else { what_msg_send(player, map); ret = ia_path_finding(player, map, MSG_GO_TO_ENNEMY); } if (count_nb_ennemy(map, player, &ret) == FAILURE) printf("Team [%i] WON!\n", player->id_team); return (unlock() == SUCCESS && ret); }
int snake_start() { restart: score = 0; init_snake(); init_map(); clear(); refresh(); draw_score(); draw_help(); draw_box(0, 1, LINES-2, COLS-2); draw_snake(); draw_map(); gen_food(); if ((pthread_create(&thread_input, NULL, get_input, NULL)) != 0) exit(1); while (1) { usleep(speed); check_input(); if (exit_flag) { pthread_cancel(thread_input); exit_snake(); break; } if (pause_flag) { pthread_cancel(thread_input); getch(); pause_flag = 0; if ((pthread_create(&thread_input, NULL, get_input, NULL)) != 0) exit(1); } move_snake(); if (check_dead()) { pthread_cancel(thread_input); if (snake_dead_exit()) { exit_snake(); break; } goto restart; } if (check_food()) { inc_score(); draw_score(); snake_grow_one(); gen_food(); } }; return 0; }
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; }