/** P6rkamine tasandil (5p) * Kaks ringi liiguvad Ristkülikukujulisel pinnal p6rgates vastu servi kui teineteist * arvestades fyysikaseadusi */ import java.awt.*; import java.awt.event.*; import java.awt.event.KeyEvent; public class HillarpEksam5 extends Frame implements Runnable{ //- kui veebis siis Frame=applet static int ServX=300, ServY=500; //- raami parem serv ja alumine serv int Ring1X=100, Ring1Y=50, Ring1R=15; //- ringi 1 algkoordinaadid ja raadius int Samm1X=1, Samm1Y=1; //- ringi 1 liikumissamm x ja y suunas int Ring2X=ServX-50, Ring2Y=ServY-50, Ring2R=15; //- ringi 2 algkoordinaadid ja raadius int Samm2X=1, Samm2Y=1; //- ringi 2 liikumissamm x ja y suunas int menyyriba=20; //- raami menyyriba laius int kiirus=5; //- uue pildi joonistamise kiirus public HillarpEksam5(){ setTitle("Põrkavad pall"); setSize(ServX,ServY); setVisible(true); addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); }//windowevent } //windowadapter ); //windowlistener new Thread(this).start(); } public void run(){ while(true){ p6rka(); /** seni kuni takistusi ei ole */ Ring1X += Samm1X; Ring1Y += Samm1Y; Ring2X += Samm2X; Ring2Y += Samm2Y; /** servaga p6rkumisel Samm1X Samm2X muutmine vastupidiseks */ if ((Ring1X - Ring1R + Samm1X < 0) || (Ring1X + Ring1R + Samm1X > ServX)) Samm1X = -Samm1X; if ((Ring2X - Ring2R + Samm2X < 0) || (Ring2X + Ring2R + Samm2X > ServX)) Samm2X = -Samm2X; /** servaga põrkumisel Samm1Y ja samm 2Y muutmine Vasupidiseks*/ if ((Ring1Y - Ring1R + Samm1Y < 0+menyyriba) || (Ring1Y + Ring1R + Samm1Y > ServY)) Samm1Y = -Samm1Y; if ((Ring2Y - Ring2R + Samm2Y < 0+menyyriba) || (Ring2Y + Ring2R + Samm2Y > ServY)) Samm2Y = -Samm2Y; /** Ringi 1 kontroll Ringi 2 suhtes ylevalt ja alt */ /** Kontrollime ringide y koordinaate */ if (((Ring1Y+Ring1R > Ring2Y-Ring2R) || (Ring1Y-Ring1R < Ring2Y+Ring2R) && (Samm1Y==-Samm2Y)) && ((Ring1X-Ring1R < Ring2X+Ring2R) && (Ring1X+Ring1R > Ring2X-Ring2R))) Samm1Y = -Samm1Y; if (((Ring2Y-Ring2R < Ring1Y+Ring1R) || (Ring2Y+Ring2R > Ring1Y-Ring1R) && (Samm1Y==-Samm2Y)) && ((Ring2X-Ring2R < Ring1X+Ring1R) && (Ring2X+Ring2R > Ring1X-Ring1R))) Samm2Y = -Samm2Y; /** Kontrollime ringide x koordinaate */ if (((Ring1X+Ring1R > Ring2X-Ring2R) && (Samm1X==-Samm2X)) && ((Ring1Y-Ring1R < Ring2Y+Ring2R) && (Ring1Y+Ring1R > Ring2Y-Ring2R))) Samm1X = -Samm1X; if (((Ring1X+Ring1R > Ring2X-Ring2R) && (Samm1X==-Samm2X)) && ((Ring1Y-Ring1R < Ring2Y+Ring2R) && (Ring1Y+Ring1R > Ring2Y-Ring2R))) Samm2X = -Samm2X; // if (((Ring2X-Ring2R < Ring1X+Ring1R) || (Ring2X+Ring2R > Ring1X-Ring1R)) // && ((Ring2Y-Ring2R < Ring1Y+Ring1R) && (Ring2Y+Ring2R > Ring1Y-Ring1R))) Samm2X = -Samm2X; }//- while }//- run public void p6rka(){ Graphics g=getGraphics(); g.setColor(Color.white); //- tausta v2rv g.fillRect(1,1,ServX,ServY); //- Tausta joonistamine g.setColor(Color.green); //- ring1 v2rv g.fillOval(Ring1X-Ring1R, Ring1Y-Ring1R, Ring1R*2, Ring1R*2); //- ringi 1 joonistamine g.setColor(Color.red); //- ring2 v2rv g.fillOval(Ring2X-Ring2R, Ring2Y-Ring2R, Ring2R*2, Ring2R*2); //- ringi 2 joonistamine try{ Thread.sleep(kiirus); }//- try catch(Exception exp){ System.out.println("catch"); }//- catch } //-p6rka public static void main(String argumendid[]){ new HillarpEksam5(); } //- main } //- class