效果展示:
由于gif压缩和调整比列来满足5M以下的大小,效果有点变形
代码:
项目结构:
Ball类:
package com.GUI.Ball;
import java.awt.*;
import java.util.Random;
public class Ball {
int x;//球在JPanel中的x位置
int y;//球在JPanel中的y位置
int d;//球的大小--直径
//颜色的rgb和透明度a
int r;
int g;
int b;
int a;
Color c;
int dx;//小球x轴的偏移量
int dy;//小球y轴的偏移量
public Ball() {
init();
}
private void init() {
randomBall();
}
//随机生成球的位置大小颜色
private void randomBall() {
Random random = new Random();
x=random.nextInt(1000);
y=random.nextInt(700);
d=random.nextInt(200);
r=random.nextInt(251);//rgba值范围(0-250)
g=random.nextInt(251);
b=random.nextInt(251);
a=random.nextInt(251);
c=new Color(r,g,b,a);
dx=random.nextInt(30)-15;//偏移量(-15,+15)
dy=random.nextInt(30)-15;
}
//根据偏移量来改变x,y
public void ball_move() {
x+=dx;
y+=dy;
}
}
GameStart类:
package com.GUI.Ball;
import javax.swing.*;
public class GameStart {
public static void main(String[] args) {
JFrame jFrame = new JFrame();
jFrame.setSize(1000,700);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setLocationRelativeTo(null);
jFrame.setResizable(false);
jFrame.add(new GamePanel());
jFrame.setVisible(true);
}
}
GamePanel类:
package com.GUI.Ball;
import javax.swing.*;
import java.awt.*;
public class GamePanel extends JPanel implements Runnable{
int length=500;//球的个数
Ball[] balls=new Ball[length];
Thread t;
public GamePanel() {
//进行500个球的实例创建
for (int i = 0; i <length ; i++) {
balls[i]=new Ball();
}
//开始线程
t=new Thread(this);
t.start();
}
//绘图
@Override
public void paint(Graphics g) {
super.paint(g);
//开始画球,主要用g.fillOval
for (int i = 0; i <length ; i++) {
int x=balls[i].x;
int y=balls[i].y;
int d=balls[i].d;
g.setColor(balls[i].c);
g.fillOval(x,y,d,d);//实心球
balls[i].ball_move();
}
}
@Override
public void run() {
while (true) {
try {
//进行重绘
repaint();
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}