C ++ - 如何让移动点连续循环?

时间:2017-01-28 02:26:55

标签: c++ oop

我无法让我的移动点程序正常工作。我有一个程序,点的位置像往常一样向右移动,但是我如何让它们循环回来,所以看起来它们不断移动而不是移出页面?我需要编辑以实现此目的的代码块如下。我希望有人可以提前帮助并再次感谢!

void advanceDots(XPoint dots[], unsigned num_dots, XWindowAttributes &w){
  int s = num_dots;
  for(s = 0; s < num_dots; s++){
    if(s < num_dots){
        dots[s].x++;
    }
  }
}

2 个答案:

答案 0 :(得分:3)

如果您当前正在“向左移动”而非“向右移动”,则需要另一个变量来跟踪。然后当你碰到边界时交换。

这样的事情:

bool isMovingLeft = false;

void advanceDots(XPoint dots[], unsigned num_dots, XWindowAttributes &w)
{
  if (isMovingLeft && (dots[0].x <= 0))
  {
      isMovingLeft = false;
  }
  else if (!isMovingLeft && dots[num_dots-1] >= w.width)
  {
      isMovingLeft = true;
  }

  int increment = isMovingLeft ? -1 : 1;
  int s = num_dots;
  for(s = 0; s < num_dots; s++)
  {
      dots[s].x += increment;      
  }
}

答案 1 :(得分:-1)

通常情况下,某个位置存在某种边界。我将假设它在XWindowAttributes中只是为了给你一个例子:

要让点“回到”开头而不是“离开页面”,你可以像这样设置它们:

//I dont know the structure of XWindowAttributes so i will define one just for the example!

struct XWindowAttributes
{
    int x_size; // the maximal size of the window in the x direction
};

void advanceDots(XPoint dots[], unsigned num_dots, XWindowAttributes &w)
{
    for(int s = 0; s < num_dots; s++)
    {
        XPoint& dot = dots[s];
        dots.x++;

        if(dots.x >= w.x_size)
        {
            dots.x = 0;
        }
    }
}