当前位置: 首页 > 知识库问答 >
问题:

如何使用数组做随机圆

杨选
2023-03-14

我一直在做一个学校作业,老师想让我们在JPanel上出现7个圆圈,然后向下移动。一旦一个圆到达底部,就应该创建一个新的圆来替换到达JPanel底部的圆。我决定用一个数组继续做随机圈,但我不能让它正常工作。我使用for循环用半径和颜色随机的圆填充数组。代码可以编译,但当我运行它时,我得到一个异常。我很难让阵列正常工作。我不确定的另一件事是如何绘制圆圈,以便它们在JPanel中有空间。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.Random;

public class keyExample extends JPanel implements ActionListener, KeyListener {

    private Circle[] circles = new Circle[7];

    Timer t = new Timer(5, this);
//current x and y
    double x = 150, y = 200;
    double changeX = 0, changeY = 0;
    private Circle;
    private int circlex = 0, circley = 0; // makes initial starting point of circles 0
    private javax.swing.Timer timer2;

    public keyExample() {

        t.start();
        addKeyListener(this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(false);


        }

        timer2 = new javax.swing.Timer(33, new MoveListener());
        timer2.start();

    }

    public void NewCircle() {
        Random colors = new Random();
        Color color = new Color(colors.nextInt(256), colors.nextInt(256), colors.nextInt(256));

        Random num = new Random();
        int radius = num.nextInt(45);

        for (int i = 0; i < circles.length; i++) {
            circles[i] = new Circle(circlex, circley, radius, color);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLUE);
        g2.fill(new Rectangle2D.Double(x, y, 40, 40));
        NewCircle();
        for (int i = 0; i < circles.length; i++)
        circles[i].fill(g);

    }

    public void actionPerformed(ActionEvent e) {
        repaint();
        x += changeX;
        y += changeY;
        changeX = 0;
        changeY = 0;

    }

    public void up() {
        if (y != 0) {
            changeY = -3.5;
            changeX = 0;
        }
    }

    public void down() {
        if (y <= 350) {
            changeY = 3.5;
            changeX = 0;

        }
    }

    public void left() {
        if (x >= 0) {
            changeX = -3.5;
            changeY = 0;
        }
    }

    public void right() {
        if (x <= 550) {
            changeX = 3.5;
            changeY = 0;
        }
    }

    private class MoveListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {

            repaint();
            Random speed = new Random();
            int s = speed.nextInt(8);
            circle.move(0, s);
        }
    }

    public void keyPressed(KeyEvent e) {
        int code = e.getKeyCode();
        if (code == KeyEvent.VK_UP) {
            up();
        }
        if (code == KeyEvent.VK_DOWN) {
            down();
        }
        if (code == KeyEvent.VK_RIGHT) {
            right();
        }
        if (code == KeyEvent.VK_LEFT) {
            left();
        }
    }

    public void keyTyped(KeyEvent e) {
    }

    public void keyReleased(KeyEvent e) {
    }
}

共有1个答案

申嘉慕
2023-03-14

你的问题是你试图用circle变量来绘制,这个变量你从来没有为它分配过有效的引用。

一个解决方案是通过Circle=new Circle(...)给它一个有效的引用,但是话虽如此,我还是告诉您忽略它,因为您甚至不应该使用变量Circle。把它处理掉就行了。您要做的是使用circles数组--这是您应该在paintComponent方法中绘制的内容。在paintComponent中使用一个for循环,并遍历数组,绘制数组中包含的每个循环项。

 类似资料:
  • 问题内容: 我有一个像这样的数组: 如何将其随机/随机播放? 问题答案: 实际无偏混洗算法是Fisher-Yates(aka Knuth)。

  • 我正在尝试编写一个程序,打印一个2d数组,其中包含100-10000范围内的随机数,并打印出数组中的最大值、平均值和最小值。该程序将询问用户行数和列数,并在该数组中打印随机数。 这是我的代码:

  • 问题内容: 我正在运行一个网站,并且有一个计分系统,可为您提供玩游戏次数的积分。 它使用散列来证明http请求评分的完整性,因此用户无法更改任何内容,但是正如我担心的那样,有人发现他们不需要更改它,他们只需要获得高分并复制http请求,标头和所有。 以前,我被禁止防御此攻击,因为它被认为不太可能。但是,既然已经发生,我可以。http请求源自Flash游戏,然后由php验证,然后php将其输入数据库

  • 在…方面 在我的代码中,我试图放入一个我之前生成的随机数,但当applet启动时,当我按下按钮时,它会给我一个错误,我想把代码放入所有的按钮,因为我不想要重复的数字,我想要每个按钮随机生成的数字。我希望你能帮助我。 我得到的错误是线程“AWT-EventQueue-1”java.lang.IndexOutOfBoundsException:index:0,size:0中的异常

  • 问题内容: 我需要随机调整以下数组: 问题答案: 可以使用如下代码实现:

  • 问题内容: 我需要使用构造函数创建一个数组,添加一个将数组打印为序列的方法,以及一个使用double类型的随机数填充数组的方法。 到目前为止,这是我所做的: 我正在努力弄清楚如何用在randomFill方法中生成的随机数填充数组。谢谢! 问题答案: 您需要添加逻辑以使用 randomFill 方法将随机值分配给double []数组。 更改 至 然后,您可以调用方法,包括main方法中的list(