コード例 #1
0
ファイル: tron.c プロジェクト: davazp/aitron
void
walls (int n, player_t * p1, player_t * p2)
{
  Uint32 color;
  int (*v)[2];
  int i,j;
  int index;
  int new_wall_p;
  if (graphicsp)
    color = SDL_MapRGB(screen->format, 50, 50, 50);

  /* Envia la cantidad de muros que habra */
  write_cords (p1, n, 0);
  write_cords (p2, n, 0);

  new_wall_p = 1;
  while(n>0)
    {
      int i,j;
      if (!new_wall_p)
        {
          int c;
          int directions[][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};
          int di, dj;
          int d;
          c=0;
          do
            {
              d = (int)((float)rand() / RAND_MAX * 4);
              di = directions[d][0];
              dj = directions[d][1];
              directions[d][0] = -1;
              directions[d][0] = -1;
              c++;
            }
          while( c<20 &&
                 (i+di<0 || i+di >= N ||
                  j+dj<0 || j+dj >= N ||
                  map[i+di][j+dj] == 1 ));
          i += di;
          j += dj;
          if (c==20)
            new_wall_p = 1;
          else
            new_wall_p = (float)rand() / RAND_MAX >= WALL_P;
        }
      if (new_wall_p)
        {
          random_position (&i, &j);
          new_wall_p = 0;
        }
      draw_point (i, j, color);
      map[i][j]=1;
      write_cords (p1, i, j);
      write_cords (p2, i, j);
      n--;
    }
}
コード例 #2
0
ファイル: main.cpp プロジェクト: WCCCEDU/WordScrambleGame
// mix up characters in word by swapping letters
string scramble(string word){
  unsigned long size = word.size();
  for (int i = 0; i < size; i++) {
    unsigned long temp_index = random_position(size);
    char temp = word[temp_index];
    word[temp_index] = word[i];
    word[i] = temp;
  }
  return word;
}
コード例 #3
0
ファイル: tron.c プロジェクト: davazp/aitron
/* Funcion principal del programa */
int
main (int argc, char * argv[])
{
  player_t * player1;
  player_t * player2;
  int finishp;
  int p[2][2];
  int opt;
  const char * progname1;
  const char * progname2;

  while ((opt = getopt(argc, argv, "bd:n:w:")) != -1) {
    switch (opt) {
      /* Establece el retraso entre movimiento y movimiento */
    case 'd':
      delay = atoi (optarg);
      break;
      /* No usa SDL, solo recolecta estadisticsa.  */
    case 'b':
      graphicsp = 0;
      break;
      /* Numero de partidas para simular. */
    case 'n':
      plays = atoi (optarg);
      break;
      /* Numero de particulas de muro */
    case 'w':
      nwalls = atoi (optarg);
      break;
    default: /* '?' */
      usage();
    }
  }
  if (argc-optind < 2)
    usage();

  progname1 = argv[optind++];
  progname2 = argv[optind++];

  if(graphicsp)
    {
      SDL_Init (SDL_INIT_VIDEO);
      SDL_WM_SetCaption ("AI Tron", NULL);
      screen = SDL_SetVideoMode(N * POINTSIZE, N * POINTSIZE, 32, SDL_HWSURFACE);
      if (screen == NULL)
        {
          fprintf (stderr, "El sistema no soporta esta resolucion.\n");
          exit (-1);
        }
    }

  initialize_random();

  player1 = create_player (progname1);
  player2 = create_player (progname2);
  for(current_play=0; current_play<plays; current_play++)
    {
      memset (map, 0, sizeof(map));
      if (graphicsp)
        SDL_FillRect( screen, NULL, 0 );

      random_position (&p[0][0], &p[0][1]);
      random_position (&p[1][0], &p[1][1]);
      prepare_player (player1, p[0][0], p[0][1]);
      prepare_player (player2, p[1][0], p[1][1]);
      write_cords (player1, p[1][0], p[1][1]);
      write_cords (player2, p[0][0], p[0][1]);

      walls(nwalls, player1, player2);

      /* Bucle principal */
      finishp=0;
      while(!finishp)
        {
          SDL_Event event;
          draw_point (player1->i, player1->j, 255);
          draw_point (player2->i, player2->j, 65025);
          /* Lee los siguientes movimientos de cada bot */
          read_cords (player1, &p[0][0], &p[0][1]);
          read_cords (player2, &p[1][0], &p[1][1]);
          /* Comprueba si alguien ha perdido */
          finishp |= lossp (player1, p[0][0], p[0][1]);
          finishp |= lossp (player2, p[1][0], p[1][1]);
          if (!finishp && p[0][0]==p[1][0] && p[0][1]==p[1][1])
            {
              player1->loses++;
              player2->loses++;
              finishp = 1;
            }
          /* Actualiza el mapa con los movimientos */
          move (player1, p[0][0], p[0][1]);
          move (player2, p[1][0], p[1][1]);
          turns++;
          /* Informa del ultimo movimiento de cada bot al otro */
          write_cords (player1, p[1][0], p[1][1]);
          write_cords (player2, p[0][0], p[0][1]);

          if (graphicsp)
            {
              /* Elimina procesos de la cola, y termina en caso de que el
                 usuario lo haya solicitado. */
              while( SDL_PollEvent( &event ) ){
                if (event.type == SDL_QUIT)
                  {
                    plays = current_play;
                    finishp = 1;
                  }
              }
              SDL_Flip (screen);
              SDL_Delay (delay);
            }
        }
      finish_player (player1);
      finish_player (player2);
    }

  printf ("Resumen:\n");
  printf ("    %s: %d/%d\n", player1->name, plays - player1->loses, plays);
  printf ("    %s: %d/%d\n", player2->name, plays - player2->loses, plays);
  printf ("\n");
  printf ("Un total de %d turnos, %f turnos de media por partida.\n", turns, (float)turns/plays);
  close_player (player1);
  close_player (player2);

  finalize_random();

  if (graphicsp)
    SDL_Quit ();

  return 0;
}