package cn_ed;
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
/**
- 画小球
- @author Administrator
*/
public class BallJPanel extends JPanel{
int t=300;
int c = 200;
/**存储小球的集合*/
List<Ball> ballList = new ArrayList<Ball>();
/**小球的数量*/
private int ballNumber = 30;
/**构造方法*/
public BallJPanel() {
addBall();
}
int[] a = new int[300];//300个x坐标
int[] b = new int[300];//300个y坐标
/**产生小球的方法*/
public void addBall() {
for (int i = 0; i < ballNumber; i++) {
//随机产生100个小球
int x = (int) (Math.random()*BallMain.SCREEN_WIDTH);
int y = (int) (Math.random()*BallMain.SCREEN_HEIGHT);
//System.out.println("x = :" + x + ",y = " + y);
int position = (int) (Math.random()*4);//0,1,2,3
int d = (int) (Math.random()*60 + 1);
int speed = (int) (Math.random()*100 + 1);;
//颜色的话, 三原色 R G B
int red = (int) (Math.random()*255 + 1) ;
int green = (int) (Math.random()*255 + 1);
int blue = (int) (Math.random()*255 + 1);
Color ballColor = new Color(red, green, blue);
Ball b = new Ball(x, y, position, d, speed, ballColor);
//将小球添加到集合中
ballList.add(b);
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
// TODO Auto-generated method stub
//修改底部背景色
this.setBackground(Color.black);
g.setColor(Color.red);
g.fillOval(t, c, 100, 50);
g.setColor(Color.white);
g.fillOval(t+10, c+10, 20, 10);
g.setColor(Color.white);
g.fillOval(t+25, c+20, 20, 10);
g.setColor(Color.white);
g.fillOval(t+65, c+30, 20, 10);
g.setColor(Color.white);
g.fillOval(t+35, c+50, 30,40);
g.setColor(Color.white);
g.setColor(Color.blue);
g.fillOval(t+200, c+20, 100, 50);
g.setColor(Color.white);
g.fillOval(t+220, c+20, 20, 10);
g.setColor(Color.white);
g.fillOval(t+265, c+30, 20, 10);
g.setColor(Color.white);
g.fillOval(t+265, c+40, 20, 10);
g.setColor(Color.white);
g.fillOval(t+235, c+60, 30,40);
g.setColor(Color.pink);
g.fillOval(t-235, c+120, 100, 50);
g.setColor(Color.white);
g.fillOval(t-170, c+130, 20, 10);
g.setColor(Color.white);
g.fillOval(t-185, c+130, 20, 10);
g.setColor(Color.white);
g.fillOval(t-195, c+150, 20, 10);
g.setColor(Color.white);
g.fillOval(t-200, c+160, 30,40);
g.setColor(Color.green);
g.fillOval(t-235, c-100, 100, 50);
g.setColor(Color.white);
g.fillOval(t-170, c-80, 20, 10);
g.setColor(Color.white);
g.fillOval(t-185, c-60, 20, 10);
g.setColor(Color.white);
g.fillOval(t-195, c-80, 20, 10);
g.setColor(Color.white);
g.fillOval(t-200, c-50, 30,40);
g.fillOval(t+1000, c, 500, 300);
for (int i = 0; i < ballList.size(); i++) {
Ball ball = ballList.get(i);
ball.drawBall(g);
}
}
/**小球运动*/
public void startBalls() {
//启动线程 ------匿名内部类
new Thread() {
public void run() {
while (true) {
//1.遍历小球集合
for (int i = 0; i < ballList.size(); i++) {
//2.取出每一个小球
Ball b = ballList.get(i);
//3.让每一个小球进行移动
b.ballMove();
}
for (int i = 0; i < ballList.size(); i++) {
//先取第一个小球
Ball b1 = ballList.get(i);
for (int j = i + 1; j < ballList.size(); j++) {
Ball b2 = ballList.get(j);
BallAndBall bab = new BallAndBall();
//bab.ballCrach(b1, b2);//小球的碰撞
if (bab.isBallCrach(b1, b2)) {
if (b1.d >= b2.d) {
b1.d += b2.d/3;
ballList.remove(b2);
break;
}else if(b2.d >= b1.d) {
b2.d += b1.d/3;
ballList.remove(b1);
break;
}
}
}
}
repaint();//重绘
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
}
}