package traffic;
import java.io.InputStream;
import java.net.URL;
import java.util.*;
import java.awt.*;
import java.applet.Applet;
public class Crossroad extends Applet {
GraphPanel panel;
int carnum;
Thread LightThrd = new Thread();
public void init() {
setLayout(new BorderLayout());
panel = new GraphPanel(this);
add("Center", panel);
carnum = Integer.parseInt(getParameter("carnum"));
for (int k=0; kbrgright[k])&&brgflag[k]==1){
if(temp> brgleft[k] ||tempbrgright[k])&&brgflag[k]==0)
if (light.signal==0)
brgflag[k]=1;
else
n.x=temp;
else if(temp< brgleft[k] &&temp>brgright[k])
brgflag[k]=0;
if (n.x < 0) {
n.x = d.width-10*Math.random();
carpermin[0].vehicleNumber=carpermin[0].vehicleNumber+1;
} else if (n.x > d.width) {
n.x = d.width-10*Math.random();
}
if (n.x!=temp&&n.wait==-1){
carpermin[0].vehicleWait+= System.currentTimeMillis()- n.wait;
n.wait=-1;
}
}
} else{
temp=n.y;
n.y += Math.max(-10, Math.min(10, n.dY));
if ((n.ybrgbottom)&&brgflag[n.road-1]==1){
if(temp> brgtop ||tempbrgbottom)&&brgflag[n.road-1]==0)
if (light.signal==1)
brgflag[n.road-1]=1;
else
n.y=temp;
else if(temp< brgtop &&temp>brgbottom)
brgflag[n.road-1]=0;
if (n.y > d.height||n.y<0) {
n.y = 10*Math.random();
carpermin[0].vehicleNumber=carpermin[0].vehicleNumber+1;
}
}
}
repaint();
} //end of relax method
Vehicle pick;
double pickoldx, pickoldy;
Image offscreen;
Dimension offscreensize;
Graphics offgraphics;
final Color selectColor = Color.pink;
final Color edgeColor = Color.black;
final Color vehicleColor = new Color(250, 135, 250);
public void paintVehicle(Graphics g, Vehicle n) {
int x = (int)n.x;
int y = (int)n.y;
g.setColor((n == pick) ? selectColor : vehicleColor);
int w = n.width;
int h = n.length;
g.fillRoundRect(x - w/2, y - h/2, w, h, w/3,h/3);
g.setColor(Color.black);
g.drawRoundRect(x - w/2, y - h/2, w-1, h-1,w/3,h/3);
int dim;
dim = Math.min (w, h);
g.drawRect(x - dim/3, y - dim/3, dim*2/3, dim*2/3);
}
public void paintRoad(Graphics g){
Dimension d = size();
g.setColor(Color.gray);
for(int k=1; k<2; k++){
g.drawLine(rdleft[k], 0, rdleft[k], rdbottom);
g.drawLine(rdleft[k], rdtop, rdleft[k], d.height);
g.drawLine(rdright[k], 0, rdright[k], rdbottom);
g.drawLine(rdright[k], rdtop, rdright[k], d.height);
g.drawLine(rdright[k-1], rdtop, rdleft[k], rdtop);
g.drawLine(rdright[k-1], rdbottom, rdleft[k], rdbottom);
}
g.drawLine(rdright[1], rdbottom, d.width, rdbottom);
g.drawLine(rdright[1], rdtop, d.width, rdtop);
}
public void paintLights(Graphics g){
int lightwidth=15;
for(int k=1; k<2; k++){
g.setColor(Color.black);
g.fillRect(rdleft[k]-carwidth - lightwidth, rdtop- 7 * carwidth, lightwidth-2,3* lightwidth);
g.fillRect(rdleft[k]+ 3 * carwidth, rdtop+4, 3*lightwidth, lightwidth-2);
if (light.signal==1){
g.setColor(Color.red);
g.fillOval(rdleft[k]-carwidth - lightwidth, rdtop- 7 * carwidth, lightwidth-2, lightwidth-2);
g.setColor(Color.black);
g.fillOval(rdleft[k]-carwidth - lightwidth, rdtop- 4*carwidth, lightwidth-2, lightwidth-2);
g.fillOval(rdleft[k]+ 3 * carwidth, rdtop+4, lightwidth-2, lightwidth-2);
g.setColor(Color.green);
g.fillOval(rdleft[k]+ 6 * carwidth, rdtop+4, lightwidth-2, lightwidth-2);
}
if (light.signal==0){
g.setColor(Color.red);
g.fillOval(rdleft[k]+ 3 * carwidth, rdtop+4, lightwidth-2, lightwidth-2);
g.setColor(Color.black);
g.fillOval(rdleft[k]+ 6 * carwidth, rdtop+4, lightwidth-2, lightwidth-2);
g.fillOval(rdleft[k]-carwidth - lightwidth, rdtop- 7 * carwidth, lightwidth-2, lightwidth-2);
g.setColor(Color.green);
g.fillOval(rdleft[k]-carwidth - lightwidth, rdtop- 4*carwidth, lightwidth-2, lightwidth-2);
}
if (light.signal==2){
g.setColor(Color.black);
g.fillOval(rdleft[k]+ 3 * carwidth, rdtop+4, lightwidth-2, lightwidth-2);
g.fillOval(rdleft[k]+ 6 * carwidth, rdtop+4, lightwidth-2, lightwidth-2);
g.fillOval(rdleft[k]-carwidth - lightwidth, rdtop- 7 * carwidth, lightwidth-2, lightwidth-2);
g.fillOval(rdleft[k]-carwidth - lightwidth, rdtop- 4*carwidth, lightwidth-2, lightwidth-2);
g.setColor(Color.yellow);
g.fillOval(rdleft[k]+ 5 * carwidth, rdtop+4, lightwidth-2, lightwidth-2);
g.fillOval(rdleft[k]-carwidth - lightwidth, rdtop- 5 * carwidth, lightwidth-2, lightwidth-2);
}
/** g.setColor(light.signal==1 ? Color.red : Color.black);
g.fillOval(rdleft[k]-carwidth - lightwidth, rdtop- 7 * carwidth, lightwidth-2, lightwidth-2);
g.setColor(light.signal!=1 ? Color.green : Color.black);
g.fillOval(rdleft[k]-carwidth - lightwidth, rdtop- 4*carwidth, lightwidth-2, lightwidth-2);
g.setColor(light.signal==1 ? Color.green : Color.black);
g.fillOval(rdleft[k]+ 6 * carwidth, rdtop+4, lightwidth-2, lightwidth-2);
g.setColor(light.signal!=1 ? Color.red : Color.black);
g.fillOval(rdleft[k]+ 3 * carwidth, rdtop+4, lightwidth-2, lightwidth-2);
}
*/ }
}
public synchronized void update(Graphics g) {
Dimension d = size();
if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) {
offscreen = createImage(d.width, d.height);
offscreensize = d;
offgraphics = offscreen.getGraphics();
}
offgraphics.setColor(getBackground());
offgraphics.fillRect(0, 0, d.width, d.height);
paintRoad(offgraphics);
//draw lights
paintLights(offgraphics);
//draw cars
for (int i = 0 ; i < nvehicles ; i++) {
paintVehicle(offgraphics, vehicles[i]);
}
g.drawImage(offscreen, 0, 0, null);
}
public void start() {
relaxer = new Thread(this);
relaxer.start();
}
public void stop() {
relaxer.stop();
}
}
}