示例#1
0
void collapse (int x, int y)
{
  assert (cboard[x*ydim+y] > 3);
  TRACEINW("(x=%d, y=%d)", x, y);
  add_grains_on_square (x,y,-4);
  add_grains_on_square (x+1,y,1);
  add_grains_on_square (x-1,y,1);
  add_grains_on_square (x,y+1,1);
  add_grains_on_square (x,y-1,1);
  if (nbsteps == ULLONG_MAX) {
    cantcontinue("ERROR: Max number of steps UINTMAX = %llu reached. I must stop.\n", ULLONG_MAX);
  }
  nbsteps++;
  TRACEOUT;
}
示例#2
0
void init_board (int some_dim)
{
  TRACEIN;
  assert (cboard == NULL);
  assert (some_dim <= MAX_ALLOWED_DIM);
  if (board_inited != false) {
    cantcontinue ("ERROR: %s: board was already inited?!\n", __func__);
  }
  init_waitlist ();
  realloc_memmatrix (some_dim, some_dim, 0, 0, UNUSEDSQ); /* set board vars properly. No copy made since board was not inited */
  xdim = ydim = some_dim;
  xdepl = ydepl = some_dim / 2;
  xmin = xmax = 0; ymin = ymax = 0; diam = 1;
  cboard = memmatrix(xdepl,ydepl);
  mass = 0; nbsteps = 0; count1 = count2 = count3 = 0;
  area = count0 = 0;		/* init count0 */
  add_grains_on_square(0,0,0);	/* set orig as "used" */
  if (from_snapshot_mode) {
    init_board_contents_from_snapshot (snapshot_source_file_arg, false);
#ifdef TRACE
    display_the_board (stdout, true);
#endif /* TRACE */
  }
  if (anim_level > 0) display_initial_board ();
  TRACESIGNEDMESS ("xdim=%d ydim=%d", xdim, ydim);
  TRACEOUT;
}
示例#3
0
void add_grain_on_random_square (int radius, int seed)
{
  TRACEINW("(radius=%d seed=%d)", radius, seed);
  srandom(seed);
  int random_x = random_number_in_range(-radius, radius);
  int random_y = random_number_in_range(-radius, radius);
  TRACEMESS("Add 1 grain on (%d,%d)", random_x, random_y);
  add_grains_on_square(random_x, random_y, 1);
  TRACEOUT;
}
示例#4
0
void add_grains_on_origin (int delta)
{
  assert ((delta < 0) || (mass <= INT_MAX - delta));
  add_grains_on_square (0, 0, delta);
}