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);
		}
	}
}
 
                    
                     
                    
                 
                    
                 
         
