上节我们实现了小球动画,不过Main方法有点累赘,
这节我们来进行封装操作,我们来实现经典的MVC结构,Circle为我们的数据层,AlgoFrame为我们的视图层来负责显示相关所有的逻辑的逻辑,我们现在缺少一个控制层来将我们的数据层和视图层连接起来。
我们新建一个类AlgoVisualizer也就是我们的算法可视化器。这就是我们的控制层
import java.awt.*; public class AlgoVisualizer { private Circle[] circles; // 数据 private AlgoFrame frame; // 视图 public AlgoVisualizer(int sceneWidth, int sceneHeight, int N){//宽和高,小球个数 // 初始化数据 circles = new Circle[N]; int R = 50; for(int i = 0 ; i < N ; i ++ ) { int x = (int)(Math.random()*(sceneWidth-2*R)) + R; int y = (int)(Math.random()*(sceneHeight-2*R)) + R; int vx = (int)(Math.random()*11) - 5; int vy = (int)(Math.random()*11) - 5; circles[i] = new Circle(x, y, R, vx, vy); } // 初始化视图 EventQueue.invokeLater(() -> { frame = new AlgoFrame("Welcome", sceneWidth, sceneHeight); new Thread(() -> { run(); }).start(); }); } // 动画逻辑 private void run(){ while(true){ // 绘制数据 frame.render(circles); AlgoVisHelper.pause(20); // 更新数据 for(Circle circle: circles) circle.move(0, 0, frame.getCanvasWidth(), frame.getCanvasHeight()); } } }
public class Main { public static void main(String[] args) { int sceneWidth = 800; int sceneHeight = 800; int N = 20; AlgoVisualizer vis = new AlgoVisualizer(sceneWidth, sceneHeight, N); } }