模拟道路交通简单练习(类)

Java交通模拟系统
本文介绍了一个使用Java实现的交通模拟系统,包括Car类用于表示车辆,Road类用于表示道路,以及TrafficLight类用于表示红绿灯。系统通过Car类的run方法使车辆行驶,通过Road类的print方法显示道路状态,通过stopEnd方法处理车辆到达终点的情况。

package lianxi;

public class Car {  //Car类
private String name;
private int pos;
private int line;
private int speed;

public Car() {
// TODO Auto-generated constructor stub
}

public Car(String name, int line, int speed) {
this.name = name;
this.line = line;
this.speed = speed;
this.pos = 0;
}

public void run() {
pos += speed;
}

public void stop() {
this.speed = 0;
}

public void setSpeed(int speed) {
this.speed = speed;
}

public String getName() {
return name;
}

public int getPos() {
return pos;
}

public int getLine() {
return line;
}

public int getSpeed() {
return speed;
}

}

//Road类

package lianxi;

import java.util.ArrayList;
import java.util.List;

public class Road {
private int lines;
private int length;
private List<TrafficLight> tra = new ArrayList<TrafficLight>();
private List<Car> cars = new ArrayList<Car>();

public Road(int lines, int length, String hld) {
this.lines = lines;
this.length = length;
// this.red = hld;
}

public void enterCar(String name, int line, int speed) {
Car car = new Car(name, line, speed);
cars.add(car);
}

public void setLight(int line, int index) {
TrafficLight tcl = new TrafficLight(line, index);
tra.add(tcl);
}

private void printLine(int line) {
// int r = (int) (Math.random() * length);
List<Integer> carPoses = new ArrayList<Integer>();
for (TrafficLight t : this.tra) {
if (t.getLine() == line) {
carPoses.add(t.getIndex());
}
}
for (Car car : this.cars) {
if (car.getLine() == line) {
carPoses.add(car.getPos());
}
}
for (int i = 0; i < this.length; i++) {
if (carPoses.contains(i)) {
System.out.print("X");
} else if (carPoses.contains(i)) {
System.out.print("口");
} else {
System.out.print("=");
}
}
System.out.println();
}

public void print() {
for (int i = 0; i < lines; i++) {
printLine(i);
}
}

public void run() {
// List<Integer> carPoses = new ArrayList<Integer>();
// 让所有的车自动开 手动开的话run(int i);
for (int i = cars.size() - 1; i >= 0; i--) {
Car car = this.cars.get(i);
car.run();
// 如果车的位置大于路长度 移除该车辆信息;
// if (car.getPos() > this.length - 1) {
// this.cars.remove(i);
// }
}
}

public void stopEnd() {
for (int i = 0; i < cars.size(); i++) {
if (cars.get(i).getPos() + cars.get(i).getSpeed() > length - 1) {
cars.get(i).setSpeed(1);
}
if (cars.get(i).getPos() == length - 1)
cars.get(i).stop();
}
}

public List<Car> getCars() {
return cars;
}

}

//红绿灯

package lianxi;

public class TrafficLight {
private int index;
private int line;

public TrafficLight(int line, int index) {
this.index = index;
this.line = line;
}

public int getIndex() {
return index;
}

public int getLine() {
return line;
}

public void setIndex(int index) {
this.index = index;
}

public void setLine(int line) {
this.line = line;
}

}

//测试

package lianxi;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;

public class MainProg {
public static void main(String[] args) throws IOException,
NoSuchAlgorithmException, InterruptedException {
Road road = new Road(3, 50, "@");
road.enterCar("1号", 1, 1);
road.enterCar("2号", 2, 3);
road.enterCar("3号", 2, 13);
road.setLight(0, 10);
road.setLight(1, 21);
road.setLight(2, 5);
while (true) {
road.print();
System.out.println("\n");
road.run();
road.stopEnd();
Thread.sleep(100);
}
}

}

转载于:https://www.cnblogs.com/Lovemeifyoudare/p/10302453.html

电子设计校内选拔赛,智能随动小车代码 //按下“运动测试”按键,小车能够依次连续执行前进、后退、左拐 弯、右拐弯、原地左转、原地右转的动作各5秒。 //(2)小车能够测量前方物体的距离,并通过显示屏实时显示距离。 //(3)小车前方放置一个平面物体(如书本、木板),平面朝向小车前方。 小车能自动与物体保持一定距离,当物体前后移动时,小车也能跟 随移动。当实际距离与设定的跟随距离的差值大于5cm时,小车会发出 声光提示。 //02过冲 //(4)初始状态下让小车与前方物体相距2m,然后进入跟随模式,跟随距离 设定为20cm ,记录小车从初始状态到与物体 稳定地相距20cm所用的时 间t(单位为秒)。测试3次,取最短的时间。 //距离235,过冲后退 2. 发挥部分 //(1)小车具有测速功能,显示屏实时显示小车当前速度(圈/秒)。 //(2)无线通信功能,小车能把距离、速度等信息无线发送到另一个装置可以 是电脑、手机、另一个单片机等)。装置C 可无线发送命令让小车执行不 同的动作模式。 (3)小车可通过按键设置执行人体跟随功能模式。测试者把书本或木板在小 车前方前后移动,小车不跟随,当测试者把手掌面对小车前方前后移动, 小车会自动跟随。 (4)小车具有自动寻人跟随功能。当人体(手掌)不在小车前方,小车能自 动原地旋转,直到检测到人体,然后自动跟随人体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值