首页 > 解决方案 > 交通模拟 Java 对面

问题描述

我正在研究照片中显示的java项目,所以我遇到了汽车在路上行驶的问题,它从左到右工作,但我需要从左到右的3个侧面和另一个从右到右的3个侧面左边我也想向下移动按钮以绿色显示。

那么如何解决呢?

编码:

    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    public class Traffic implements ActionListener, Runnable {
        
        JFrame frame= new JFrame("Traffic Simulation");
        Road road = new Road();
        //south container
        JButton start=new JButton("Start");
        JButton stop=new JButton("stop");
        JLabel result = new JLabel("result:0");
        Container south=new Container();
        
        //west container
        JButton semi=new JButton("Add semi");
        JButton suv=new JButton("Add SUV");
        JButton sports=new JButton("Add Sports");
        
        Container west=new Container();
        
        //east container 
        
        JButton truck=new JButton("Add Truck");
        JButton motorbike=new JButton("Add motorbike");
        JButton car=new JButton("Add car");
        
        Container east=new Container();
        
        boolean running=false;
        int carcount =0;
        long startTime = 0;
        
        public Traffic() {
            frame.setSize(2000,1000);
            frame.setLayout(new BorderLayout());
            frame.add(road, BorderLayout.CENTER);
            
            south.setLayout(new GridLayout(1, 3)); 
            //adding actionlistener to star/stop buttons
            south.add(start);
            start.addActionListener(this);
            south.add(stop);
            stop.addActionListener(this);
            south.add(result);
            frame.add(south, BorderLayout.SOUTH);
            
            
            west.setLayout(new GridLayout(6, 1));                              // Button 
            // adding actionListener to car buttons
            west.add(semi);
            semi.addActionListener(this); 
            west.add(suv);
            suv.addActionListener(this);
            west.add(sports);
            sports.addActionListener(this);
            
            frame.add(east, BorderLayout.WEST);
            
            east.setLayout(new GridLayout(6, 1));                              // Button 
            // adding actionListener to car buttons
            sports.addActionListener(this);
            east.add(truck);
            sports.addActionListener(this);
            east.add(motorbike);
            sports.addActionListener(this);
            east.add(car);
            sports.addActionListener(this);
            
            frame.add(west, BorderLayout.EAST);
            
            
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            
            frame.repaint();
        }
        public static void main(String[] args) {
            new Traffic();
             
        }
        
        @Override
        public void actionPerformed(ActionEvent event) {
            if (event.getSource().equals(start)) {
                if(running == false) {
                    running=true;
                    road.resetcarcount();
                    startTime = System.currentTimeMillis();
                    Thread t=new Thread(this);
                    t.start();
                }
                
            }
            if (event.getSource().equals(stop)) {
                running=false;
            }
            
            if (event.getSource().equals(semi)) {
                Semi semi= new Semi(0, 20);
                road.addCar(semi);
                for (int x=0;x<road.ROAD_WIDTH; x=x+20) {
                    for(int y=20;y<600;y=y+150) { 
                        semi.setx(x);
                        semi.sety(y);
                        if(road.collision(x, y, semi)==false) {
                            frame.repaint();
                            return;
                        }
                    }
                    
                }
            }
            if (event.getSource().equals(suv)) {
                SUV suv= new SUV (0, 20);
                road.addCar(suv);
                for (int x=0;x<road.ROAD_WIDTH; x=x+40) {
                    for(int y=20;y<600;y=y+150) { 
                        suv.setx(x);
                        suv.sety(y);
                        if(road.collision(x, y, suv)==false) {
                            frame.repaint();
                            return;
                        }
                    }
                    
                }
            }
            if (event.getSource().equals(sports)) {
                Sports sports= new Sports (0, 20);
                road.addCar(sports);
                for (int x=0;x<road.ROAD_WIDTH; x=x+20) {
                    for(int y=20;y<600;y=y+150) { 
                        sports.setx(x);
                        sports.sety(y);
                        if(road.collision(x, y, sports)==false) {
                            frame.repaint();
                            return;
                        }
                    }
                    
                }
            }
        }
        @Override
        public void run() {
            while(running==true) {
                road.step();
                carcount =road.getCarCount();
                double resultCalc= carcount / (1000 * (double)(System.currentTimeMillis()) - startTime);
                result.setText("result:"+resultCalc);
                frame.repaint();
                try {
                    Thread.sleep(100);
                }catch(Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
    }

程序接口

标签: javaswing

解决方案


我已经解决了这个问题,但我目前的问题是车辆从一侧移动,我想拆分它


推荐阅读