由于我对编程还很陌生,因此我正在为实践进行简单的交通模拟。到目前为止,我已经拥有了所有想做的工作,但是当一辆汽车停在红灯处时,它后面的汽车就撞上了它,并彼此叠放。
这是我给汽车打电话的通用代码:
private ArrayList<CarsRight> carsright = new ArrayList<CarsRight>();
public IntersectionSimulation() {
for (int i = 0; i < 4; i++) {
carsright.add(new CarsRight(i * -250));
}
}
public void paint(Graphics g) {
for (CarsRight cr : carsright) {
Graphics2D g2d = (Graphics2D) g;
cr.paint(g2d);
tl.paint(g2d,mkl.b); //tl is the traffic light (either green or red)
//mkl.b checks whether or not the spacebar is being pressed and changes the light accordingly
}
}
public void move() {
for (CarsRight cr : carsright) {
cr.move(mkl.b); //mkl.b checks whether or not the spacebar is being pressed and makes the cars move or stop accordingly
}
)
这基本上是我的CarsRight.java
课:
public class CarsRight extends JPanel {
int x;
private int y = 330;
private int a;
private int speed = 20;
int rgb = colorCode();
private int height = 40;
private int length = 100;
public CarsRight(int i) {
this.x = i;
}
void move(boolean b) {
if (b == true) {
x++;
a = speed;
x = x + a;
} //move if the light is green
else {
if (x > 300) {
x++;
a = speed;
x = x + a;
}
else if (x < 250) {
x++;
a = speed;
x = x + a;
}
} //if the car is before the light,move up to the light,and if the car is past the light,keep going
}
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
super.paint(g2d);
for (int d = 0; d < 20; d++) {
if (rgb == 1) {
Color c = new Color(255,255,255);
g2d.setColor(c);
} else if (rgb == 2) {
Color c = new Color(0,0);
g2d.setColor(c);
} else if (rgb == 3) {
Color c = new Color(179,179,179);
g2d.setColor(c);
} else if (rgb == 4) {
Color c = new Color(187,10,48);
g2d.setColor(c);
} else {
Color c = new Color(182,177,169);
g2d.setColor(c);
} //random color generator for car
g2d.fillRoundRect(x,y,length,height,20); //prints car
}
}
}
再一次,我不知道如何解决这个问题:/