import java.applet.*; import java.awt.*; import ruum.*; import java.util.Date; public class k3 extends Applet implements Runnable{ Image pilt; Graphics piltg; TextArea ta1=new TextArea(5, 40); tulemused[] tulemus=new tulemused[100]; tsisu ts=new tsisu(); Thread tr; Nelinurk[] triip=new Nelinurk[100], post=new Nelinurk[10]; Nelinurk n1=new Nelinurk(new Punkt(-10, -10, 500), new Punkt(10, -10, 500), new Punkt(10, -10, 400), new Punkt(-10, -10, 400)); Nelinurk tee=new Nelinurk(new Punkt(-350, 0, 10000000), new Punkt(350, 0, 10000000), new Punkt(350, 0, -100), new Punkt(-350, 0, -100)); Nelinurk auto2=new Nelinurk(new Punkt(10, 300, 2000), new Punkt(250, 300, 2000), new Punkt(10, 0, 2000)); Punkt silm; int a1koht, a2koht, triibujn=0, postijn=0, sagedus=10, karv=0, oaeg, parv=100; int tulemustearv=0, garv=-1; double a1kiirus=10, a2kiirus=10, muutus=0.1, kiirendus=5; boolean gaas1=false, gaas2=false, pidur1=false, pidur2=false, moot=false; long aeg1, aeg2; public void init(){ setLayout(new BorderLayout()); ts.resize(300, 120); add("South", ts); ts.repaint(); pilt=createImage(400, 400); piltg=pilt.getGraphics(); piltg.translate(200, 100); // trm.show(); // trm.joonista_ring(20, 20, false); for(int i=0; i<100; i++){ triip[i]=new Nelinurk(new Punkt(-10, 0, i*500), new Punkt(10, 0, i*500), new Punkt(-10, 0, i*500-100));} triibujn=99; for(int i=0; i<10; i++) post[i]=new Nelinurk(new Punkt(400, 100, 10000*i), new Punkt(420, 100, 10000*i), new Punkt(400, 0, 10000*i)); postijn=9; muutus=kiirendus/sagedus; oaeg=800/sagedus; aeg1=(new Date()).getTime(); requestFocus(); } public void start(){tr=new Thread(this); tr.start();} public void run(){ a1koht=0; for(int kr=5; kr<30; kr+=5) ts.piltg.drawString(Integer.toString(kr), kr*12, 100); ts.piltg.drawString("m/s", 360, 100); for(int vm=0; vm<70; vm+=10) ts.piltg.drawString(Integer.toString(vm), 1, 100-100*vm/80); ts.piltg.drawString("m", 1, 10); ts.repaint(); while(true){ piltg.setColor(new Color(200, 200, 255)); piltg.fillRect(-200, -100, 400, 100); piltg.setColor(new Color(220, 255, 220)); piltg.fillRect(-200, 0, 400, 300); piltg.setColor(Color.black); silm=new Punkt(150, 80, a1koht); tee.joonista(piltg,silm); for(int j=0; j<10; j++)post[j].joonista(piltg, silm); // System.out.println(post[1].toString()); piltg.setColor(Color.white); for(int j=0; j<100; j++) triip[j].joonista(piltg, silm); auto2.joonista(piltg, silm); a2koht=auto2.punkt[0].z; if(kontroll_korras())repaint(); try{ tr.sleep(oaeg);} catch(Exception e){} triipejuurde(); postejuurde(); if(gaas1&a1kiirus<50)a1kiirus+=muutus; if(pidur1&a1kiirus>=0)a1kiirus-=muutus; if(gaas2&a2kiirus<30)a2kiirus+=muutus; if(pidur2&a2kiirus>=0)a2kiirus-=muutus; String kr=Double.toString(a1kiirus*3.6); int pikkus=kr.indexOf('.'); showStatus((pikkus>0)?kr.substring(0, pikkus)+" km/h":kr+" km/h"); a1koht=a1koht+(int)(a1kiirus*100/sagedus); auto2.liida(new Punkt(0, 0, (int)(a2kiirus*100/sagedus))); karv++; } } public boolean kontroll_korras(){ if(a1koht>=a2koht){a1kiirus=0;piltg.setColor(Color.red); piltg.fillRect(-200, -100, 400, 300); repaint(); try{tr.sleep(2000);} catch(Exception e){}; if(moot){tulemus[tulemustearv].pauk=true; minema();} a1koht-=10; return false;} if(moot){if(a2kiirus<=0&a1kiirus<=0){ tulemus[tulemustearv].pauk=false; minema(); }} if(karv==parv){ System.out.println("Pidurialgus"); if(Math.abs(a1kiirus-a2kiirus)<30){ pidur2=true; moot=true; tulemus[tulemustearv]=new tulemused(); tulemus[tulemustearv].vahe=a2koht-a1koht; tulemus[tulemustearv].kiirus=a2kiirus;} else parv+=(int)(100*Math.random()); } if(karv==garv){gaas2=false; System.out.println("k2="+a2kiirus+" aega"+(karv-parv));} return true; } public void minema(){moot=false; pidur2=false; parv=karv+50+(int)(150*Math.random()); garv=karv+5+(int)(25/muutus*Math.random()); gaas2=true; ta1.appendText(Integer.toString(tulemus[tulemustearv].vahe)+" "+ Double.toString(tulemus[tulemustearv].kiirus)+" "+ tulemus[tulemustearv].pauk+"\n"); ts.joonista_ring( (int)Math.round(tulemus[tulemustearv].kiirus*12), 100-tulemus[tulemustearv].vahe/80, tulemus[tulemustearv].pauk); tulemustearv++;} public void triipejuurde(){ int algkoht=triip[triibujn].punkt[0].z; while(triip[(triibujn<99)?triibujn+1:0].punkt[0].z