Случайные направления, без повтора .. (плохое описание) - PullRequest
0 голосов
/ 24 марта 2010

Привет, я собираю случайную модель генерации паттернов.

Пока мой код:

  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 ]

6 голосов
/ 24 марта 2010

Это зависит от того, что вы имеете в виду.

Если вы имеете в виду «не возвращаться к шагу, на котором я был раньше», тогда вы должны помнить направление последнего движения. То есть, если вы двигаетесь вверх, ваше следующее движение не может быть вниз.

Если вы имеете в виду «не возвращаться на место, на котором вы когда-либо были», тогда вам придется помнить каждое место, где вы были. Это может быть эффективно реализовано с помощью хеш-таблицы с использованием ключа с классом, представляющим координату с соответствующими функциями Equals / HashCode.

2 голосов
/ 24 марта 2010

Поскольку каждый квадрат соответствует пикселю, ваше координатное пространство должно быть конечным, чтобы вы могли отслеживать координаты, которые вы уже посетили.

Если есть соответствующая getP функция для определения, включен ли уже пиксель, вы можете просто использовать это.

1 голос
/ 24 марта 2010

Вы помните последнее направление и, используя random(1,3), выберите любое из оставшихся трех, а затем сохраните его как последнее.

0 голосов
/ 24 марта 2010

Не уверен, что этот подход будет работать.

Создайте новую переменную с именем lastRndTurn как int и назначьте ее после ваших операторов if. Затем добавьте новый цикл while после вашего int rndTurn = random(1, 4).

while (lastRndTurn == rndTurn)
{
    rndTurn = random(1, 4);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...