import java.applet.Applet; import java.awt.event.*; import java.awt.*; public class test1 extends Applet { MotionCanvas X; Animator A; ControlCanvas C; public void init() { setBackground(Color.blue); A=new Animator(); X=new MotionCanvas(); C=new ControlCanvas(); A=A.addMotionCanvas(X); X=X.addAnimator(A); C=C.addAnimator(A); C=C.addMotionCanvas(X); X.setSize(200,200); C.setSize(140,200); X.setBackground(Color.black); C.setBackground(new Color(0,0,150)); add(C); add(X); try { A.start(); } catch(Exception e) { System.out.println(e.toString()); } } } class MotionCanvas extends Canvas { Animator A; Color C[]=new Color[10]; int speed; int ball; double mesh; int mode; MotionCanvas() { setBackground(Color.black); C[1]=Color.white; C[2]=Color.green; C[3]=Color.yellow; C[4]=Color.orange; C[5]=Color.cyan; ball=40; mesh=0.0; } MotionCanvas addAnimator(Animator A) { MotionCanvas Y=this; Y.A=A; return(Y); } public void paint(Graphics g) { double mod; int dim[]=new int[12]; mod=A.getCount(mesh); mod=2*mod; if(mod>1) mod=2-mod; mod=1-mod; dim[1]=(int)(200*mod); dim[2]=(int)(100-100*mod+1); dim[3]=(int)(200-ball-(200-ball)*mod); dim[5]=(int)((200-ball)*mod); dim[6]=(int)(100+100*mod); g.setColor(C[1]); g.drawRect(dim[2],dim[2],dim[1],dim[1]); g.setColor(C[2]); g.drawOval(dim[3],dim[2],ball,ball); g.setColor(C[3]); g.drawOval(dim[5],dim[6]-ball,ball,ball); g.setColor(C[4]); g.drawOval(dim[6]-ball,dim[3],ball,ball); g.setColor(C[5]); g.drawOval(dim[2],dim[5],ball,ball); } } class ControlCanvas extends Canvas implements MouseListener, MouseMotionListener { Animator A; MotionCanvas X; int stop; ControlCanvas() { addMouseListener(this); addMouseMotionListener(this); stop=0; } ControlCanvas addMotionCanvas(MotionCanvas X) { ControlCanvas B=this; B.X=X; return(B); } ControlCanvas addAnimator(Animator A) { ControlCanvas B=this; B.A=A; return(B); } public void paint(Graphics g) { int x1,x2; x1=(int)(A.speed/2.0); g.setColor(Color.black); g.fillRect(0,0,20,150); g.fillRect(120,0,20,150); g.setColor(Color.white); g.setFont(new Font("Helvetica",Font.PLAIN,13)); g.drawString("speed",2,165); g.drawString("disk size",88,165); g.drawRect(0,0,20,150); g.drawRect(119,0,20,150); x1=(int)(A.speed/2.0-10.0); x2=X.ball-20; g.setColor(Color.red); g.fillRect(120,x2-1,18,2); g.fillRect(1,x1-1,18,2); g.setColor(Color.yellow); g.setFont(new Font("Helvetica",Font.PLAIN,16)); g.drawString("Rich: Applet 20",8,190); } public void mouseDragged (MouseEvent e) {} public void mouseMoved(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseClicked(MouseEvent e) { e.consume(); Point p=new Point(); p.x=e.getX(); p.y=e.getY(); if((p.x>0)&&(p.x<20)&&(p.y>0)&&(p.y<150)) { double mesh1,mesh2; mesh1=A.getCount(0.0); A.speed=2.0*p.y+20.0; mesh2=A.getCount(0.0); X.mesh=X.mesh+mesh1-mesh2; repaint(0,0,20,150); } if((p.x>120)&&(p.x<140)&&(p.y>0)&&(p.y<150)) { X.ball=p.y+20; repaint(120,0,20,150); X.repaint(); } } } class Animator extends Thread { private int count; MotionCanvas X; double speed; double temp; public void run() { count=0; speed=220.0; while(true) { count=count+1; X.repaint(); try {sleep(20);} catch(Exception e) { System.out.println(e.toString()); } } } Animator addMotionCanvas(MotionCanvas X) { Animator B=this; B.X=X; return(B); } public double getCount(double mesh) { double mod; mod=count/speed+mesh; mod=mod-Math.floor(mod); return(mod); } }