Пример #1
0
int FollowTrace (fixed tracex, fixed tracey, long deltax, long deltay, int max)
{
  int tx,ty,otx,oty;
  long absdx,absdy,xstep,ystep;

  tx = tracex>>TILESHIFT;
  ty = tracey>>TILESHIFT;

  absdx=LABS(deltax);
  absdy=LABS(deltay);

  if (absdx>absdy)
  {
    ystep = (deltay<<8)/(absdx>>8);

    if (!ystep)
      ystep = deltay>0 ? 1 : -1;

    oty = (tracey+ystep)>>TILESHIFT;
    if (deltax>0)
    {
//###############
//
// step x by +1
//
//###############
      do
      {
	tx++;
	tracey+=ystep;
	ty = tracey>>TILESHIFT;

	if (ty!=oty)
	{
	  if (tilemap[tx-1][ty])
	  {
	    tile.x = tx-1;
	    tile.y = ty;
	    return 1;
	  }
	  oty = ty;
	}
	if (tilemap[tx][ty])
	{
	  tile.x = tx;
	  tile.y = ty;
	  return 1;
	}
      } while (--max);
      return 0;
    }
    else
    {
//###############
//
// step x by -1
//
//###############
      do
      {
Пример #2
0
DVECTOR xdvinit(double j, double incr, double n)
{
    long k;
    long num;
    DVECTOR x;

    if ((incr > 0.0 && j > n) || (incr < 0.0 && j < n)) {
	x = xdvnull();
	return x;
    }
    if (incr == 0.0) {
	num = (long)n;
	if (num <= 0) {
	    x = xdvnull();
	    return x;
	}
    } else {
	num = LABS((long)((n - j) / incr)) + 1;
    }
    
    /* memory allocate */
    x = xdvalloc(num);

    /* initailize data */
    for (k = 0; k < x->length; k++) {
	x->data[k] = j + (k * incr);
    }

    return x;
}