import java.applet.Applet;
import java.awt.*;
public class Mota extends Applet implements Runnable{
 sona sonad[]=new sona[30];
 int juhud[]=new int[30];
 Image pilt, sahver;
 Graphics piltg, sahverg;
 Thread tr;
 int pikkus, korgus, tkoht=0, lihtnr=0, isekoht=0;
 String liht[]=new String[5];
 Button nupp=new Button("OK");
 Label l1=new Label(), 
l2=new Label("Selgema mudeli koostamiseks tuleb teha moned lihtsustused");
Panel p1=new Panel(), p2=new Panel();

public void init(){
 liht[0]="Tunnel is perfect condition, no curves";
 liht[1]="Drivers behave perfectly and they have no accidents";
 liht[2]="All vechiles are in pervect condition, same type";
 liht[3]="Speed and separation distance of vechiles is constant";
 liht[4]="Flow is continous";
/*l1.setText(liht[0]);
  p1.setLayout(new BorderLayout());
  p1.add("Center", l1);
  p1.add("East", nupp);
  p2.setLayout(new GridLayout(1, 2));
  p2.add(l2);
  p2.add(p1);

  this.setLayout(new BorderLayout());*/
  add(nupp);
//    nupp.hide(); l1.hide(); l2.hide();
  Dimension d=this.size();
  pilt=createImage(d.width, d.height);
  piltg=pilt.getGraphics();
  sahver=createImage(d.width, d.height);
  sahverg=sahver.getGraphics();
  sahverg.setColor(Color.white);
  sahverg.fillRect(0, 0, 400, 400);
  /*sonad[ 0]=new sona(piltg, "Sild", 100, 100);
  sonad[5]=new sona(piltg, "Masin", 300, 100);
  sonad[10]=new sona(piltg, "Inimene", 200, 300);
  for(int i=0; i<15; i+=5){sonad[i ].varv(Color.red);
    sonad[i].joonista();} */
  sonad[0]=new sona(piltg, "Tunnel", 100, 100);
  sonad[1]=new sona(piltg, "length", 80, 80);
  sonad[2]=new sona(piltg, "height", 180, 80);
  sonad[3]=new sona(piltg, "width", 80, 120);
  sonad[4]=new sona(piltg, "1 way/2 ways", 180, 120);
  sonad[5]=new sona(piltg, "lighting", 192, 100);
  sonad[6]=new sona(piltg, "ventilation", 40, 70);
  sonad[7]=new sona(piltg, "curves", 140, 65);
  sonad[8]=new sona(piltg, "surface", 30, 130);
  sonad[9]=new sona(piltg, "inclanation", 60, 142);

  sonad[10]=new sona(piltg, "Vechiles" , 200, 150);
  sonad[11]=new sona(piltg, "type", 180, 130);
  sonad[12]=new sona(piltg, "size", 180, 170);
  sonad[13]=new sona(piltg, "length", 280, 132);
  sonad[14]=new sona(piltg, "age", 280, 168);
  sonad[15]=new sona(piltg, "speed", 290, 120);
  sonad[16]=new sona(piltg, "accidents", 270, 160);
  sonad[17]=new sona(piltg, "separator distance", 260, 175);
  sonad[18]=new sona(piltg, "flow", 170, 150);
  sonad[19]=new sona(piltg, "weigth", 190, 140);
  sonad[20]=new sona(piltg, "Drivers", 50, 220);
  sonad[21]=new sona(piltg, "sex", 40, 205);
  sonad[22]=new sona(piltg, "age", 35, 235);
  sonad[23]=new sona(piltg, "temperament", 80, 208);
  sonad[24]=new sona(piltg, "time", 100, 232);
  

 for(int i=0; i<25; i+=10) {sonad[i].varv(Color.red); sonad[i].joonista();}
  vahetused();
 repaint();
}

void ilmne(){
System.out.println("ilmneb tkoht="+tkoht);
 sonad[juhud[tkoht]].varv(Color.black);
 sonad[juhud[tkoht++]].joonista();
repaint();
}

void vahetused(){
int koht=1, a, b, abi;
 for(int i=0; i<23; i++){
 juhud[i]=koht++;if(koht==10)koht++; if(koht==20)koht++;}
// for(int i=0; i<25; i++)System.out.println(juhud[9]);
 for(int i=0; i<100; i++){
  a=(int)(Math.random()*22);
  b=(int)(Math.random()*22);
  abi=juhud[a]; juhud[a]=juhud[b]; juhud[b]=abi;
 } 
}

public void start(){tr=new Thread(this); tr.start();}
public void run(){
 int i;
 while(tr!=null){
 if (isekoht<22){
  System.out.println("isekoht="+isekoht);
  if(!((isekoht==10)|(isekoht==20))){isekoht++;ilmne();}
 else {nupp.setLabel("More"); nupp.show();}
  try{tr.sleep(500);} catch(Exception e){}} else
 if (isekoht==22){for(i=0; i<25; i++)sonad[i].juhusiht();isekoht++;} else
 if (isekoht<900){
 if (isekoht==600)isekoht=800;
 piltg.setColor(Color.white);
for(int j=0; j<40; j++)piltg.fillRect(j*10, 0, 10, 400);
 piltg.setColor(Color.black);
 for(i=0; i<25; i++){sonad[i].servliigu(); }
    try{tr.sleep(20);  } catch(Exception e){}
 repaint();
    } else
 if(isekoht<1050){
 piltg.setColor(Color.white);
for(int j=0; j<40; j++)piltg.fillRect(j*10, 0, 10, 400);
 piltg.setColor(Color.black);
  if(isekoht<950){
   if (isekoht==900)for(i=0; i<10; i++)sonad[i].suund(10, 20+15*i, 200);
   for(i=0; i<10; i++)sonad[i].edasi();
   for(i=10; i<25; i++)sonad[i].servliigu();}
  else if(isekoht<1000){
   if (isekoht==950)for(i=10; i<20; i++)sonad[i].suund(120, 20+15*i-150, 150);
   for(i=0; i<20; i++)sonad[i].edasi();
   for(i=20; i<25; i++)sonad[i].servliigu();}
  else if(isekoht<1050){
   if (isekoht==1000)for(i=20; i<25; i++)sonad[i].suund(250, 20+15*i-300, 100);
   for(i=0; i<25; i++)sonad[i].edasi();}
  try{tr.sleep(20);} catch(Exception e){}
  }
 else
 if (isekoht<1100){
 piltg.setColor(Color.white);
for(int j=0; j<40; j++)piltg.fillRect(j*10, 0, 10, 400);
piltg.setColor(Color.black);
  for(i=0; i<25; i++)sonad[i].edasi();
      try{tr.sleep(20);  } catch(Exception e){}
      } 
 else
 if (isekoht==1100){
 nupp.show(); //l1.show(); l2.show();
System.out.println("nupp naha");
 nupp.move(350, 200);
   }
if(isekoht==3000){
 piltg.setColor(Color.white);
for(int j=0; j<40; j++)piltg.fillRect(j*10, 0, 10, 400);
piltg.setColor(Color.black);
sonad[13].joonista(); sonad[15].joonista();
sonad[17].joonista(); sonad[18].joonista();
sonad[13].suund(75, 170, 200); sonad[15].suund(75, 185, 200);
sonad[17].suund(75, 200, 200); sonad[18].suund(75, 215, 200);
for(i=0; i<200; i++){
 piltg.setColor(Color.white);
 for(int j=0; j<40; j++)piltg.fillRect(j*10, 0, 10, 400);
 piltg.setColor(Color.black);

 sonad[13].edasi(); sonad[15].edasi();
                         sonad[17].edasi(); sonad[18].edasi();
                         repaint();
 try{tr.sleep(20);}catch(Exception e){}
                         }
 piltg.setColor(Color.white);
 for(int j=0; j<40; j++)piltg.fillRect(j*10, 0, 10, 400);
 piltg.setColor(Color.black);
piltg.drawString("Field list", 40, 130);

piltg.drawString("Length of veschile", 75, 170);
piltg.drawString("Speed  of veschile", 75, 185);
piltg.drawString("Separation distance", 75, 200);
piltg.drawString("Flow", 75, 215);

piltg.drawString("l  m", 240, 170);
piltg.drawString("v  m/s", 240, 185);
piltg.drawString("d  m", 240, 200);
piltg.drawString("f  veschile/sec", 240, 215);
repaint();
tr=null;
 }


 if((isekoht<1200)&(isekoht>22))isekoht++;
 if(isekoht<=1100) repaint();       
}}
public void stop(){tr=null;}
public void paint(Graphics g){
 g.drawImage(pilt, 0, 0, this);
}
public void update(Graphics g){paint(g);} 
public boolean action(Event e, Object arg){
 if (e.target.equals(nupp)){
if(isekoht<25){isekoht++; nupp.hide();}
else
{
if(lihtnr==0){for(int i=1; i<10; i++)sonad[i].muudavarv(Color.gray);
  piltg.setColor(Color.black);
  piltg.drawString(liht[lihtnr++],20, 200+15*lihtnr);}
else if(lihtnr==1){
 sonad[3].muudavarv(Color.gray);
 sonad[16].muudavarv(Color.gray);
 sonad[20].muudavarv(Color.gray);
 sonad[21].muudavarv(Color.gray);
 sonad[22].muudavarv(Color.gray);
 sonad[24].muudavarv(Color.gray);
  piltg.setColor(Color.black);   piltg.drawString(liht[lihtnr++],20, 200+15*lihtnr);}
else if(lihtnr==2){
 sonad[11].muudavarv(Color.gray);
 sonad[12].muudavarv(Color.gray);
 sonad[14].muudavarv(Color.gray);
 sonad[19].muudavarv(Color.gray);
  piltg.setColor(Color.black);   piltg.drawString(liht[lihtnr++],20, 200+15*lihtnr);}
else if(lihtnr==3){sonad[23].muudavarv(Color.gray);
  piltg.setColor(Color.black);   piltg.drawString(liht[lihtnr++],20, 200+15*lihtnr);}
else if(lihtnr==4){nupp.hide(); l1.hide(); l2.hide();
  piltg.setColor(Color.black);   piltg.drawString(liht[lihtnr++],20, 200+15*lihtnr);
  isekoht=3000;}
 }   }
repaint();
return true;
}

}
