/* * 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