随机指示,无重复..(错误描述)

时间:2010-03-24 10:39:10

标签: c# c arduino

嘿那里,所以我把一个随机模式生成的东西拼凑起来。

到目前为止我的代码:

  int permutes = 100;
  int y = 31;
  int x = 63;

  while (permutes > 0) {
    int rndTurn = random(1, 4);

    if (rndTurn == 1) { y = y - 1; } //go up
    if (rndTurn == 2) { y = y + 1; } //go down
    if (rndTurn == 3) { x = x - 1; } //go right
    if (rndTurn == 4) { x = x + 1; } //go left

    setP(x, y, 1);
    delay(250);
  }

我的问题是,我如何才能让代码不再回归?

e.g。代码说“向左走”,但下一个循环说“走右”,我怎么能阻止它呢?

注意:setP会打开一个特定的像素。

干杯!

4 个答案:

答案 0 :(得分:6)

这取决于你的意思。

如果你的意思是“避免回到我以前最常做的一步”那么你必须记住最后一次运动的方向。也就是说,如果你向上移动你的下一个动作就不能失败。

如果你的意思是“避免回到曾经的某个地方”,那么你将不得不记住你曾经去过的每一个地方。这可以使用哈希表有效地实现,该哈希表使用具有表示具有适当的Equals / HashCode函数的坐标的类的键。

答案 1 :(得分:2)

由于每个方块对应一个像素,因此您的坐标空间必须是有限的,因此您可以跟踪已经访问过的坐标。

如果有相应的getP函数来确定某个像素是否已经开启,那么您可以使用它。

答案 2 :(得分:1)

你记得最后一个方向,并使用random(1,3)选择其余三个中的任何一个,然后将其存储为最后一个。

答案 3 :(得分:-2)

不确定这种方法是否有效。

创建一个名为lastRndTurn的新变量作为int,并在if语句之后赋值。 然后在int rndTurn = random(1, 4)

之后添加一个新的while循环
while (lastRndTurn == rndTurn)
{
    rndTurn = random(1, 4);
}