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);
}
예제 #2
0
파일: ia_msgq.c 프로젝트: JACOBFelix/lemipc
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);
}
예제 #3
0
파일: snake.c 프로젝트: macrosheep/snake
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;
}
예제 #4
0
파일: hncui.c 프로젝트: PFigs/portfolio
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;
}