/*
* jlsimJFrame.java
*
* Created on November 1, 2007, 12:01 AM
*/
package jlsim;
import javax.swing.colorchooser.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import java.util.*;
import java.io.*;
/**
*
* @author Jinyu Liu
*/
public class jlsimJFrame extends javax.swing.JFrame {
/** Creates new form jlsimJFrame */
public jlsimJFrame() {
initComponents();
//setPrefferedSize(0,0,new java.awt.Dimension(850, 600));
setSize(850,600);
setMaximizedBounds(new java.awt.Rectangle(0, 0, 850, 600));
setResizable(false);
//TrafficDraw td = new TrafficDraw();
//Rectangle oval = new Rectangle(20,30,10,20);
//Color ovalColor = new Color(0,0,0);
//add(new TrafficDraw());
//pack();
//td.addCar(jSlider1.getValue());
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// //GEN-BEGIN:initComponents
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
// jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jSlider1 = new javax.swing.JSlider();
jSeparator1 = new javax.swing.JSeparator();
jButton1 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
checkbox1 = new java.awt.Checkbox();
jComboBox1 = new javax.swing.JComboBox();
jButton2 = new javax.swing.JButton();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuRoad = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenuItem2 = new javax.swing.JMenuItem();
jMenuItem3 = new javax.swing.JMenuItem();
jMenuItem4 = new javax.swing.JMenuItem();
jMenuItem5 = new javax.swing.JMenuItem();
jMenuItem6 = new javax.swing.JMenuItem();
jMenuItemAbout = new javax.swing.JMenuItem();
jMenuItemLoad = new javax.swing.JMenuItem();
jMenuItemSave = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
jMenu3 = new javax.swing.JMenu();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jTextField3 = new javax.swing.JTextField();
jTextField4 = new javax.swing.JTextField();
td = new TrafficDraw();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("JLSim");
setMaximizedBounds(new java.awt.Rectangle(99, 99, 99, 99));
/*edited*/
td.setForeground(new java.awt.Color(55, 23, 233));
td.setPreferredSize(new java.awt.Dimension(650, 100));
org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(td);
td.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 602, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 419, Short.MAX_VALUE)
);
jLabel1.setText("Car Volume");
jSlider1.setMajorTickSpacing(10);
jSlider1.setPaintLabels(true);
jSlider1.setPaintTicks(true);
jSlider1.setSnapToTicks(true);
jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
jButton1.setText("Run Simulation");
jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jButton1MousePressed(evt);
}
});
jLabel2.setText("Car Speed (mph):");
jLabel3.setText("Acceleration:");
jLabel4.setText("Red Light Time:");
jLabel5.setText("Green Light Time:");
jLabel6.setText("Yellow Light Time:");
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "10", "20", "30", "40", "50", "60" }));
jComboBox1.setSelectedItem(getAccessibleContext());
jButton2.setText("Car Color");
jButton2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jButton2MousePressed(evt);
}
});
checkbox1.setLabel("Output Data to Text File");
jMenu1.setText("File");
jMenuItem1.setText("Exit");
jMenuItem1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItem1MousePressed(evt);
}
});
jMenuRoad.setText("Edit");
jMenuItem2.setText("Add Road (Horizontal)");
jMenuItem2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItem2MousePressed(evt);
}
});
jMenuItem3.setText("Add Road (Vertical)");
jMenuItem3.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItem3MousePressed(evt);
}
});
jMenuItemLoad.setText("Load Scenario");
jMenuItemLoad.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemLoadMousePressed(evt);
}
});
jMenuItemSave.setText("Save Scenario");
jMenuItemSave.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemSaveMousePressed(evt);
}
});
jMenuRoad.add(jMenuItem2);
jMenuRoad.add(jMenuItem3);
jMenu1.add(jMenuItemLoad);
jMenu1.add(jMenuItemSave);
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
jMenuBar1.add(jMenuRoad);
jMenu2.setText("View");
jMenuItem4.setText("Zoom Standard");
//jMenuItem4.addMouseListener...
jMenuItem5.setText("Zoom In");
//jMenuItem5.addMouseListener...
jMenuItem6.setText("Zoom Out");
//jMenuItem6.addMouseListener...
jMenu2.add(jMenuItem5);
jMenu2.add(jMenuItem6);
jMenu2.add(jMenuItem4);
jMenuBar1.add(jMenu2);
jMenu3.setText("Help");
jMenuItemAbout.setText("About");
jMenuItemAbout.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
jMenuItemAboutMousePressed(evt);
}
});
jMenu3.add(jMenuItemAbout);
jMenuBar1.add(jMenu3);
setJMenuBar(jMenuBar1);
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(td, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 602, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jSeparator1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(39, 39, 39)
.add(jButton1))
.add(layout.createSequentialGroup()
.add(0, 0, 0)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jSlider1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel1)))
.add(layout.createSequentialGroup()
.add(4, 4, 4)
.add(jLabel2)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 83, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(layout.createSequentialGroup()
.add(33, 33, 33)
.add(checkbox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(layout.createSequentialGroup()
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
.add(jButton2)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
.add(jLabel4, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(jLabel3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(jLabel5, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(jLabel6, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.add(23, 23, 23)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
.add(org.jdesktop.layout.GroupLayout.LEADING, jTextField2)
.add(org.jdesktop.layout.GroupLayout.LEADING, jTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 46, Short.MAX_VALUE)
.add(org.jdesktop.layout.GroupLayout.LEADING, jTextField3)
.add(org.jdesktop.layout.GroupLayout.LEADING, jTextField4))))
.add(22, 22, 22))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(td, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
.add(layout.createSequentialGroup()
.add(jLabel1)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jSlider1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(14, 14, 14)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel2)
.add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jButton2)
.add(8, 8, 8)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel3)
.add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(20, 20, 20)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel4))
.add(18, 18, 18)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jTextField3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel5))
.add(22, 22, 22)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jTextField4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel6))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 107, Short.MAX_VALUE)
.add(checkbox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jButton1)
.addContainerGap())
.add(jSeparator1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
);
pack();
}// //GEN-END:initComponents
private void jButton2MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton2MousePressed
// TODO add your handling code here:
td.drawCar();
}//GEN-LAST:event_jButton2MousePressed
private void jButton1MousePressed(java.awt.event.MouseEvent evt) {
if(!td.doesRoadExist())
{
JOptionPane.showMessageDialog(this, "No roads. Please add a road to continue.");
}
else
{
td.addCar(jSlider1.getValue(),Integer.parseInt(""+jComboBox1.getSelectedItem()));
td.setVariables(Integer.parseInt(jTextField1.getText()),Integer.parseInt(jTextField2.getText()),Integer.parseInt(jTextField3.getText()),Integer.parseInt(jTextField4.getText()),checkbox1.isEnabled());
}
}
private void jMenuItem1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMenuItem1MousePressed
// TODO add your handling code here:
System.exit(0);
}//GEN-LAST:event_jMenuItem1MousePressed
private void jMenuItemLoadMousePressed(java.awt.event.MouseEvent evt) {
String fileinput = JOptionPane.showInputDialog(this, "Please enter file name to load data from:");
try {
input = new BufferedReader(new FileReader(fileinput));
carvolume = Integer.parseInt(input.readLine());
System.out.println("Loaded Car Volume:"+carvolume);
carvelocity = Integer.parseInt(input.readLine());
System.out.println("Loaded Car Velocity:" + carvelocity);
numhorizontal = Integer.parseInt(input.readLine());
System.out.println("Number of Loaded Horizontal Roads:"+ numhorizontal);
System.out.println("Horizontal Road Positions:");
horizontalroads = new int[numhorizontal];
for(int x=0;x-60)
{
tooclose=1;
}
}
}
catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(this, "Please enter a NUMERICAL response");
valid=false;
exception=1;
}
if((query<0 || query> 520) || valid==false)
{
JOptionPane.showMessageDialog(this, "Not a valid position to add a road. Please enter a value between 0 and 520");
}
if(tooclose==1)
{
JOptionPane.showMessageDialog(this, "Too close to a previously placed road.");
}
else if(query>=0 & query <=520 & exception==0)
{
td.addRoad(query);
}
valid=true;
}
private void jMenuItem3MousePressed(java.awt.event.MouseEvent evt) {
int[] roads = td.getRoads(9001);
int tooclose = 0;
int exception =0;
try
{
query = Integer.parseInt(JOptionPane.showInputDialog("Enter y Position to add road at:"));
for(int x=0;x-60)
{
tooclose=1;
}
}
}
catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(this, "Please enter a NUMERICAL response");
valid=false;
exception=1;
}
if((query<0 || query> 570) || valid==false)
{
JOptionPane.showMessageDialog(this, "Not a valid position to add a road. Please enter a value between 0 and 570");
}
if(tooclose==1)
{
JOptionPane.showMessageDialog(this, "Too close to a previously placed road.");
}
else if(query>=0 & query<=570 & exception==0)
{
td.addRoad2(query);
}
valid=true;
}
/**
* @param args the command line arguments
*/
private void jMenuItemAboutMousePressed(java.awt.event.MouseEvent evt) {
JOptionPane.showMessageDialog(this, "JLSim (C) 2008 by Jinyu Liu" + "\n" +
"Note: After the simulation starts running, you may not change the car volume " +
"\n"+"but you may change the speed at which the cars move"+"\n"+"along with the acceleration variable and the individual light lengths."+"\n"+"PLEASE INPUT POSITIVE INTEGERS!");
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new jlsimJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenu jMenu3;
private javax.swing.JMenu jMenuRoad;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
//private javax.swing.JPanel jPanel1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JSlider jSlider1;
// End of variables declaration//GEN-END:variables
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenuItem jMenuItem3;
private javax.swing.JMenuItem jMenuItem4;
private javax.swing.JMenuItem jMenuItem5;
private javax.swing.JMenuItem jMenuItem6;
private javax.swing.JMenuItem jMenuItemAbout;
private javax.swing.JMenuItem jMenuItemLoad;
private javax.swing.JMenuItem jMenuItemSave;
private java.awt.Checkbox checkbox1;
private int query;
private boolean valid=true;
private BufferedReader input;
private FileOutputStream output;
private PrintStream outfile;
private int carvolume;
private int carvelocity;
private int numhorizontal;
private int numvertical;
private int[] horizontalroads;
private int[] verticalroads;
private TrafficDraw td;
}
/*org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 602, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 419, Short.MAX_VALUE)
);*/
class TrafficDraw extends javax.swing.JPanel {
private Car[] cararray;
private TrafficLight[] lightarray;
private int lightcount=0;
//private int[] carposarray;
private int[] roadpos;
private int[] roadpos2;
private int[] spawnpos;
private int[] spawnpos2;
private Color[] colorarray;
//explosions.. just for fun
private int[] explosionpos;
private Color carcolor;
private int numcars;
private int startx;
private int starty;
private int highbound=101;
private boolean clearpanel=false;
private boolean done=false;
private boolean colorbool=true;
private int maxvelocity;
private int accelerationrate;
private int count=0;
private int xincrement;
private int yincrement;
private boolean road;
private boolean road2;
private int roadx;
private int roadx2;
private int roady;
private int spawnx;
private int spawnx2;
private int spawny;
private int lightx=0;
private int explosionx;
private int colorvar;
private int length;
private int width;
private int tempcount1;
private int tempcount2;
private int initialcarcount=0;
private Random generator;
private int[] intersectionpos; //<- may not be needed
//timer: private Timer timer = new Timer(200);
private int redlength;
private int greenlength;
private int yellowlength;
private boolean output2file=false;
private boolean lightsadded=false;
private boolean programstarted=false;
public TrafficDraw()
{
setBackground(Color.WHITE);
carcolor = Color.cyan;
startx=10;
starty=10;
maxvelocity=0;
accelerationrate=0;
roadpos = new int[2*highbound];
roadpos2 = new int[2*highbound];
cararray = new Car[highbound];
//carposarray = new int[2*highbound];
spawnpos = new int[2*highbound];
spawnpos2 = new int[2*highbound];
explosionpos = new int[highbound*highbound];
colorarray = new Color[7];
lightarray = new TrafficLight[2*highbound];
colorarray[0]= Color.ORANGE;
colorarray[1]= Color.CYAN;
colorarray[2]= Color.BLACK;
colorarray[3]= Color.BLUE;
colorarray[4]= Color.GREEN;
colorarray[5]= Color.YELLOW;
colorarray[6]= Color.RED;
xincrement= 2;
yincrement= 2;
colorvar=0;
roadx=0;
roadx2=0;
spawnx=0;
spawnx2=0;
explosionx=0;
tempcount1=0;
tempcount2=0;
generator=new Random();
road=false;
road2 = false;
System.out.println("Traffic Draw");
}
public void paint(Graphics g)
{
super.paint(g);
//g.setColor(carcolor);
//g.fillOval(20,30,10,20);
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(carcolor);
/*Shape shape2 = new Rectangle2D.Double (65.0, 35.0, 70.0, 70.0);
Area area2 = new Area (shape2);*/
//g2.fill(area2);
//g2.draw(area2);
int y=0;
int lighty=0;
//horizontal roads
if(road==true)
{
starty=spawnpos[0];
startx=-10;
g2.setPaint(Color.LIGHT_GRAY);
int count=20;
for(int x=0;x50*redlength)
{
lightarray[lighty].setLightColor(Color.GREEN);
lightarray[lighty].reset();
}
if(currcolor==Color.GREEN && lightarray[lighty].getLightCount()>50*greenlength)
{
lightarray[lighty].setLightColor(Color.YELLOW);
lightarray[lighty].reset();
}
if(currcolor==Color.YELLOW && lightarray[lighty].getLightCount()>50*yellowlength)
{
lightarray[lighty].setLightColor(Color.RED);
lightarray[lighty].reset();
}
g2.setPaint(lightarray[lighty].getLightColor());
System.out.println("Colorrrr:"+lightarray[lighty].getLightColor());
//System.out.println("TESTING"+lightarray[lighty].getLightColor());
Area l2= new Area(l);
g2.fill(l2);
lighty++;
//System.out.println("lighty vars:"+lighty);
}
lighty=0;
while(cararray[y] != null)
{
if(colorbool=true)
{
g2.setPaint(colorarray[colorvar]);
}
Shape temp;
if(cararray[y].getOrientation()==false)
{
temp = new Rectangle2D.Double(cararray[y].getCarXPos(),cararray[y].getCarYPos(),20,8);
}
else
{
temp = new Rectangle2D.Double(cararray[y].getCarXPos(),cararray[y].getCarYPos(),8,20);
}
Area areatemp= new Area(temp);
g2.fill(areatemp);
g2.draw(areatemp);
y++;
if(colorbool=true)
{
colorvar++;
if(colorvar >= 2)
colorvar=0;
}
}
colorbool=false;
//explosions .. for fun.. **currently disabled because too many collisions occur (random velocities)**
/*for(int x=0;x<10201;x+=2)
{
if(explosionpos[x]>0)
{
g.drawImage(new ImageIcon("jlsim/explosion.jpeg").getImage(),explosionpos[x],explosionpos[x+1],null);
}
}*/
//g.drawImage(new ImageIcon("jlsim/explosion.jpeg").getImage(),50,50,null);
if(done==true)
updateCars();
colorbool=false;
}
public void drawCar()
{
if(carcolor == Color.cyan)
carcolor=Color.ORANGE;
else
carcolor=Color.cyan;
repaint();
}
public void addCar(int numcars2,int carspeed)
{
programstarted=true;
maxvelocity= carspeed;
xincrement=maxvelocity/10;
yincrement=maxvelocity/10;
//int initialcarcount=numcars2;
if(done)
{
for(int rtr=0;rtr= 500)
{
if(startx<-10)
{
startx+=10;
}
starty+=20;
tempcount1=1;
}
else
{
if(tempcount1!=1)
{
startx-=30;
}
}
x++;
}
if(road2)
{
Car test = new Car(maxvelocity,accelerationrate, carcolor, 1, "", startx, starty,true);
//cararray[x]=(new Rectangle2D.Double (startx, starty, 8, 20));
cararray[x]=test;
width=test.getWidth();
length=test.getLength();
//carposarray[y]=test.getCarXPos();
//carposarray[y+1]=test.getCarYPos();
if(starty>=550)
{
starty=-10;
startx+=20;
}
else
{
starty-=30;
}
x++;
}
}
initialcarcount=numcars2;
}
done=true;
updateCars();
}
public void updateCars()
{
/*for(int y=0;y=570)
{
xincrement=-maxvelocity/10;
}
if(carposarray[y]<=0)
{
xincrement=maxvelocity/10;
}
if(carposarray[y+1]<=0)
{
yincrement=maxvelocity/10;
}
if(carposarray[y+1]>=540)
{
yincrement=-maxvelocity/10;
}*/
/***explosions currently disabled
if(carposarray[y]>=carposarray[y+2])
{
explosionpos[explosionx]=carposarray[y];
explosionpos[explosionx+1]=carposarray[y+1];
explosionx+=2;
}***/
if(cararray[x].getOrientation() == false)
{
cararray[x].setCarXPos(cararray[x].getCarXPos() + (int)cararray[x].getVelocity()/10);
//Currently, cars only move horizontally. To be expanded eventually.
//carposarray[y+1]=carposarray[y+1]+yincrement;
if(cararray[x].getCarXPos()>570)
{
int rand = generator.nextInt(spawnx);
boolean tbool = generator.nextBoolean();
//int randint = generator.nextInt(3);
if((tbool==true) || spawnx2==0)
{
cararray[x].setCarXPos(-10);
cararray[x].setCarYPos(spawnpos[rand]);
}
if(tbool==false && spawnx2>0)
{
rand=generator.nextInt(spawnx2);
cararray[x].setCarYPos(-10);
cararray[x].setCarXPos(spawnpos2[rand]);
cararray[x].setOrientation(true);
}
/*psuedocode
if(carposarray[y].getVelocity < 0 && carposarray[y].getOrientation ==true)
{
//car is moving NORTH and has VERTICAL orientation
carposarray[y+1]=carposarray[y+1]-yincrement;
}
if(carposarray[y].getVelocity > 0 && carposarray[y].getOrientation ==true)
{
//car is moving SOUTH and has VERTICAL orientatioin
carposarray[y+1]=carposarray[y+1]-yincrement;
}
if(carposarray[y].getVelocity <0 && carposarray[y].getOrientation == false)
{
//car is moving WEST and has HORIZONTAL orientation
carposarray[y]=carposarray[y] - xincrement;
}
if(carposarray[y].getVelocity >0 && carposarray[y].getOrientation == false)
{
//car is moving EAST and has HORIZONTAL orientation
carposarray[y]=carposarray[y]+ xincrement;
}
*/
//??cararray[x]=(new Car(cararray[x].getVelocity(), cararray[x].getAcceleration(), carcolor, cararray[x].getCarSize(),"",cararray[x].getCarXPos()+5,cararray[x].getCarYPos()+5,cararray[x].getOrientation()));
}
}
if(cararray[x].getOrientation() == true)
{
cararray[x].setCarYPos(cararray[x].getCarYPos()+(int)cararray[x].getVelocity()/10);
if(cararray[x].getCarYPos() >548)
{
int rand=generator.nextInt(spawnx2);
boolean tbool = generator.nextBoolean();
if((tbool==true) || spawnx==0)
{
cararray[x].setCarYPos(-10);
cararray[x].setCarXPos(spawnpos2[rand]);
}
if(tbool==false && spawnx > 0)
{
rand=generator.nextInt(spawnx);
cararray[x].setCarXPos(-10);
cararray[x].setCarYPos(spawnpos[rand]);
cararray[x].setOrientation(false);
}
}
}
repaint();
/*if(time2-time1 < 1000/60)
{
Thread.sleep(1000/60 - (time2-time1));
}*/
/*while((time2-time1) < 1000)
{
time2=System.currentTimeMillis();
}
*/
}
try { Thread.sleep(25); } catch (Exception e) {}
}
public void addRoad(int xpos)
{
roadpos[roadx]=xpos;
startx= xpos;
starty= -30;
spawnpos[spawnx]=xpos;
spawnpos[spawnx+1]=xpos+15;
roadx++;
spawnx+=2;
road=true;
repaint();
}
public void addRoad2(int ypos)
{
roadpos2[roadx2]=ypos;
starty=ypos;
startx=-30;
spawnpos2[spawnx2]=ypos;
spawnpos2[spawnx2+1]=ypos+15;
roadx2++;
spawnx2+=2;
road2=true;
repaint();
}
public boolean doesRoadExist()
{
return road || road2;
}
public void loadSelections(int carvolume, int carvelocity, int numhorizontal, int[] horizontal, int numvertical, int[] vertical)
{
for(int x=0;x0 && gtime>0 && ytime>0 && lightsadded==true)
{
for(int x=0;x