0

嘿,所以我正在拼凑一个随机模式生成的东西。

到目前为止我的代码:

  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);
  }

我的问题是,我将如何让代码不返回自身?

例如,代码说“向左走”,但通过它的下一个循环说“向右走”,我怎样才能阻止它?

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

人民干杯!

4

4 回答 4

6

这取决于你的意思。

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

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

于 2010-03-24T10:41:48.357 回答
2

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

如果有相应的getP函数来确定一个像素是否已经打开,你可以使用它。

于 2010-03-24T10:42:21.710 回答
1

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

于 2010-03-24T10:41:30.060 回答
-2

不确定这种方法是否可行。

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

while (lastRndTurn == rndTurn)
{
    rndTurn = random(1, 4);
}
于 2010-03-24T10:44:01.910 回答