NightDriver
Java Source:
import java.applet.Applet;
import java.applet.AppletContext;
import java.applet.AudioClip;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Event;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.LayoutManager;
import java.awt.MediaTracker;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.ImageObserver;
import java.io.PrintStream;
import java.net.MalformedURLException;
import java.net.URL;
public final class NightDriver extends Applet implements Runnable, ActionListener {
private Graphics m_Graphics;
private Image offscreenImage;
private AudioClip sound;
private AudioClip sound2;
private Image cracked;
private Image backdrop;
private Image post;
private Image tree;
private Image bush;
private Image bush2;
private Graphics finishedGraphics;
private Graphics offscreenGraphics;
private Font updateFont;
private Font startMouse;
private Font tooSlow;
private int[] val2;
private int[] track;
private int[] trackZ;
private int time;
private int carPosition;
private int facing;
private int roadFacing;
private int trackLoc;
private double[] zoom;
private int driverCount;
private int[][] roadSigns;
private int[] roadType;
private int[] trees;
private int[] bushes;
private int[] bushestwo;
private int facingZ;
private long sleeper;
public int dimmer;
private long startTime;
private int levtime;
private int cpoint;
private boolean gas;
private boolean brake;
private boolean left;
private boolean right;
private Font title;
URL url1;
String str = "http://www.4webgames.com";
Button b1 = new Button( "check my homepage and search for more games" );
private Thread m_DUI = null;
private int level = 1;
private int lives = 3;
private int speed = 180;
private int soundvar = 0;
private boolean wrecked = false;
private boolean m_fAllLoaded = false;
private int dn = 2;
public boolean autopilot = true;
private Image[][] cars = new Image[3][2];
private int[] driverY = new int[50];
private Image[] signs = new Image[3];
private int[] driverCar = new int[50];
private int[] driverDir = new int[50];
private int[][] upcomingCars = new int[21][2];
public boolean running = false;
private Color[] road = new Color[21];
private Color[] darkRoad = new Color[21];
private Color[] darkLines = new Color[21];
private Color[] hill = new Color[21];
private Color[] barricade = new Color[21];
private Color[] tunnel = new Color[21];
private Color[] wood = new Color[21];
private int[] xvals = new int[4];
private int[] yvals = new int[4];
private int[] xm = new int[6];
private int[] ym = new int[6];
public void actionPerformed(ActionEvent ActionEvent1)
{
try
{
url1 = new URL( str );
getAppletContext().showDocument( url1, "_blank" );
}
catch( MalformedURLException MalformedURLException2 )
{
System.out.println( "Error " + MalformedURLException2 );
}
}
private void copyRight()
{
Font Font1 = new Font( "TimesNewRoman", 1, 14 );
offscreenGraphics.setFont( Font1 );
offscreenGraphics.setColor( Color.white );
offscreenGraphics.drawString( "Original '3d Driver' by Derek Ramey", 85, 250 );
offscreenGraphics.drawString( "Visit: http://www.4webgames.com", 90, 270 );
}
public void destroy()
{
}
private void dimImage()
{
int int1;
offscreenGraphics.setColor( Color.black );
for( int1 = 0; int1 < 1000; ++int1 )
{
int int2 = (int) (Math.random() * 400.0);
int int3 = (int) (Math.random() * 300.0);
offscreenGraphics.fillRect( int2, int3, 4, 4 );
}
}
public void drawBG(Graphics Graphics1)
{
int int2;
int int3;
int int4;
if( dn == 2 )
Graphics1.setColor( new Color( 0, 14, 108 ) );
else
Graphics1.setColor( new Color( 43, 69, 255 ) );
Graphics1.fillRect( 0, 0, 800, 600 );
if( dn == 2 )
{
Graphics1.setColor( Color.white );
for( int2 = 0; int2 < 250; ++int2 )
{
int3 = (int) Math.round( Math.random() * 800.0 );
int4 = (int) Math.round( Math.random() * 600.0 );
Graphics1.drawLine( int3, int4, int3, int4 );
}
}
Graphics1.setColor( Color.gray );
for( int2 = 0; int2 < 750; ++int2 )
{
int3 = (int) Math.round( Math.random() * 800.0 );
int4 = (int) Math.round( Math.random() * 600.0 );
Graphics1.drawLine( int3, int4, int3, int4 );
}
}
private void ending()
{
Font Font1 = new Font( "TimesNewRoman", 1, 18 );
offscreenGraphics.setFont( Font1 );
offscreenGraphics.setColor( Color.white );
offscreenGraphics.drawString( "Congratulations!!! ", 145, 172 );
offscreenGraphics.drawString( "You have won at Level " + level, 125, 200 );
offscreenGraphics.drawString( "Click for next Level ", 145, 222 );
++level;
levtime = level * 10 + 40;
cpoint = 100 + level * 50;
running = false;
if( level == 4 )
{
Font Font2;
dn = 1;
init();
Font2 = new Font( "SansSerif", 1, 18 );
offscreenGraphics.setFont( Font2 );
offscreenGraphics.setColor( Color.blue );
offscreenGraphics.drawString( "Soon NightDriver wont be Nightdriver", 15, 182 );
offscreenGraphics.drawString( "anymore, because it is already morning", 15, 202 );
offscreenGraphics.drawString( "click to go on", 55, 222 );
}
}
public String getAppletInfo()
{
return "Name: DUI\r\nAuthor: Derek Ramey\r\n";
}
public void init()
{
Panel Panel1 = new Panel();
int int2;
int int3;
add( Panel1 );
setLayout( new BorderLayout() );
add( b1, "South" );
b1.addActionListener( this );
resize( 400, 300 );
zoom = new double[26];
for( int2 = 0; int2 < 25; ++int2 )
zoom[int2] = 200.0 / (double) (int2 + 1) - 8.0;
offscreenImage = createImage( 400, 300 );
offscreenGraphics = offscreenImage.getGraphics();
sound = getAudioClip( getCodeBase(), "music.au" );
sound2 = getAudioClip( getCodeBase(), "shortwah.au" );
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" + dn + ".gif" );
bush = getImage( getCodeBase(), "tree2" + dn + ".gif" );
bush2 = getImage( getCodeBase(), "tree3" + dn + ".gif" );
post = getImage( getCodeBase(), "post.gif" );
backdrop = createImage( 800, 600 );
drawBG( backdrop.getGraphics() );
updateFont = new Font( "TimesNewRoman", 1, 12 );
startMouse = new Font( "TimesNewRoman", 1, 18 );
tooSlow = new Font( "TimesNewRoman", 1, 32 );
title = new Font( "Serif", 3, 42 );
for( int3 = 0; int3 < 21; ++int3 )
{
if( dn == 2 )
{
hill[int3] = new Color( 70, 126 - int3 * 5, 30 );
road[int3] = new Color( 150 - int3 * 4, 150 - int3 * 4, 150 - int3 * 4 );
barricade[int3] = new Color( 255 - int3 * 6, 255 - int3 * 6, 255 - int3 * 6 );
wood[int3] = new Color( 150 - int3 * 4, 100 - int3 * 3, 50 - int3 * 2 );
tunnel[int3] = new Color( 75 - int3 * 3, 50 - int3 * 2, 50 - int3 * 2 );
darkRoad[int3] = new Color( 75 - int3 * 3, 75 - int3 * 3, 75 - int3 * 3 );
darkLines[int3] = new Color( 150 - int3 * 4, 150 - int3 * 4, 0 );
}
else
{
hill[int3] = new Color( 99, 183 - int3 * 5, 43 );
road[int3] = new Color( 150 - int3 * 4, 150 - int3 * 4, 150 - int3 * 4 );
barricade[int3] = new Color( 255 - int3 * 6, 255 - int3 * 6, 255 - int3 * 6 );
wood[int3] = new Color( 150 - int3 * 4, 100 - int3 * 3, 50 - int3 * 2 );
tunnel[int3] = new Color( 75 - int3 * 3, 50 - int3 * 2, 50 - int3 * 2 );
darkRoad[int3] = new Color( 75 - int3 * 3, 75 - int3 * 3, 75 - int3 * 3 );
darkLines[int3] = new Color( 150 - int3 * 4, 150 - int3 * 4, 0 );
}
}
}
public boolean keyDown(Event Event1, int int2)
{
if( int2 == 1006 )
{
left = true;
return true;
}
else if( int2 == 1007 )
{
right = true;
return true;
}
else if( int2 == 97 || int2 == 65 )
{
gas = true;
return true;
}
else if( int2 == 100 || int2 == 68 )
{
dn = 1;
return true;
}
else if( int2 == 122 || int2 == 90 )
{
brake = true;
return true;
}
else
{
if( int2 == 115 || int2 == 83 )
{
if( soundvar == 0 )
{
sound.loop();
soundvar = 1;
}
else
{
sound.stop();
soundvar = 0;
}
}
return false;
}
}
public boolean keyUp(Event Event1, int int2)
{
if( int2 == 1006 )
left = false;
else if( int2 == 1007 )
right = false;
else if( int2 == 97 || int2 == 65 )
gas = false;
else
{
if( int2 != 122 && int2 != 90 )
return false;
brake = false;
}
return true;
}
private void lose()
{
Font Font1;
if( dn == 1 )
{
dn = 2;
init();
offscreenGraphics.drawString( "Game Over", 145, 222 );
offscreenGraphics.drawString( "Click to start", 145, 222 );
}
Font1 = new Font( "TimesNewRoman", 1, 18 );
offscreenGraphics.setFont( Font1 );
offscreenGraphics.setColor( Color.white );
offscreenGraphics.drawString( "you have lost the game", 125, 160 );
offscreenGraphics.drawString( "Click to restart", 145, 176 );
level = 1;
levtime = level * 10 + 40;
cpoint = 100 + level * 50;
running = false;
lives = 3;
}
public boolean mouseDown(Event Event1, int int2, int int3)
{
if( !running )
{
newGame();
running = true;
}
return true;
}
public void newGame()
{
carPosition = 100;
facing = 0;
roadFacing = 0;
trackLoc = 0;
speed = 100;
wrecked = false;
autopilot = false;
randomizeDrivers();
randomizeTrack();
startTime = System.currentTimeMillis();
dimmer = 0;
}
private final void nextFrame(int int1)
{
int int2 = int1;
int int3 = 0;
int[] int_1darray4 = new int[26];
int[] int_1darray5 = new int[26];
int int6;
int int7;
int int8;
int int9;
int int10;
int int11;
int int12;
int int13;
int_1darray4[0] = track[trackLoc];
int6 = 0;
int7 = 0;
int8 = facing * 10;
int9 = facingZ * 10;
while( int8 < 0 )
int8 += 800;
while( int8 > 800 )
int8 -= 800;
while( int9 < 0 )
int9 += 600;
while( int9 > 600 )
int9 -= 600;
offscreenGraphics.clipRect( 0, 0, 400, 300 );
offscreenGraphics.drawImage( backdrop, -int8, -int9, (ImageObserver) this );
offscreenGraphics.drawImage( backdrop, -int8 + 800, -int9, (ImageObserver) this );
offscreenGraphics.drawImage( backdrop, -int8 + 800, -int9 + 600, (ImageObserver) this );
offscreenGraphics.drawImage( backdrop, -int8, -int9 + 600, (ImageObserver) this );
for( int10 = 1; int10 < 21; ++int10 )
{
int6 += track[int10 + trackLoc];
int7 += trackZ[int10 + trackLoc];
for( int11 = int10; int11 < 25; ++int11 )
{
int_1darray4[int11] += int6;
int_1darray5[int11] += int7;
}
}
for( int11 = 0; int11 < 21; ++int11 )
{
upcomingCars[int11][0] = 999;
upcomingCars[int11][1] = 999;
}
for( int12 = 0; int12 < 50; ++int12 )
{
if( driverY[int12] >= trackLoc && driverY[int12] <= trackLoc + 20 )
{
if( upcomingCars[driverY[int12] - trackLoc][0] == 999 )
upcomingCars[driverY[int12] - trackLoc][0] = int12;
else
upcomingCars[driverY[int12] - trackLoc][1] = int12;
}
}
for( int13 = 20; int13 > 0; --int13 )
{
int int14 = int_1darray4[int13] - carPosition / (int13 + 1) + 200 - int2 * int13;
int int15 = int_1darray4[int13 - 1] - carPosition / int13 + 200 - int2 * int13 + int2;
int int16;
int int17;
int int19;
int int20;
xvals[0] = int14 - (int) (zoom[int13] * 4.0);
xvals[1] = int14 + (int) (zoom[int13] * 4.0);
xvals[3] = int15 - (int) (zoom[int13 - 1] * 4.0);
xvals[2] = int15 + (int) (zoom[int13 - 1] * 4.0);
yvals[0] = 200 + (int) (zoom[int13] + (double) int_1darray5[int13]);
yvals[1] = yvals[0];
yvals[2] = 200 + (int) (zoom[int13 - 1] + (double) int_1darray5[int13 - 1]);
yvals[3] = yvals[2];
int16 = (int) (zoom[int13] * 4.0);
int17 = (int) (zoom[int13 - 1] * 4.0);
if( roadType[trackLoc + int13] == 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] - (300 - yvals[0]);
ym[3] = 300;
offscreenGraphics.setColor( hill[int13] );
offscreenGraphics.fillPolygon( xm, ym, 4 );
}
if( roadType[trackLoc + int13] == 1 )
{
xm[0] = xvals[3];
ym[0] = yvals[3];
xm[1] = xvals[3];
ym[1] = yvals[3] - (int) zoom[int13 - 1];
xm[2] = xvals[0];
ym[2] = yvals[0] - (int) zoom[int13];
xm[3] = xvals[0];
ym[3] = yvals[0];
offscreenGraphics.setColor( barricade[int13] );
offscreenGraphics.fillPolygon( xm, ym, 4 );
}
if( roadType[trackLoc + int13] == 2 )
{
xm[0] = xvals[3];
ym[0] = yvals[3];
xm[1] = xvals[3];
ym[1] = yvals[3] - (int) (zoom[int13 - 1] * 5.0);
xm[2] = xvals[0];
ym[2] = yvals[0] - (int) (zoom[int13] * 5.0);
xm[3] = xvals[0];
ym[3] = yvals[0];
offscreenGraphics.setColor( tunnel[int13] );
offscreenGraphics.fillPolygon( xm, ym, 4 );
}
if( yvals[2] > yvals[0] )
{
float float18;
xm[0] = int14 - int16;
xm[1] = int14 + int16;
xm[2] = int15 + int17;
xm[3] = int15 - int17;
float18 = (float) (trackLoc + int13) / 100.0F;
if( float18 == (float) Math.round( float18 ) )
offscreenGraphics.setColor( new Color( 255 - int13 * 2, 0, 0 ) );
else if( trackLoc + int13 > 5000 )
offscreenGraphics.setColor( new Color( 0, 255 - int13 * 4, 0 ) );
else
{
if( roadType[trackLoc + int13] == 1 )
offscreenGraphics.setColor( wood[int13] );
if( roadType[trackLoc + int13] == 2 )
offscreenGraphics.setColor( darkRoad[int13] );
if( roadType[trackLoc + int13] == 0 )
offscreenGraphics.setColor( road[int13] );
}
offscreenGraphics.fillPolygon( xm, yvals, 4 );
int19 = trackLoc + int13;
if( (float) int19 / 2.0F == (float) (int19 / 2) )
{
xm[0] = int14 - (int) (zoom[int13] / 8.0) - 1;
xm[1] = int14 + (int) (zoom[int13] / 8.0) + 1;
xm[3] = int15 - (int) (zoom[int13 - 1] / 8.0) - 1;
xm[2] = int15 + (int) (zoom[int13 - 1] / 8.0) + 1;
ym[0] = yvals[0];
ym[1] = yvals[0];
ym[2] = yvals[2];
ym[3] = yvals[2];
if( roadType[trackLoc + int13] == 2 )
offscreenGraphics.setColor( darkLines[int13] );
else
offscreenGraphics.setColor( Color.yellow );
offscreenGraphics.fillPolygon( xm, ym, 4 );
}
}
if( roadType[trackLoc + int13] == 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[int13] );
offscreenGraphics.fillPolygon( xm, ym, 6 );
}
if( roadType[trackLoc + int13] == 1 )
{
xm[0] = xvals[2];
ym[0] = yvals[2];
xm[1] = xvals[2];
ym[1] = yvals[2] - (int) zoom[int13 - 1];
xm[2] = xvals[1];
ym[2] = yvals[1] - (int) zoom[int13];
xm[3] = xvals[1];
ym[3] = yvals[1];
offscreenGraphics.setColor( barricade[int13] );
offscreenGraphics.fillPolygon( xm, ym, 4 );
}
if( roadType[trackLoc + int13] == 2 )
{
xm[0] = xvals[2];
ym[0] = yvals[2];
xm[1] = xvals[2];
ym[1] = yvals[2] - (int) (zoom[int13 - 1] * 5.0);
xm[2] = xvals[1];
ym[2] = yvals[1] - (int) (zoom[int13] * 5.0);
xm[3] = xvals[1];
ym[3] = yvals[1];
offscreenGraphics.setColor( tunnel[int13] );
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[int13] * 5.0);
ym[1] = ym[0];
ym[2] = yvals[2] - (int) (zoom[int13 - 1] * 5.0);
ym[3] = ym[2];
offscreenGraphics.fillPolygon( xm, ym, 4 );
if( xvals[0] > 0 )
{
xm[0] = xvals[3];
ym[0] = yvals[3] - (int) (zoom[int13 - 1] * 10.0);
xm[1] = xm[0];
ym[1] = 300;
xm[2] = xm[0] - (300 - ym[0]);
ym[2] = 300;
offscreenGraphics.setColor( hill[int13] );
offscreenGraphics.fillPolygon( xm, ym, 3 );
ym[1] = yvals[3] - (int) (zoom[int13 - 1] * 5.0);
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[int13][0] != 999 )
{
int20 = upcomingCars[int13][0];
int19 = int15 + int17 * (driverDir[int20] - 1) + int17 / 8;
offscreenGraphics.drawImage( cars[driverCar[int20]][driverDir[int20]], int19, yvals[2] - int17 * 3 / 4, int17 * 3 / 4, int17 * 3 / 4, (ImageObserver) this );
}
if( upcomingCars[int13][1] != 999 )
{
int20 = upcomingCars[int13][1];
int19 = int15 + int17 * (driverDir[int20] - 1) + int17 / 8;
offscreenGraphics.drawImage( cars[driverCar[int20]][driverDir[int20]], int19, yvals[2] - int17 * 3 / 4, int17 * 3 / 4, int17 * 3 / 4, (ImageObserver) this );
}
if( roadType[trackLoc + int13] == 0 )
{
if( roadSigns[trackLoc + int13][0] > 0 )
{
int20 = int15 - int17 * 2;
int19 = yvals[2] - (int) (zoom[int13 - 1] * 3.0);
offscreenGraphics.drawImage( signs[roadSigns[trackLoc + int13][0] - 1], int20, int19, int17, int17 / 3, (ImageObserver) this );
offscreenGraphics.drawImage( post, int20 + int17 * 19 / 40, int19 + int17 / 3, int17 / 20, int17, (ImageObserver) this );
}
if( roadSigns[trackLoc + int13][1] > 0 )
{
int20 = xvals[2];
int19 = yvals[2] - (int) (zoom[int13 - 1] * 6.0);
offscreenGraphics.drawImage( signs[roadSigns[trackLoc + int13][1] - 1], int20, int19, int17, int17 / 3, (ImageObserver) this );
offscreenGraphics.drawImage( post, int20 + int17 * 19 / 40, int19 + int17 / 3, int17 / 20, int17, (ImageObserver) this );
}
if( trees[trackLoc + int13] > 0 )
{
int20 = int15 + (int) (zoom[int13 - 1] * (double) (trees[trackLoc + int13] + 1));
int19 = yvals[2] - (int) (zoom[int13 - 1] * (double) (trees[trackLoc + int13] + 6));
if( int20 < 400 )
offscreenGraphics.drawImage( tree, int20, int19, (int) (zoom[int13 - 1] * 4.0), (int) (zoom[int13 - 1] * 7.0), (ImageObserver) this );
}
if( bushes[trackLoc + int13] > 0 )
{
int20 = int15 + (int) (zoom[int13 - 1] * (double) (bushes[trackLoc + int13] + 1));
int19 = yvals[2] - (int) (zoom[int13 - 1] * (double) (bushes[trackLoc + int13] + 6));
if( int20 < 400 )
offscreenGraphics.drawImage( bush, int20, int19, (int) (zoom[int13 - 1] * 4.0), (int) (zoom[int13 - 1] * 7.0), (ImageObserver) this );
}
if( bushestwo[trackLoc + int13] > 0 )
{
int20 = int15 + (int) (zoom[int13 - 1] * (double) (bushestwo[trackLoc + int13] + 1));
int19 = yvals[2] - (int) (zoom[int13 - 1] * (double) (bushestwo[trackLoc + int13] + 6));
if( int20 < 400 )
offscreenGraphics.drawImage( bush2, int20, int19, (int) (zoom[int13 - 1] * 4.0), (int) (zoom[int13 - 1] * 7.0), (ImageObserver) this );
}
if( trees[trackLoc + int13] == -1 )
{
int20 = int15 - (int) (zoom[int13 - 1] * 9.0);
int19 = yvals[2] - (int) (zoom[int13 - 1] * 4.0);
if( int20 > -((int) (zoom[int13 - 1] * 4.0)) )
offscreenGraphics.drawImage( tree, int20, int19, (int) (zoom[int13 - 1] * 4.0), (int) (zoom[int13 - 1] * 7.0), (ImageObserver) this );
}
if( bushes[trackLoc + int13] == -1 )
{
int20 = int15 - (int) (zoom[int13 - 1] * 9.0);
int19 = yvals[2] - (int) (zoom[int13 - 1] * 4.0);
if( int20 > -((int) (zoom[int13 - 1] * 4.0)) )
offscreenGraphics.drawImage( bush, int20, int19, (int) (zoom[int13 - 1] * 4.0), (int) (zoom[int13 - 1] * 7.0), (ImageObserver) this );
}
if( bushestwo[trackLoc + int13] == -1 )
{
int20 = int15 - (int) (zoom[int13 - 1] * 9.0);
int19 = yvals[2] - (int) (zoom[int13 - 1] * 4.0);
if( int20 > -((int) (zoom[int13 - 1] * 4.0)) )
offscreenGraphics.drawImage( bush2, int20, int19, (int) (zoom[int13 - 1] * 4.0), (int) (zoom[int13 - 1] * 7.0), (ImageObserver) this );
}
}
}
offscreenGraphics.setColor( Color.white );
offscreenGraphics.setFont( updateFont );
time = (int) ((System.currentTimeMillis() - startTime) / 1000L);
offscreenGraphics.drawString( "Checkpoints: " + (trackLoc / 100) + " (" + (cpoint / 100) + ") Speed: " + (speed / 2) + " Driving Time: " + time + " (" + levtime + ") Level: " + level + " Lives: " + lives, 5, 15 );
}
public void paint(Graphics Graphics1)
{
Graphics1.drawImage( offscreenImage, 0, 0, (ImageObserver) this );
}
private void randomizeDrivers()
{
int int1;
for( int1 = 0; int1 < 50; ++int1 )
{
driverDir[int1] = (int) (Math.random() * 2.0);
driverY[int1] = (int) (Math.random() * 4990.0) + 10;
driverCar[int1] = (int) (Math.random() * 3.0);
}
}
public void randomizeTrack()
{
int int1;
int int2;
int int3;
int int4;
int int5;
int int6;
int int7;
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];
bushestwo = new int[5100];
for( int1 = 0; int1 < 25; ++int1 )
roadSigns[int1 * 200 + (int) (Math.random() * 200.0)][(int) (Math.random() * 2.0)] = (int) (Math.random() * 3.0) + 1;
for( int2 = 0; int2 < 100; ++int2 )
{
int3 = int2 * 50 + (int) (Math.random() * 50.0);
int4 = 0;
int5 = 0;
switch( (int) (Math.random() * 3.0) )
{
case 0:
int4 = (int) (Math.random() * 5.0) + 1;
break;
case 1:
int4 = 1;
break;
case 2:
int4 = -1;
break;
default:
break;
}
trees[int3] = int4;
}
for( int3 = 0; int3 < 50; ++int3 )
{
int4 = (int) (Math.random() * 5000.0);
int5 = (int) (Math.random() * 2.0) + 1;
int6 = 1;
if( int5 == 1 )
int6 = (int) (Math.random() * 10.0) + 5;
if( int5 == 2 )
int6 = (int) (Math.random() * 25.0) + 10;
for( int7 = 0; int7 < int6; ++int7 )
roadType[int4 + int7] = int5;
}
for( int4 = 0; int4 < 100; ++int4 )
{
int5 = int4 * 50 + (int) (Math.random() * 50.0);
int6 = 0;
int7 = 0;
switch( (int) (Math.random() * 3.0) )
{
case 0:
int6 = (int) (Math.random() * 5.0) + 1;
int7 = (int) (Math.random() * 5.0) + 1;
break;
case 1:
int6 = 1;
int7 = -1;
break;
case 2:
int6 = -1;
int7 = 1;
break;
default:
break;
}
bushes[int5] = int6;
bushestwo[int5] = int7;
}
for( int5 = 1; int5 < 6; ++int5 )
{
int int8;
int int9;
int int10;
switch( int5 )
{
case 1:
int6 = 0;
int7 = 500;
int8 = 1;
int9 = 1;
break;
case 2:
int6 = 500;
int7 = 1500;
int8 = 2;
int9 = 1;
break;
case 3:
int6 = 1500;
int7 = 2500;
int8 = 3;
int9 = 2;
break;
case 4:
int6 = 2500;
int7 = 3500;
int8 = 4;
int9 = 2;
break;
default:
int6 = 3500;
int7 = 5000;
int8 = 5;
int9 = 3;
break;
}
for( int10 = 0; int10 < int5 * 30; ++int10 )
{
int int11 = (int) (Math.random() * (double) (int7 - int6) + (double) int6);
switch( (int) (Math.random() * 10.0) )
{
case 0:
case 6:
case 7:
track[int11] = (int) (Math.random() * (double) (int8 * 2 + 1)) - int8;
break;
case 1:
track[int11] = -int8;
track[int11 + 1] = -(int8 * 2);
track[int11 + 2] = -(int8 * 3);
track[int11 + 3] = -(int8 * 2);
track[int11 + 4] = -int8;
break;
case 2:
track[int11] = int8;
track[int11 + 1] = int8 * 2;
track[int11 + 2] = int8 * 3;
track[int11 + 3] = int8 * 2;
track[int11 + 4] = int8;
break;
case 3:
case 8:
case 9:
trackZ[int11] = (int) (Math.random() * (double) (int9 * 2 + 1) - (double) int9) / 2;
break;
case 4:
trackZ[int11] = -int9;
trackZ[int11 + 1] = -(int9 * 2);
trackZ[int11 + 2] = -int9;
break;
case 5:
trackZ[int11] = int9;
trackZ[int11 + 1] = int9 * 2;
trackZ[int11 + 2] = int9;
break;
default:
break;
}
}
}
}
public final void run()
{
int int3;
int int4;
double double8;
if( !m_fAllLoaded )
{
MediaTracker MediaTracker1 = new MediaTracker( this );
int int2;
MediaTracker1.addImage( cracked, 0 );
MediaTracker1.addImage( post, 0 );
MediaTracker1.addImage( tree, 0 );
MediaTracker1.addImage( bush, 0 );
MediaTracker1.addImage( bush2, 0 );
for( int2 = 0; int2 < 3; ++int2 )
MediaTracker1.addImage( signs[int2], 0 );
for( int3 = 0; int3 < 3; ++int3 )
{
for( int4 = 0; int4 < 2; ++int4 )
MediaTracker1.addImage( cars[int3][int4], 0 );
}
try
{
MediaTracker1.waitForAll();
m_fAllLoaded = !MediaTracker1.isErrorAny();
}
catch( InterruptedException unused10 )
{
}
if( !m_fAllLoaded )
{
stop();
m_Graphics.drawString( "Error loading images!", 10, 40 );
return;
}
}
randomizeTrack();
randomizeDrivers();
startTime = System.currentTimeMillis();
levtime = level * 14 + 40;
time = (int) ((System.currentTimeMillis() - startTime) / 1000L);
cpoint = 2 * (level * 70);
double8 = 0.0;
int3 = 0;
for( ;; )
{
try
{
long long9;
sleeper = System.currentTimeMillis();
int4 = facing;
if( running || autopilot )
{
nextFrame( int4 + roadFacing );
++double8;
if( !autopilot )
{
int int5;
int int6;
int int7;
if( lives < 1 )
lose();
if( carPosition < -500 || carPosition > 500 )
{
--lives;
wrecked = true;
}
if( levtime > 0 && trackLoc > cpoint )
ending();
if( upcomingCars[1][0] != 999 )
{
int5 = driverDir[upcomingCars[1][0]];
int6 = -200 + int5 * 400;
int7 = 300;
if( driverCar[upcomingCars[1][0]] == 2 )
int7 = 150;
if( carPosition < int6 + int7 && int5 == 0 )
{
--lives;
wrecked = true;
}
if( carPosition > int6 - int7 && int5 == 1 )
{
--lives;
wrecked = true;
}
}
if( upcomingCars[1][1] != 999 )
{
int5 = driverDir[upcomingCars[1][1]];
int6 = -200 + int5 * 400;
int7 = 300;
if( driverCar[upcomingCars[1][1]] == 2 )
int7 = 150;
if( carPosition < int6 + int7 && int5 == 0 )
wrecked = true;
if( carPosition > int6 - int7 && int5 == 1 )
{
wrecked = true;
--lives;
}
}
if( upcomingCars[0][0] != 999 )
{
int5 = driverDir[upcomingCars[0][0]];
int6 = -200 + int5 * 400;
int7 = 300;
if( driverCar[upcomingCars[0][0]] == 2 )
int7 = 150;
if( carPosition < int6 + int7 && int5 == 0 )
wrecked = true;
if( carPosition > int6 - int7 && int5 == 1 )
{
--lives;
wrecked = true;
}
}
if( upcomingCars[0][1] != 999 )
{
int5 = driverDir[upcomingCars[0][1]];
int6 = -200 + int5 * 400;
int7 = 300;
if( driverCar[upcomingCars[0][1]] == 2 )
int7 = 150;
if( carPosition < int6 + int7 && int5 == 0 )
{
--lives;
wrecked = true;
}
if( carPosition > int6 - int7 && int5 == 1 )
{
--lives;
wrecked = true;
}
}
}
if( wrecked == true )
{
speed = 0;
running = false;
}
if( 200.0 / (double) (speed + 1) < double8 && speed > 0 )
{
double8 -= 200.0 / (double) (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 )
updateDrivers();
else
{
offscreenGraphics.drawImage( cracked, 0, 0, 400, 300, (ImageObserver) this );
if( soundvar == 1 )
sound2.play();
}
}
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.yellow );
offscreenGraphics.setFont( title );
offscreenGraphics.drawString( "Night Driver", 120, 60 );
offscreenGraphics.setFont( updateFont );
offscreenGraphics.drawString( "Version 3.0", 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 );
offscreenGraphics.drawString( "S - Sound on/off", 175, 190 );
copyRight();
}
long9 = 80L - (System.currentTimeMillis() - sleeper);
repaint();
if( long9 < 10L )
long9 = 10L;
Thread.sleep( long9 );
if( left == true )
{
facing -= 2;
if( facing - roadFacing == -1 )
facing = roadFacing;
}
if( right == true )
{
facing += 5;
if( facing - roadFacing == 1 )
facing = roadFacing;
}
if( gas == true )
{
speed += 300 / (speed + 20) + 1;
if( speed > 200 )
speed = 200;
}
if( brake != true )
continue;
speed -= 700 / (speed + 5) + 2;
if( speed >= 0 )
continue;
speed = 0;
continue;
}
catch( InterruptedException unused11 )
{
stop();
continue;
}
}
}
public void start()
{
if( m_DUI == null )
{
sound.loop();
soundvar = 1;
m_DUI = new Thread( this );
m_DUI.start();
}
}
public void stop()
{
sound.stop();
if( m_DUI != null )
{
m_DUI.stop();
m_DUI = null;
}
}
public void update(Graphics Graphics1)
{
paint( Graphics1 );
}
private void updateDrivers()
{
++driverCount;
if( driverCount > 3 )
{
int int1;
for( int1 = 0; int1 < 50; ++int1 )
{
driverCount = 0;
if( driverDir[int1] == 0 )
{
--driverY[int1];
if( driverY[int1] == -1 )
driverY[int1] = 4999;
}
else
{
++driverY[int1];
if( driverY[int1] == 5000 )
driverY[int1] = 0;
}
}
}
}
}
Back to NightDriver
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.