advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement


3DDriver


import java.applet.*;
import java.awt.*;
import java.awt.image.*;

public final class Driver
   extends java.applet.Applet implements Runnable
{
	private Thread	 m_DUI = null;

	private Graphics m_Graphics;
	private Image offscreenImage;
	private Image cracked;
	private Image backdrop;
	private Image post;
	private Image[] signs;
	private Image[][] cars;
	private Image tree;
	private Image bush;
	private Graphics finishedGraphics;
	private Graphics offscreenGraphics;
	private Color[] road;
	private Color[] hill;
	private Color[] barricade;
	private Color[] wood;
	private Font updateFont;
	private Font startMouse;
	private Font tooSlow;
	private int[] xvals;
	private int[] yvals;
	private int[] xm;
	private int[] ym;
	private int[]	 track;
	private int[]	 trackZ;
	private int		 carPosition;
	private int		 facing;
	private int      roadFacing;
	private int		 trackLoc;
	private int		 speed=180;
	private boolean	 wrecked = false;
	private double[]	 zoom;
	private boolean  m_fAllLoaded = false;
	private int[]	 driverY;//place on track
	private int[]	 driverCar;//0=sportscar,etc
	private int[]	 driverDir;//0=SB,1=NB
	private int		 driverCount;
	private int[][]	 upcomingCars;
	private int[][]  roadSigns;
	private int[]	 roadType;
	private int[]	 trees;
	private int[]	 bushes;
	private int      facingZ;
	private long	 sleeper;
	public boolean	 running;
	public boolean	 autopilot=true;
	public int		 dimmer;
	private long	 startTime;
	private boolean	 gas;
	private boolean	 brake;
	private boolean	 left;
	private boolean  right;
	private Color[]	 tunnel;
	private Font	 title;
	private Color[]	 darkRoad;
	private Color[]	 darkLines;
	public Driver()
	{
		cars = new Image[3][2];
		driverY=new int[50];
		signs=new Image[3];
		driverCar=new int[50];
		driverDir=new int[50];
		upcomingCars = new int[21][2];
		running=false;
		road = new Color[21];
		darkRoad=new Color[21];
		darkLines=new Color[21];
		hill = new Color[21];
		barricade=new Color[21];
		tunnel=new Color[21];
		wood=new Color[21];
		xvals = new int[4];
		yvals = new int[4];
		xm = new int[6];
		ym = new int[6];
	}

	public String getAppletInfo()
	{
		return "Name: DUI\r\n" +
		       "Author: Derek L. Ramey, MCP\r\n" +
		       "Created with Microsoft Visual J++ Version 1.1";
	}


	public void init()
	{
        resize(400, 300);
		zoom = new double[26];
		for (int t=0;t<25;t++) {
			zoom[t] = 200.0/(t+1)-8;
		}
		offscreenImage = createImage(400,300);
		offscreenGraphics =offscreenImage.getGraphics();
		cracked=getImage(getCodeBase(),"cracked.gif");
		cars[0][0]=getImage(getCodeBase(),"car1f.gif");
		cars[0][1]=getImage(getCodeBase(),"car1b.gif");
		cars[1][0]=getImage(getCodeBase(),"car2f.gif");
		cars[1][1]=getImage(getCodeBase(),"car2b.gif");
		cars[2][0]=getImage(getCodeBase(),"car3f.gif");
		cars[2][1]=getImage(getCodeBase(),"car3b.gif");
		signs[0]=getImage(getCodeBase(),"banner1.gif");
		signs[1]=getImage(getCodeBase(),"banner2.gif");
		signs[2]=getImage(getCodeBase(),"banner3.gif");
		tree=getImage(getCodeBase(),"tree1.gif");
		bush=getImage(getCodeBase(),"tree2.gif");
		post=getImage(getCodeBase(),"post.gif");
		backdrop = createImage(800,600);
		drawBG(backdrop.getGraphics());
		updateFont = new Font("TimesNewRoman", Font.BOLD, 12);
		startMouse=new Font("TimesNewRoman",Font.BOLD,18);
		tooSlow=new Font("TimesNewRoman",Font.BOLD,32);
		title=new Font("Serif",Font.BOLD|Font.ITALIC,42);
		for(int t=0;t<21;t++) {
			hill[t] = new Color(0,196-(t*5),0);
			road[t] = new Color(150-t*4,150-t*4,150-t*4);
			barricade[t]=new Color(255-t*6,255-t*6,255-t*6);
			wood[t]=new Color(150-t*4,100-t*3,50-t*2);
			tunnel[t]=new Color(75-t*3,50-t*2,50-t*2);
			darkRoad[t]=new Color(75-t*3,75-t*3,75-t*3);
			darkLines[t]=new Color(150-t*4,150-t*4,0);
		}
}

	public void destroy()
	{

	}

  	public void update(Graphics g)
	{
		paint(g);
	}

	public void paint(Graphics g)
	{
		g.drawImage(offscreenImage, 0, 0, this);
	}

	public void start()
	{
		if (m_DUI == null)
		{
			m_DUI = new Thread(this);
			m_DUI.start();
		}

	}

	public void stop()
	{
		if (m_DUI != null)
		{
			m_DUI.stop();
			m_DUI = null;
		}
	}

	public void drawBG(Graphics g) {
		g.setColor(Color.black);
		g.fillRect(0,0,800,600);
		g.setColor(Color.white);
		for(int t=0;t<250;t++) {
			int x=(int)Math.round(Math.random()*800);
			int y=(int)Math.round(Math.random()*600);
			g.drawLine(x,y,x,y);
		}
		g.setColor(Color.gray);
		for(int t=0;t<750;t++) {
			int x=(int)Math.round(Math.random()*800);
			int y=(int)Math.round(Math.random()*600);
			g.drawLine(x,y,x,y);
		}

	}
	public final void run()
	{
		if (!m_fAllLoaded)
		{

    		MediaTracker tracker = new MediaTracker(this);
            tracker.addImage(cracked, 0);
			tracker.addImage(post,0);
			tracker.addImage(tree,0);
			tracker.addImage(bush,0);
			for(int t=0;t<3;t++) {
				tracker.addImage(signs[t],0);
			}
			for(int z=0;z<3;z++) {
			for(int t=0;t<2;t++) {
				tracker.addImage(cars[z][t],0);
			}
			}
			try
			{
				tracker.waitForAll();
				m_fAllLoaded = !tracker.isErrorAny();
			}
			catch (InterruptedException e)
			{}
			if (!m_fAllLoaded)
			{
			    stop();
			    m_Graphics.drawString("Error loading images!", 10, 40);
			    return;
			}
        }
		randomizeTrack();
		randomizeDrivers();
		startTime=System.currentTimeMillis();
		double incCount = 0;
		int state=0;
		while (true) {
			try
			{
				sleeper = System.currentTimeMillis();
				int oface = facing;
				if ((running)||(autopilot)) {
					nextFrame(oface+roadFacing);
					incCount++;
					if (!autopilot) {
						if ((carPosition<-500)||(carPosition>500)) {
							wrecked = true;
						}
						if (upcomingCars[1][0]!=999) {
							int carD = driverDir[upcomingCars[1][0]];
							int xPos = -200+carD*400;
							int carW=300;
							if (driverCar[upcomingCars[1][0]]==2) {
								carW=150;
							}
							if ((carPosition < xPos+carW)&&(carD==0)) {
							wrecked=true;}
							if ((carPosition> xPos-carW)&&(carD==1)){
								wrecked=true;}
						}
						if (upcomingCars[1][1]!=999) {
							int carD = driverDir[upcomingCars[1][1]];
							int xPos = -200+carD*400;
							int carW=300;
							if (driverCar[upcomingCars[1][1]]==2) {
								carW=150;
							}
							if ((carPosition < xPos+carW)&&(carD==0)) {
							wrecked=true;}
							if ((carPosition> xPos-carW)&&(carD==1)){
								wrecked=true;}
						}
						if (upcomingCars[0][0]!=999) {
							int carD = driverDir[upcomingCars[0][0]];
							int xPos = -200+carD*400;
							int carW=300;
							if (driverCar[upcomingCars[0][0]]==2) {
								carW=150;
							}
							if ((carPosition < xPos+carW)&&(carD==0)) {
							wrecked=true;}
							if ((carPosition> xPos-carW)&&(carD==1)){
								wrecked=true;}
						}
						if (upcomingCars[0][1]!=999) {
							int carD = driverDir[upcomingCars[0][1]];
							int xPos = -200+carD*400;
							int carW=300;
							if (driverCar[upcomingCars[0][1]]==2) {
								carW=150;
							}
							if ((carPosition < xPos+carW)&&(carD==0)) {
							wrecked=true;}
							if ((carPosition> xPos-carW)&&(carD==1)){
								wrecked=true;}
						}
					}
					if (wrecked == true) {
						speed = 0;
						running=false;
					}
					if ((200.0/(speed+1)<incCount)&&(speed>0)) {
						incCount-=200.0/(speed+1);
						trackLoc++;
						roadFacing -= track[trackLoc];
						if (autopilot==true) {
							facing += track[trackLoc];}
						facingZ+=trackZ[trackLoc];
						if (trackLoc>5000) {
							running=false;
							speed=0;
						}
						carPosition+=(((facing+roadFacing)*speed)/20);
					}
					if (wrecked == false) {
					     updateDrivers();
					}
					else {
						offscreenGraphics.drawImage(cracked,0,0,400,300,this);
					}

				}
				if (wrecked==true) {
						dimImage();
						dimmer++;
						if (dimmer > 50) {
						offscreenGraphics.setFont(startMouse);
						offscreenGraphics.setColor(Color.cyan);
						offscreenGraphics.drawString("Click mouse to restart",115,150);
						copyRight();
						}
					}
				if (autopilot) {
					offscreenGraphics.setColor(Color.blue);
					offscreenGraphics.setFont(title);
					offscreenGraphics.drawString("3D Driver",120,60);
					offscreenGraphics.setFont(updateFont);
					offscreenGraphics.drawString("Version 1.2",175,75);
					offscreenGraphics.setColor(Color.white);
					offscreenGraphics.setFont(startMouse);
					offscreenGraphics.drawString("Click with the mouse to start",80,100);
					offscreenGraphics.setFont(updateFont);
					offscreenGraphics.drawString("A - Gas",180,130);
					offscreenGraphics.drawString("Z - Brake",175,150);
					offscreenGraphics.drawString("LEFT/RIGHT ARROWS - Turn",120,170);
					copyRight();
				}

				long now=80-(System.currentTimeMillis()-sleeper);
				repaint();
				if (now<10) {
					now=10;}
				Thread.sleep(now);
				if (left==true) {
					facing-=2;
					if (facing-roadFacing==-1) {
						facing=roadFacing;
					}
				}
				if (right==true) {
					facing+=2;
					if (facing-roadFacing==1) {
						facing=roadFacing;
					}
				}
				if (gas==true) {
					speed+=(300/(speed+20)+1);
					if (speed>200) {speed=200;}
				}
				if (brake==true) {
					speed-=(700/(speed+5)+2);
					if (speed<0) {speed=0;}
				}

			}
			catch (InterruptedException e)
			{
				stop();
			}
		}
	}

	private final void nextFrame(int oface) {
		int origfacing = oface;
		int curPos = 0;
		int upcomingRoad[] = new int[26];
		int upcomingRoadZ[] = new int[26];
		upcomingRoad[0]=track[trackLoc];
		int curve=0;
		int elevcurve = 0;

		int bgX=facing*10;
		int bgY=facingZ*10;
		while (bgX<0) {
			bgX+=800;
		}
		while (bgX>800) {
			bgX-=800;
		}
		while (bgY<0) {
			bgY+=600;
		}
		while (bgY>600) {
			bgY-=600;
		}
		offscreenGraphics.clipRect(0,0,400,300);
		offscreenGraphics.drawImage(backdrop,-bgX,-bgY,this);
		offscreenGraphics.drawImage(backdrop,-bgX+800,-bgY,this);
		offscreenGraphics.drawImage(backdrop,-bgX+800,-bgY+600,this);
		offscreenGraphics.drawImage(backdrop,-bgX,-bgY+600,this);

		for(int t=1;t<21;t++) {
			curve += track[t+trackLoc];
			elevcurve += trackZ[t+trackLoc];
			for(int z=t;z<25;z++) {
				upcomingRoad[z] += curve;
				upcomingRoadZ[z] += elevcurve;
			}
		}
		for(int t=0;t<21;t++) {
			upcomingCars[t][0]=999;
			upcomingCars[t][1]=999;
		}
		for(int t=0;t<50;t++) {
			if ((driverY[t]>=trackLoc)&&(driverY[t]<=trackLoc+20)) {
				if (upcomingCars[driverY[t]-trackLoc][0]==999) {
					upcomingCars[driverY[t]-trackLoc][0]=t;
				}
				else {
					upcomingCars[driverY[t]-trackLoc][1]=t;
				}
			}
		}

		for (int t=20;t>0;t--) {
			int offsetA = (upcomingRoad[t]-(carPosition/(t+1))) + 200 - origfacing*t;
			int offsetB = (upcomingRoad[t-1]-(carPosition/t)) + 200 - origfacing*t + origfacing;

			xvals[0] = offsetA-(int)(zoom[t]*4);
			xvals[1] = offsetA+(int)(zoom[t]*4);
			xvals[3] = offsetB-(int)(zoom[t-1]*4);
			xvals[2] = offsetB+(int)(zoom[t-1]*4);
			yvals[0] = 200+(int)(zoom[t]+(upcomingRoadZ[t]));
			yvals[1] = yvals[0];
			yvals[2] = 200+(int)(zoom[t-1]+(upcomingRoadZ[t-1]));
			yvals[3] = yvals[2];

			//drawCliff
			int oxsize = (int)(zoom[t]*4);
			int xsize = (int)(zoom[t-1]*4);
			if (roadType[trackLoc+t]==0) {
				xm[0]=xvals[0];
				ym[0]=yvals[0];
				xm[1]=xvals[3];
				ym[1]=yvals[3];
				xm[2]=xm[1];
				ym[2]=300;
				xm[3]=xm[0]-(int)(300-yvals[0]);
				ym[3]=300;
				offscreenGraphics.setColor(hill[t]);
				offscreenGraphics.fillPolygon(xm,ym,4);
			}
			if (roadType[trackLoc+t]==1) {
				xm[0]=xvals[3];
				ym[0]=yvals[3];
				xm[1]=xvals[3];
				ym[1]=yvals[3]-(int)zoom[t-1];
				xm[2]=xvals[0];
				ym[2]=yvals[0]-(int)zoom[t];
				xm[3]=xvals[0];
				ym[3]=yvals[0];
				offscreenGraphics.setColor(barricade[t]);
				offscreenGraphics.fillPolygon(xm,ym,4);
			}
			if (roadType[trackLoc+t]==2) {
				xm[0]=xvals[3];
				ym[0]=yvals[3];
				xm[1]=xvals[3];
				ym[1]=yvals[3]-(int)(zoom[t-1]*5);
				xm[2]=xvals[0];
				ym[2]=yvals[0]-(int)(zoom[t]*5);
				xm[3]=xvals[0];
				ym[3]=yvals[0];
				offscreenGraphics.setColor(tunnel[t]);
				offscreenGraphics.fillPolygon(xm,ym,4);
			}
			//draw Road
			if (yvals[2]>yvals[0]) {
				xm[0]=offsetA-oxsize;
				xm[1]=offsetA+oxsize;
				xm[2]=offsetB+xsize;
				xm[3]=offsetB-xsize;
				float test=(float)(trackLoc+t)/100;
				if (test==Math.round(test)) {
					offscreenGraphics.setColor(new Color(255-t*2,0,0));
				}
				else{
					if (trackLoc+t>5000) {
						offscreenGraphics.setColor(new Color(0,255-t*4,0));
					}
					else {
						if (roadType[trackLoc+t]==1) {
							offscreenGraphics.setColor(wood[t]);
						}
						if (roadType[trackLoc+t]==2) {
							offscreenGraphics.setColor(darkRoad[t]);
						}
						if (roadType[trackLoc+t]==0) {
							offscreenGraphics.setColor(road[t]);
						}
					}
				}
				offscreenGraphics.fillPolygon(xm,yvals,4);

				int lines= (int)((trackLoc+t));
				if ((float)lines/2 == lines/2) {
					xm[0] = offsetA-(int)(zoom[t]/8)-1;
					xm[1] = offsetA+(int)(zoom[t]/8)+1;
					xm[3] = offsetB-(int)(zoom[t-1]/8)-1;
					xm[2] = offsetB+(int)(zoom[t-1]/8)+1;
					ym[0] = yvals[0];
					ym[1] = yvals[0];
					ym[2] = yvals[2];
					ym[3] = yvals[2];
					if (roadType[trackLoc+t]==2) {
						offscreenGraphics.setColor(darkLines[t]);
					}
					else {
						offscreenGraphics.setColor(Color.yellow);
					}
					offscreenGraphics.fillPolygon(xm,ym,4);
				}
			}
			//draw Mountain
			if (roadType[trackLoc+t]==0) {
				xm[0] = xvals[1];
				ym[0] = yvals[1];
				xm[1] = xm[0]+yvals[1];
				ym[1] = 0;
				xm[2] = 400;
				ym[2] = 0;
				xm[3] = 400;
				ym[3] = 300;
				xm[4]=xvals[2];
				ym[4]=300;
				xm[5]=xvals[2];
				ym[5]=yvals[2];
			offscreenGraphics.setColor(hill[t]);
			offscreenGraphics.fillPolygon(xm,ym,6);
			}
			if (roadType[trackLoc+t]==1) {
				xm[0]=xvals[2];
				ym[0]=yvals[2];
				xm[1]=xvals[2];
				ym[1]=yvals[2]-(int)zoom[t-1];
				xm[2]=xvals[1];
				ym[2]=yvals[1]-(int)zoom[t];
				xm[3]=xvals[1];
				ym[3]=yvals[1];
				offscreenGraphics.setColor(barricade[t]);
				offscreenGraphics.fillPolygon(xm,ym,4);
			}
			if (roadType[trackLoc+t]==2) {
				xm[0]=xvals[2];
				ym[0]=yvals[2];
				xm[1]=xvals[2];
				ym[1]=yvals[2]-(int)(zoom[t-1]*5);
				xm[2]=xvals[1];
				ym[2]=yvals[1]-(int)(zoom[t]*5);
				xm[3]=xvals[1];
				ym[3]=yvals[1];
				offscreenGraphics.setColor(tunnel[t]);
				offscreenGraphics.fillPolygon(xm,ym,4);
				xm[0]=xvals[0];
				xm[1]=xvals[1];
				xm[2]=xvals[2];
				xm[3]=xvals[3];
				ym[0]=yvals[0]-(int)(zoom[t]*5);
				ym[1]=ym[0];
				ym[2]=yvals[2]-(int)(zoom[t-1]*5);
				ym[3]=ym[2];
				offscreenGraphics.fillPolygon(xm,ym,4);
				if (xvals[0]>0) {
					xm[0]=xvals[3];
					ym[0]=yvals[3]-(int)(zoom[t-1]*10);
					xm[1]=xm[0];
					ym[1]=300;
					xm[2]=xm[0]-(300-ym[0]);
					ym[2]=300;
					offscreenGraphics.setColor(hill[t]);
					offscreenGraphics.fillPolygon(xm,ym,3);
					ym[1]=yvals[3]-(int)(zoom[t-1]*5);
					ym[2]=ym[1];
					xm[2]=400;
					xm[3]=400;
					ym[3]=ym[0]-(400-xm[0]);
					offscreenGraphics.fillPolygon(xm,ym,4);
					xm[0]=xvals[2];
					xm[1]=xvals[2];
					xm[2]=400;
					xm[3]=400;
					ym[0]=ym[1];
					ym[1]=300;
					ym[2]=300;
					ym[3]=ym[0];
					offscreenGraphics.fillPolygon(xm,ym,4);
				}
			}
			if (upcomingCars[t][0]!= 999) {
				int car=upcomingCars[t][0];
				int XCar = offsetB+(xsize*(driverDir[car]-1))+(xsize/8);
				offscreenGraphics.drawImage(cars[driverCar[car]][driverDir[car]],XCar,yvals[2]-(xsize*3/4),xsize*3/4,xsize*3/4,this);
			}
			if (upcomingCars[t][1]!= 999) {
				int car=upcomingCars[t][1];
				int XCar = offsetB+(xsize*(driverDir[car]-1))+(xsize/8);
				offscreenGraphics.drawImage(cars[driverCar[car]][driverDir[car]],XCar,yvals[2]-(xsize*3/4),xsize*3/4,xsize*3/4,this);
			}
			if (roadType[trackLoc+t]==0) {
				if (roadSigns[trackLoc+t][0]>0) {
					int xp=offsetB-(xsize*2);
					int yp=yvals[2]-(int)(zoom[t-1]*3);
					offscreenGraphics.drawImage(signs[roadSigns[trackLoc+t][0]-1],xp,yp,xsize,xsize/3,this);
					offscreenGraphics.drawImage(post,xp+(xsize*19)/40,yp+(xsize/3),xsize/20,xsize,this);
				}
				if (roadSigns[trackLoc+t][1]>0) {
					int xp=xvals[2];
					int yp=yvals[2]-(int)(zoom[t-1]*6);
					offscreenGraphics.drawImage(signs[roadSigns[trackLoc+t][1]-1],xp,yp,xsize,xsize/3,this);
					offscreenGraphics.drawImage(post,xp+(xsize*19)/40,yp+(xsize/3),xsize/20,xsize,this);
				}
				if (trees[trackLoc+t]>0) {
					int xp=offsetB+(int)(zoom[t-1]*(trees[trackLoc+t]+1));
					int yp=yvals[2]-(int)(zoom[t-1]*(trees[trackLoc+t]+6));
					if (xp<400) {
						offscreenGraphics.drawImage(tree,xp,yp,(int)(zoom[t-1]*4),(int)(zoom[t-1]*7),this);
					}
				}
				if (bushes[trackLoc+t]>0) {
					int xp=offsetB+(int)(zoom[t-1]*(bushes[trackLoc+t]+1));
					int yp=yvals[2]-(int)(zoom[t-1]*(bushes[trackLoc+t]+6));
					if (xp<400) {
						offscreenGraphics.drawImage(bush,xp,yp,(int)(zoom[t-1]*4),(int)(zoom[t-1]*7),this);
					}
				}
				if (trees[trackLoc+t]==-1) {
					int xp=offsetB-(int)(zoom[t-1]*9);
					int yp=yvals[2]-(int)(zoom[t-1]*4);
					if (xp>-(int)(zoom[t-1]*4)) {
						offscreenGraphics.drawImage(tree,xp,yp,(int)(zoom[t-1]*4),(int)(zoom[t-1]*7),this);
					}
				}
				if (bushes[trackLoc+t]==-1) {
					int xp=offsetB-(int)(zoom[t-1]*9);
					int yp=yvals[2]-(int)(zoom[t-1]*4);
					if (xp>-(int)(zoom[t-1]*4)) {
						offscreenGraphics.drawImage(bush,xp,yp,(int)(zoom[t-1]*4),(int)(zoom[t-1]*7),this);
					}
				}
			}
		}
		offscreenGraphics.setColor(Color.white);
		offscreenGraphics.setFont(updateFont);
		int time=(int)((System.currentTimeMillis()-startTime)/1000);
		offscreenGraphics.drawString("Checkpoints: "+(int)trackLoc/100+"  Speed: "+speed/2+" Driving Time: "+time,5,15);
	}
	private void updateDrivers() {
		driverCount++;
		if (driverCount>3) {
			for(int t=0;t<50;t++) {
				driverCount=0;
				if (driverDir[t]==0) {
					driverY[t]--;
					if (driverY[t]==-1) {
						driverY[t]=4999;
					}
				}
				else {
					driverY[t]++;
					if (driverY[t]==5000) {
						driverY[t]=0;
					}
				}
			}
		}
	}

	private void randomizeDrivers() {
		for(int t=0;t<50;t++) {
			driverDir[t] = (int)(Math.random()*2);
			driverY[t] = (int)(Math.random()*4990)+10;
			driverCar[t]=(int)(Math.random()*3);
		}
	}
	public boolean keyDown(Event evt, int key)
	{
		if (key == Event.LEFT)
		{	left=true;
			return true;
		}
		if (key == Event.RIGHT)
		{
			right=true;
			return true;
		}
		if ((key == 'a')||(key=='A'))
		{
			gas=true;
			return true;
		}
		if ((key == 'z')||(key=='Z'))
		{
			brake=true;
			return true;
		}
		return false;
	}
	public boolean keyUp(Event evt, int key)
	{
		if (key == Event.LEFT)
		{	left=false;
			return true;
		}
		if (key == Event.RIGHT)
		{
			right=false;
			return true;
		}
		if ((key == 'a')||(key=='A'))
		{
			gas=false;
			return true;
		}
		if ((key == 'z')||(key=='Z'))
		{
			brake=false;
			return true;
		}
		return false;
	}
	public boolean mouseDown(Event evt, int x, int y)
	{
		if (running==false) {
			newGame();
			running=true;
		}
		return true;
	}
	public void newGame() {
		carPosition = 100;
		facing = 0;
		roadFacing=0;
		trackLoc = 0;
		speed=0;
		wrecked=false;
		autopilot=false;
		randomizeDrivers();
		randomizeTrack();
		startTime=System.currentTimeMillis();
		dimmer=0;
	}
	public void randomizeTrack() {

		track = new int[5100];
		trackZ = new int[5100];
		roadType=new int[5100];
		roadSigns=new int[5100][2];
		trees=new int[5100];
		bushes=new int[5100];

		for (int t=0;t<25;t++) {
			roadSigns[t*200+(int)(Math.random()*200)][(int)(Math.random()*2)]=(int)(Math.random()*3)+1;
		}
		for (int t=0;t<100;t++) {
			int loc=t*50+(int)(Math.random()*50);
			int val=0;
			switch ((int)(Math.random()*3)) {
			case 0:
				val=(int)(Math.random()*5)+1;
				break;
			case 1:
				val=1;
				break;
			case 2:
				val=-1;
				break;
			}
			trees[loc]=val;
		}
		for(int t=0;t<50;t++) {
			int loc=(int)(Math.random()*5000);
			int type=(int)(Math.random()*2)+1;
			int dist=1;
			if (type==1) {
				dist=(int)(Math.random()*10)+5;
			}
			if (type==2) {
				dist=(int)(Math.random()*25)+10;
			}
			for(int z=0;z<dist;z++) {
				roadType[loc+z]=type;
			}
		}
		for (int t=0;t<100;t++) {
			int loc=t*50+(int)(Math.random()*50);
			int val=0;
			switch ((int)(Math.random()*3)) {
			case 0:
				val=(int)(Math.random()*5)+1;
				break;
			case 1:
				val=1;
				break;
			case 2:
				val=-1;
				break;
			}
			bushes[loc]=val;
		}
		for(int severity=1;severity<6;severity++) {
			int start;
			int end;
			int h;
			int v;
			switch(severity) {
			case 1:
				start=0;
				end=500;
				h=1;
				v=1;
				break;
			case 2:
				start=500;
				end=1500;
				h=2;
				v=1;
				break;
			case 3:
				start=1500;
				end=2500;
				h=3;
				v=2;
				break;
			case 4:
				start=2500;
				end=3500;
				h=4;
				v=2;
				break;
			default:
				start=3500;
				end=5000;
				h=5;
				v=3;
				break;
			}
			for (int t=0;t<(severity*30);t++) {
				int a = (int)(Math.random()*(end-start)+start);
				switch ((int)(Math.random()*10)) {
					case 6:
					case 7:
					case 0:
						track[a] = (int)(Math.random()*(h*2+1))-h;
						break;
					case 1:
						track[a] = -h;
						track[a+1]=-(h*2);
						track[a+2]=-(h*3);
						track[a+3]=-(h*2);
						track[a+4]=-h;
						break;
					case 2:
						track[a] = h;
						track[a+1]=h*2;
						track[a+2]=h*3;
						track[a+3]=h*2;
						track[a+4]=h*1;
						break;
					case 8:
					case 9:
					case 3:
						trackZ[a] = (int)((Math.random()*(v*2+1))-v)/2;
						break;
					case 4:
						trackZ[a] = -v;
						trackZ[a+1]=-(v*2);
						trackZ[a+2]=-(v);
						break;
					case 5:
						trackZ[a] = v;
						trackZ[a+1]=v*2;
						trackZ[a+2]=v;
						break;
				}
			}
		}
	}
	private void dimImage() {
		offscreenGraphics.setColor(Color.black);
		for(int t=0;t<1000;t++) {
			int xd=(int)(Math.random()*400);
			int yd=(int)(Math.random()*300);
			offscreenGraphics.fillRect(xd,yd,4,4);
		}
	}
	private void copyRight() {
		Font g=new Font("TimesNewRoman",Font.BOLD,12);
		offscreenGraphics.setFont(g);
		offscreenGraphics.setColor(Color.white);
		offscreenGraphics.drawString("(C)1999 Derek L. Ramey",125,260);
		offscreenGraphics.drawString("All Rights Reserved.",125,270);
		offscreenGraphics.drawString("http://derekramey.virtualave.net",125,280);
		offscreenGraphics.drawString("Email: indybane@aol.com",125,290);

	}
	//{{DECLARE_CONTROLS
	//}}
}


Return to 3DDriver

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.

 Microsoft Visual Studio 2010 Showcase
 Avaya Developer Showcase
 MSDN Spotlight
 PHP for Windows Showcase
XML error: undefined entity at line 39
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

Windows 7: From Beta to Final Code in One Year
Google Shows Off Chrome OS, Releases Source
Microsoft Shows Off Silverlight 4, IE9 Plans
Metasploit Expands Vulnerability Test Framework
HyperCard Reborn?
Fedora 12 Takes Aim at Linux Networking
Top Supercomputer Nearly Doubles in Speed
Fedora 12 Linux Tackles Virtualization
Apple Gives iPhone Developers App Status Tracker
Novell Sets OpenSUSE 11.2 Free

Creating Custom Export Filters for StarOffice with XSLT
WPF Wonders: Using DataTemplates
Crystal Reports Family Offers Options for Developers
Avaya Aura Session Manager video
Avaya Aura Overview video
Exploring HTML 5's Audio/Video Multimedia Support
Overriding Virtual Functions? Use C++0x Attributes to Avoid Bugs.
Understanding the Cloud Computing Security Vulnerabilities
Cisco and IBM Target a Greener World
Upgrade to Visual Studio 2010 with the Ultimate Offer

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs