本次我们主要实现了三个功能:
1,小球碰壁反弹、小球相互碰撞反弹。
2,使用缓冲绘图解决闪屏问题。
3,增加暂停按钮,实现界面动、停控制。
一,创建一个类ShowUI实现窗体界面
package com.yzd0126.BallsRebound;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ShowUI extends JFrame{
//展示界面
public void UI() {
this.setSize(800,600);//设置界面大小
this.setTitle("球球碰撞");
this.setLocationRelativeTo(null);//界面位于屏幕中央
this.setLayout(new FlowLayout());//使用流式布局
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出时关闭
this.setVisible(true);//界面设置可见
}
//主函数 程序入口
public static void main(String[] args) {
ShowUI showui = new ShowUI();
showui.UI();
}
}
二,创建小球类Ball
1,在创建完Ball类之后,在界面类ShowUI中创建一个全局用来保存所有小球的动态数组balls。
//全局用来存储小球对象的数组
List<Ball> balls = new ArrayList<>();
之所以将ArrayList向上转型为List,是因为这样写体现了面向接口编程的思想。List是一个接口,ArrayList是实现List接口的一个具体实现类,能够降低程序的耦合度,当我们发现代码使用的集合不正确应该使用的是LinkedList时,只需要修改以下一行代码就可:
List<Ball> balls = new LinkedList<>();
因为之后所有的操作都是针对List这个接口定义的方法,而与实现类的独特方法无关,如果我们一开始直接使用ArrayList类型而不向上转型,那么之后如果涉及到ArrayList类独特的方法时需要修改的地方比较多,不便于程序的维护。
2,在Ball类中定义每个小球需要的属性以及方法
关于运动小球的属性有:小球外接圆左上角坐标lx、ly,小球速度vx、vy,小球直径R、小球颜色color,小球球心rx、ry,画笔参数g。
关于运动小球的方法有:
2.1构造方法传参,随机生成小球位置、速度、颜色。
//构造函数 传参
public Ball(Graphics g,List balls) {
this.g=g;
this.balls=balls;
Random random = new Random();
//随机产生小球坐标 速度 颜色
lx=random.nextInt(600);
ly=random.nextInt(200)+50;
vx=(float) (random.nextInt(

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



