0

キャンバス上にランダムな色と位置を持つ10個の長方形を表示するクラスを作成する必要があります。11に達すると、最初の長方形が新しいランダムな色と位置に置き換えられます。12番目のrectが2番目のボックスを置き換え、以下同様に続きます。これにはacm.jar、 http: //jtf.acm.org/javadoc/student/index.htmlを使用しています。

import acm.graphics.*;
import acm.program.*;
import java.awt.Color;
import java.util.Random;

public class Rect extends GraphicsProgram 
{
    public void run()
    {
        final int width = 800;
        final int height = 600;
        final int boxWidth = 50;
        final int maxBoxes = 10;

        this.setSize(width, height);
        Random random = new Random();              

        for(;;) {
            int x = random.nextInt(width-boxWidth);
            int y = random.nextInt(height-boxWidth);  
            Color c = new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));

                GRect r = new GRect(x, y, boxWidth, boxWidth);
                r.setFilled(true);
                r.setLocation(x, y);
                r.setFillColor(c);
                this.add(r);                   

                this.pause(100);

        }




    }
}

色をランダムにする方法はすでに理解していましたが、ボックスを古いものに置き換える方法がわかりません。

編集::: - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------

私は下の人の助けを借りてそれをうまく動かすことができました。新しいforループは次のようになります。

for(;;) {
            int x = random.nextInt(width-boxWidth);
            int y = random.nextInt(height-boxWidth);  
            Color c = new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));

                GRect r = new GRect(boxWidth, boxWidth);
                r.setFilled(true);
                r.setLocation(x, y);
                r.setFillColor(c);                
                add(r, x, y);

                int n = getElementCount();
                if (n>maxBoxes)
                {
                    remove(getElement(0));
                }

                this.pause(100);

        }

私が理解していないことの1つは、remove(getElement(0))が機能する理由です。削除された後、要素はどのようにインデックスを変更しますか?0〜9の要素が10個あり、element(0)を削除した場合、他の要素がそのインデックスを変更するのはなぜですか?

4

2 に答える 2

1

これは本当に宿題のように見えるので、私はあなたのためにそれをしませんが、いくつかの手がかりを与えます。

getElementCount()メソッドを使用して、フレーム内の現在の長方形の数を知ることができます。

GObjectのリストを作成し、作成時に長方形を入力します。10に達すると、プロセスは次のようになります。

  • remove(GObject gobj)を使用して画面から長方形を削除します
  • 最初の要素を削除し、リストの最後に追加します。

そして、ここにあなたがいます:)

于 2012-11-12T15:35:38.760 に答える
1

これまでに描画した長方形のリストを保存する必要があります。新しい四角形を追加するたびに、リストがすでに 10 個の四角形になっている場合は、最初の四角形を削除して新しい四角形を追加します。次に、画面のちらつきを防ぐためにダブルバッファリングを使用して、ディスプレイを更新するたびにすべての長方形を再描画する必要があります。

于 2012-11-12T15:33:53.093 に答える