bugfix> java > 投稿

私は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は2番目の行を埋めます。

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(円の最後の行)が円でスペースをいっぱいにしたことを認識し、最後の行がいっぱいになると、プログラムはこのプロセス全体をリセットして行1に戻ります。

また、このループを簡素化する方法はありますか?

編集:私はそのような単純なif文でそれを再起動する方法を見つけました:

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

回答 1 件
  • ここに私がそれをする方法があります:

    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 を実装させる  バックグラウンドで実行するために使用されます。今、あなたが知る必要がある唯一のことは、それを始める方法です。こちらをご覧ください。

    私はすべての情報を持っているわけではないので、それはあなたのニーズに完全には合わないかもしれませんが、良いスタートだと思います。

あなたの答え