这次我们做一个小球的碰撞的游戏,规则是:按下添加按钮,窗口的中心部分会产生一个小球(刚开始默认为黑色),四个方向随机产生,发射小球,再次按下即产生两个小球。当小球碰到窗体边缘的时候会产生反弹,当两个小球接触时会产生碰撞,双方交换速度,向相反方向移动。我们可以选择相应的颜色来改变下一个发射的小球颜色。当按下清除可以清除屏幕上的小球,当按下添加则会继续产生小球。最后我们还添加了自动产生小球的功能,按下开关,在屏幕中间会定时产生小球。接下来,我们来展示代码部分。
public class Jframe {
private Ball[] arrayball = new Ball[100];
public static void main(String[] args) {
Jframe frame = new Jframe();
frame.showUI();
}
public void showUI() {
javax.swing.JFrame jf = new javax.swing.JFrame();
jf.setSize(1000, 1000);
jf.getContentPane().setBackground(Color.WHITE);
jf.setTitle("小球");
jf.setDefaultCloseOperation(3);
// 设置居中显示
jf.setLocationRelativeTo(null);
JPanel jp1 =new JPanel();
JButton jb1 = new JButton("添加");
jp1.add(jb1);
// jb1.setBounds(100,50, 40, 20);
JButton jb2 = new JButton("暂停");
jp1.add(jb2);
// jb1.setBounds(200,50, 40, 20);
JButton jb3 = new JButton("清除");
jp1.add(jb3);
// jb1.setBounds(300,50, 40, 20);
JButton jb4 = new JButton("自动添加");
jp1.add(jb4);
jf.add(jp1,BorderLayout.NORTH);
Mouse mouse = new Mouse();
Color[] color = {
Color.RED,Color.BLUE,Color.BLACK,Color.GREEN,Color.YELLOW};
for(int i=0;i<color.length;i++){
JButton jbu = new JButton();
jbu.setBackground(color[i]);
jbu.setPreferredSize(new Dimension(30, 30));
jp1.add(jbu);
jbu.addActionListener(mouse);
}
jb1.addActionListener(mouse);
jb2.addActionListener(mouse);
jb3.addActionListener(mouse);
jb4.addActionListener(mouse);
jf.addMouseListener(mouse);
jf.addMouseMotionListener(mouse);
BallJpanel cp = new BallJpanel();
cp.setBackground(Color.WHITE);
jf.add(cp,BorderLayout.CENTER);
jf.setVisible(true);
Graphics g = cp.getGraphics();
mouse.setcp(cp);
mouse.setg(g);
mouse.setarrayball(arrayb