Как сбросить цикл for, а также упростить его? - PullRequest
0 голосов
/ 25 мая 2018

скажем, у меня есть 4 переменные:

int counter = 0;
int counter2 = -6;
int counter3 = -12;
int counter4 = -18;

Эти 4 переменные увеличиваются в определенном операторе if, который запускается время от времени как таковой:

if (such and such)
{
    counter++;
    counter2++;
    counter3++;
    counter4++;
}

, и в порядке их отрисовкикруги вокруг экрана в строках, поэтому counter рисует круги в первом ряду, и как только этот ряд заполняется, counter2 заполняет второй ряд и так далее:

for (int i = 0; i < counter; i++) {
    ellipse(ScoreX+ i * 80, 40, BallSize, BallSize);
  }
  for (int j = 0; j < counter2; j++)
  {
    ellipse(ScoreX + j * 80, 120, BallSize, BallSize);
  }
for (int k = 0; k < counter3; k++)
  {
    ellipse(ScoreX + k * 80, 200, BallSize, BallSize);
  }
for (int l = 0; l < counter4; l++)
  {
    ellipse(ScoreX + l * 80, 280, BallSize, BallSize);
  }

Моя проблема в том, что, как только кружки былинарисованный по всему экрану, я хочу, чтобы весь этот процесс сбрасывался и продолжался до тех пор, пока я не закрою программу вручную.

Под этим я подразумеваю, что программа будет знать, что counter4 (последний ряд кругов) заполнил пространство кружками, и как только последний ряд будет заполнен, программа сбрасывает весь этот процесс.вернуться к заполнению первой строки.

Кроме того, есть ли способ упростить этот цикл?

РЕДАКТИРОВАТЬ: я нашел способ перезапустить его с помощью простого оператора if как такового:

if (counter4 == 7)
  {
    counter = 0;
    counter2 = -6;
    counter3 = -12;
    counter4 = -18;
  }

1 Ответ

0 голосов
/ 25 мая 2018

Вот как я бы это сделал:

public class drawCircles implements Runnable{ //To run it in background

private boolean running; //This variable is used to know when thread should be stopped
private int counter = 0; //Here are your counters
private int counter2 = -6;
private int counter3 = -12;
private int counter4 = -18;
private int BallSize;
private int ScoreX;

public drawCircles(int _BallSize, int _ScoreX)
{
    running = true;
    BallSize = _BallSize;
    ScoreX = _ScoreX;
}

private void draw(int counter, int value)
{
    for (int i = 0; i < counter; i++)
    {
        ellipse(ScoreX + i * 80, value, BallSize, BallSize);
    }
}

public void run()
{
    while (running)
    {
        draw(counter, 40);
        draw(counter2, 120);
        draw(counter3, 200);
        draw(counter4, 280);
    }
}

public void terminate()
{
    this.running = false;
}

}

Вы можете позвонить terminate(), когда окно вот-вот закроется, чтобы завершить thread.

Я такжепоместите ваш цикл в функцию, чтобы избежать дублирования кода.Просто отправьте нужный вам счетчик, а также значение, которое меняется (я не знаю, для чего это используется, поэтому я назвал его value в коде).

В случае, если вам нужно изменитьнапример, счетчики или любые другие значения, содержащиеся в DrawCircles,, когда запускаются операторы if, просто объявите setters.

. Реализация этого класса Runnable используется для его запуска в фоновом режиме.Единственное, что вам нужно знать сейчас, это как начать.См. здесь .

Это может не совсем соответствовать вашим потребностям, поскольку у меня нет всей информации, но я думаю, что это хорошее начало.

...