java - 交通模拟 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();
}
}
}
}
解决方案
我已经解决了这个问题,但我目前的问题是车辆从一侧移动,我想拆分它
推荐阅读
- javascript - 我有表格,我想在 excel 中导出表格数据
- angular - Angular 8 PWA 资产组离线无法正常工作
- python - Django 数据库设计改进
- html - CSS - 使用变换:翻译使黑色边框变成灰色
- android - CoordinatorLayout 导致下一个片段底部切出/超出屏幕
- javascript - 如何创建函数以在 1 秒后执行另一个函数多次
- css - 如何处理在 bs4 中溢出容器的按钮?
- java - 在 HttpSession 中调用 setAttribute() 时遇到 java.lang.IllegalStateException: null
- c++ - While 循环不检查或条件
- azure-devops - 如何指定在 Mono-Repo 中为 azure-pipelines.yml 构建包的路径?