import java.awt.*;import java.util.*;import java.awt.image.*;import java.awt.event.*;public class CarWorld extends EventPanel implements Runnable {	private Vehichle car;	private Obstacle[] obstacle;	private AButton stop,start;	private MiscButton show, hide, startOver;	private Image offScreen;	private Graphics offScreenGraphics;	private Thread runner;	private int p1x,p1y,p2x,p2y;	private boolean running = true, openToChange=false;	private int count;	private boolean sensor1 = false, sensor2 = false;	public CarWorld() {		stop = new AButton(485,30,"Stop");		start = new AButton(440,30,"Start");		show = new MiscButton(440,55, "Show Sensors");		hide = new MiscButton(440,80, "Hide Sensors");		startOver = new MiscButton(440,240, "Start Over");		car = new Vehichle(100,120,"Bob");		obstacle = new Obstacle[50];		count = 0;		obstacle[0] = new Obstacle(200,120,50);		runner = new Thread(this);		}	public void update(Graphics g) {		paint(g);		}	public void paint(Graphics g) {		if (offScreen==null) {			offScreen = createImage(555,380);			offScreenGraphics = offScreen.getGraphics();			offScreenGraphics.setColor(Color.white);			offScreenGraphics.fillRect(0,0,555,380);			runner.start();			}		g.drawImage(offScreen,0,0,null);		}	public void run() {		while (offScreen == null)				pause();		while (running) {				for (int l=0; l<=count; l++) {					obstacle[l].display(offScreenGraphics);					}				p1x = car.sensorOneX();				p1y = car.sensorOneY();				p2x = car.sensorTwoX();				p2y = car.sensorTwoY();				getPixels1(offScreen);				getPixels2(offScreen);				car.move(offScreenGraphics, sensor1, sensor2);				car.showTable(offScreenGraphics);				stop.display(offScreenGraphics);				start.display(offScreenGraphics);				hide.display(offScreenGraphics);				show.display(offScreenGraphics);				startOver.display(offScreenGraphics);				repaint();				pause();				}		}	public void pause() {		try {			Thread.currentThread().sleep(10);		}		catch(Throwable t) {		}		}	public void mousePressed(MouseEvent e)	{		int x = e.getX();		int y = e.getY();		if (stop.inside(x,y) && running==true) {			System.out.println("Stopped by user..");			running = false;			openToChange = true;			runner.suspend();			}		else if (start.inside(x,y) && running==false) {			System.out.println("Started by user...");			running = true;			openToChange = false;			runner.resume();			}		else if (startOver.inside(x,y) && running==false) {			clearEverything(offScreenGraphics);			}		else if (show.inside(x,y)) car.setSensorDisplayOn();		else if (hide.inside(x,y)) car.setSensorDisplayOff();		else if (x < 420 && openToChange && count < 49) {			//System.out.println("Adding an obstacle");			addObstacle(x,y);			}		else if (openToChange) {			car.checkTable(offScreenGraphics,x,y);			repaint();			} 		} 	public void clearEverything(Graphics g) { 		count=0; 		car.resetAllThings(); 		car.resetValues(); 		offScreenGraphics.setColor(Color.white);		offScreenGraphics.fillRect(0,0,555,380);		stop.display(offScreenGraphics);		start.display(offScreenGraphics);		hide.display(offScreenGraphics);		show.display(offScreenGraphics);		startOver.display(offScreenGraphics);		car.move(offScreenGraphics, sensor1, sensor2);		car.showTable(offScreenGraphics);		obstacle[0].display(offScreenGraphics); 		repaint(); 	} 	public void addObstacle(int ox, int oy) {		count++;		obstacle[count] = new Obstacle(ox,oy,50);		//System.out.println("Obstacle added at " + ox + ", " + oy);		obstacle[count].display(offScreenGraphics);		repaint(); 		} 	public void getPixels1(Image img) { 		try {	 		PixelGrabber grabber = new PixelGrabber(img,p1x,p1y,1,1,true);	 		if (grabber.grabPixels())	 			{		  		int[] pix = (int[])grabber.getPixels();					int r1 = (pix[0] >> 16) & 255;					if (r1>0) r1 = 1;					int g1 = (pix[0] >> 8) & 255;					if (g1>0) g1 = 1;					int b1 = (pix[0]) & 255;					if (b1>0) b1 = 1;						if (r1==1 && g1==1 && b1!=1) sensor1=true;						else sensor1=false;		 			}		 		} 		catch (InterruptedException e) { 			System.err.println("interrupted waiting for pixels!"); 			} 		} public void getPixels2(Image img) { 		try {	 		PixelGrabber grabber = new PixelGrabber(img,p2x,p2y,1,1,true);	 		if (grabber.grabPixels())	 			{		  		int[] pix = (int[])grabber.getPixels();					int r2 = (pix[0] >> 16) & 255;					if (r2>0) r2 = 1;					int g2 = (pix[0] >> 8) & 255;					if (g2>0) g2 = 1;					int b2 = (pix[0]) & 255;					if (b2>0) b2 = 1;						if (r2==1 && g2==1 && b2!=1) sensor2=true;						else sensor2=false;		 			}	 			} 		catch (InterruptedException e) { 			System.err.println("interrupted waiting for pixels!"); 			} 		}}