算法可视化中的MVC

上节我们实现了小球动画,不过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);
    }
}


猜你喜欢

转载自blog.csdn.net/qq_41264674/article/details/80745997
今日推荐