0

我正在尝试编写一个显示 10 个随机颜色和随机定位的框的程序,但根据分配,“只有最后 10 个随机框将显示在屏幕上。即当第 11 个框被绘制时,删除绘制的第 1 个盒子。绘制第 12 个盒子时,移除第 2 个盒子,以此类推”。

我不知道该怎么做,因为我能得到的最远的是使用 for 循环来显示 10 个随机框。

这是我到目前为止所拥有的:

package acm.graphics;

import acm.graphics.*;
import acm.program.*;
import java.awt.*;
import java.util.Random;
import javax.swing.*;

public class ShootingStar 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 i = 0; i<=maxBoxes ;i++) {

            float r = random.nextFloat();
            float b = random.nextFloat();
            float g = random.nextFloat();
            Color randColor = new Color(r,g,b);

            GRect r1 = new GRect(boxWidth, boxWidth);
            r1.setFilled(true);
            r1.setColor(randColor);

            GPoint x = new GPoint(random.nextInt(width), 
                                random.nextInt(height));

            add(r1, x);

        }

        this.pause(100); 
    }
}

请任何提示或建议将不胜感激

4

2 回答 2

0

一种方法是:

public class Test {
private int boxWidth, boxHeight = 50;
private GRect[] rects;
private int first;//keep track of oldest rectangle

public Test()
{
    this.rects = new GRect[10];
    this.first = 0;
}

void drawRects()
{
    //for each rectangle, draw it
}

void addRect()
{
    this.rects[first] = new GRect(boxWidth, boxHeight);
    first++;
    first = first % 10; //keeps it within 0-9 range
}

 }

每当需要添加新矩形时,只需调用 addRect() ,新矩形将替换最旧的矩形。

于 2013-11-12T04:04:52.980 回答
0

你只迭代十次,只产生十个盒子,对吧?让我们从那里开始。maxBoxes 应该大于 10(我不知道你想要做什么的细节,所以我不能说 maxBoxes 应该是什么)

基本上,您希望将这些框的信息存储在某处,然后将最后十个项目取出。您可以为此使用数组数组。如果您要推到主阵列的末尾,那么您只需弹出最后十个,然后绘制框。

于 2013-11-12T01:53:29.477 回答