2010-03-24 3 views
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); 
    } 

Мой вопрос, как бы я идти о получении кода не возвращаться на себя?

например. Код говорит «Go Left», но следующий цикл через него говорит «Go Right», как я могу остановить это?

ПРИМЕЧАНИЕ: setP включает определенный пиксель.

Приветствия народам!

ответ

-2

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

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

while (lastRndTurn == rndTurn) 
{ 
    rndTurn = random(1, 4); 
} 
+0

Именно то, что я искал! –

+0

За исключением того, что случайный генератор может появляться с «lastRndTurn» несколько раз подряд. Не то, чтобы это имело бы значение, пока вы ждете 25 мс после каждого поворота ... – sbi

+2

Хотя это будет работать, как правило, не является хорошей практикой для грубой силы приемлемого значения. Я думаю, что решение ниже намного лучше. Сохраните последнее движение (скажем, 2, вверх) как целое число. Создайте массив и со следующим циклом добавьте числа 1 2 3 4, но только если число не совпадает с последним. Тогда сделайте случайное на этом. Вам придется отменить ответ. – NibblyPig

1

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

6

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

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

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

+2

Также вам нужно будет реализовать обратную трассировку, поскольку там может наступить точка, где вы не можете двигаться нигде. – Yacoby

2

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

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

Смежные вопросы