gpt4 book ai didi

java - 我如何使用数组制作随机圆圈

转载 作者:行者123 更新时间:2023-11-30 07:12:22 25 4
gpt4 key购买 nike

我一直在做一项学校作业,老师要我们在 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) {
}
}

最佳答案

您的问题是您试图使用 circle 变量进行绘制,这是一个您从未为其分配有效引用的变量。

一个解决方案是通过 circle = new Circle(...) 给它一个有效的引用,但话说回来,我会告诉你忽略它,因为你甚至不应该使用可变圆。摆脱它。您要做的是使用您的 circles 数组——这就是您应该在 paintComponent 方法中绘制的内容。在 paintComponent 内部使用 for 循环并遍历数组绘制数组包含的每个圆形项。

关于java - 我如何使用数组制作随机圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20450271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com