【问题标题】:Assign a new random direction to data member that is different from the current in c++为与 C++ 中的当前不同的数据成员分配一个新的随机方向
【发布时间】:2014-11-17 14:21:23
【问题描述】:
class Child:public Parent{
public:
    enum Direction { Left, Right, Up, Down };
    Direction direction;
    void Update();            
private:
    int x,y;
    void ChangeDirection();
    void Draw();

};

我需要 Update() 函数调用 ChangeDirection()Draw() 来增加和减少 xy 我所做的当前方向的值。我的问题是 yx 不能是(-)值。

而且 ChangeDirection() 应该为方向数据分配一个随机方向,并且该方向必须与当前方向不同。 我能够以这种方式在同一 ChangeDirection() 函数中cout随机方向

Direction direction = static_cast<Direction>(rand() % 4);
cout << direction;

但有时它会再次打印相同的方向。现在我想要的是,方向的随机分配应该发生在 ChangeDirection() 成员函数中,不允许再次使用当前值,但它应该通过 void Draw(); 显示结果; strong> 成员函数,它增加或减少 xy 值而不让它成为 (-) 值(应该限制为 0)。 这就是我为此所做的。

if ( direction == 0 ){
    cout << "Right";
    x++;
}
else if (direction == 1 ){
    cout << "Down";
    y++;
}
else if (direction == 2 ){
    cout << "Up";
    y--;
}
else if (direction == 3 ){
    cout << "Left";
    x--;
}
Draw();

但它给出了 (-) 值。我该如何前进 ..

【问题讨论】:

  • 由于您没有对 x 和 y 进行任何限制,因此它们显然可以取任何值。
  • 但是我该怎么做呢?

标签: c++ class random assign non-repetitive


【解决方案1】:

由于您正在分配一个随机方向,因此有时分配的方向等于前一个方向是有意义的。尝试类似:

Direction direction = static_cast<Direction>((currentDirection + 1 + (rand() % 3) ) % 4);

确保你得到一个新的方向

编辑: 要回答问题的另一部分,您必须在递增或递减之前检查 x 和 y 的值,以确保它们在您当前使用的范围内。这是我所说的一个例子:

 if(x > 0){
   x--;
 } else {
 //do something else
 }

【讨论】:

  • 这真的很有帮助,x 和 y 的条件语句.. 但是分配随机方向有时仍然打印相似。我认为如果发生类似情况,也应该有条件再次指定方向..知道如何做到..?
  • 噢噢噢噢。我忘记了 rand() 可以返回 0。我已经编辑了我上面的帖子,以使用正确的方法来确保新值。
  • 太棒了!!现在工作正常。不过,如果我调用 20 次,我会发现它在两三个地方是相似的……没关系,因为我只想要它 5 次。无论如何,如果您有任何想法通过循环或其他东西进行过滤,以便我们可以再次分配,直到我们得到不同的,然后请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 2021-01-01
  • 2020-10-12
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多