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)、残りの3つのうちのいずれかを選択し、それを最後の方向として保存します。

于 2010-03-24T10:41:30.060 に答える
-2

このアプローチが機能するかどうかはわかりません。

lastRndTurnという新しい変数をintとして作成し、これをifステートメントの後に割り当てます。次に、の後に新しいwhileループを追加しますint rndTurn = random(1, 4)

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