import java.applet.Applet; import java.awt.event.*; import java.awt.*; public class test1 extends Applet { MotionCanvas I; Animator A; SelectCanvas C; TextCanvas T; SpeedCanvas S; public void init() { A=new Animator(); setBackground(Color.blue); C=new SelectCanvas(); C.setBackground(new Color(0,0,100)); I=new MotionCanvas(A); T=new TextCanvas(); T.resize(400,50); C=C.addMotionCanvas(I); C.resize(200,200); I.resize(200,200); I.setBackground(Color.black); A=A.addMotionCanvas(I); I=I.addSelectCanvas(C); S=new SpeedCanvas(A); S.resize(400,20); add(C); add(I); add(S); add(T); S.setBackground(Color.black); T.setBackground(Color.black); try {A.start();} catch(Exception e) {} } } class DBCanvas extends Canvas { public void update(Graphics g) { Graphics g2; Image offscreen = null; offscreen = createImage(size().width, size().height); g2 = offscreen.getGraphics(); paint(g2); g.drawImage(offscreen, 0, 0, this); g2.dispose(); offscreen.flush(); } } class TextCanvas extends Canvas { TextCanvas() {} public void paint(Graphics g) { g.setColor(Color.white); g.setFont(new Font("TimesRoman",Font.PLAIN,22)); g.drawString("Rich: Applet 26 ",5,35); g.setFont(new Font("TimesRoman",Font.PLAIN,10)); g.drawString("Click on one of the points on the",203,14); g.drawString("left to highlight a point on the",203,28); g.drawString("right. Click slider to change speed.",203,42); } } class SpeedCanvas extends DBCanvas implements MouseListener { Animator A; SpeedCanvas(Animator A) { addMouseListener(this); this.A=A; } public void paint(Graphics g) { g.setColor(Color.white); g.fillRect((int)(A.speed/5-2),0,4,20); } 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(); int x=e.getX(); double mesh1,mesh2; mesh1=A.getCount(0.0); A.speed=5*x; mesh2=A.getCount(0.0); A.I.mesh=A.I.mesh+mesh1-mesh2; repaint(); } } class MotionCanvas extends DBCanvas { Animator A; int on; int number; int s1,s2,s3; double mesh; SelectCanvas CC; MotionCanvas(Animator A) { this.A=A; number=25; mesh=0; s1=4; s2=7; s3=2; } MotionCanvas addSelectCanvas(SelectCanvas X) { MotionCanvas Z=this; Z.CC=X; return(Z); } public void paint(Graphics g) { double t=A.getCount(mesh); for(int i=3;i<=29;++i) render(t,CC.A[i],CC.B[i],i,g); } void render(double t,int a,int b,int j,Graphics g) { double x,y; int X,Y; g.setColor(Color.white); x=-a*t; y=-b*t; X=(int)(100+100*truncate(x)); Y=(int)(100+100*truncate(y)); g.setColor(Color.white); g.fillRect(X-1,Y-1,2,2); if(CC.select[1][j]==1) { g.setColor(Color.red); g.fillOval(X-3,Y-3,6,6); g.drawOval(X-3,Y-3,6,6); } g.setColor(Color.white); g.fillRect(Y-1,X-1,2,2); if(CC.select[2][j]==1) { g.setColor(Color.red); g.fillOval(X-3,Y-3,6,6); g.drawOval(X-3,Y-3,6,6); } g.setColor(Color.white); g.fillRect(200-X-1,200-Y-1,2,2); if(CC.select[3][j]==1) { g.setColor(Color.red); g.fillOval(200-X-3,200-Y-3,6,6); g.drawOval(200-X-3,200-Y-3,6,6); } g.setColor(Color.white); g.fillRect(200-Y-1,200-X-1,2,2); if(CC.select[4][j]==1) { g.setColor(Color.red); g.fillOval(200-Y-3,200-X-3,6,6); g.drawOval(200-Y-3,200-X-3,6,6); } X=(int)(100-100*truncate(x)); Y=(int)(100+100*truncate(y)); g.setColor(Color.white); g.fillRect(X-1,Y-1,2,2); if(CC.select[5][j]==1) { g.setColor(Color.red); g.fillOval(X-3,Y-3,6,6); g.drawOval(X-3,Y-3,6,6); } g.setColor(Color.white); g.fillRect(Y-1,X-1,2,2); if(CC.select[6][j]==1) { g.setColor(Color.red); g.fillOval(Y-3,X-3,6,6); g.drawOval(Y-3,X-3,6,6); } g.setColor(Color.white); g.fillRect(200-X-1,200-Y-1,2,2); if(CC.select[7][j]==1) { g.setColor(Color.red); g.fillOval(200-X-3,200-Y-3,6,6); g.drawOval(200-X-3,200-Y-3,6,6); } g.setColor(Color.white); g.fillRect(200-Y-1,200-X-1,2,2); if(CC.select[8][j]==1) { g.setColor(Color.red); g.fillOval(200-Y-3,200-X-3,6,6); g.drawOval(200-Y-3,200-X-3,6,6); } } double truncate(double d) { double e; double dd=d+.5; e=dd-Math.floor(dd); e=1.0-2.0*e; return(e); } } class VSlider { int x,y,w,h; int pos; Color[] C; String S; VSlider(int x,int y,int w,int h,int pos,Color[] C,String S) { this.x=x; this.y=y; this.h=h; this.w=w; this.pos=pos; this.C=C; this.S=S; } void render(Graphics g) { g.setColor(C[1]); g.fillRect(x,y,w,h); g.setColor(C[2]); g.drawRect(x,y,w,h); g.setColor(C[3]); g.drawRect(x+1,pos-1,w-2,2); g.setColor(C[2]); g.setFont(new Font("TimesRoman",Font.PLAIN,13)); g.drawString(S,x,y+h+12); } int inside(Point p) { int test=0; if((p.x>x)&&(p.xy)&&(p.y-5)&&(test1<5)&&(test2>-5)&&(test2<5)) { val.x=j;val.y=1; } test1=p.y-100-10*A[j]; test2=p.x-100-10*B[j]; if((test1>-5)&&(test1<5)&&(test2>-5)&&(test2<5)) { val.x=j;val.y=2; } test1=p.x-100+10*A[j]; test2=p.y-100+10*B[j]; if((test1>-5)&&(test1<5)&&(test2>-5)&&(test2<5)) { val.x=j;val.y=3; } test1=p.y-100+10*A[j]; test2=p.x-100+10*B[j]; if((test1>-5)&&(test1<5)&&(test2>-5)&&(test2<5)) { val.x=j;val.y=4; } test1=p.y-100-10*A[j]; test2=p.x-100+10*B[j]; if((test1>-5)&&(test1<5)&&(test2>-5)&&(test2<5)) { val.x=j;val.y=8; } test1=p.x-100-10*A[j]; test2=p.y-100+10*B[j]; if((test1>-5)&&(test1<5)&&(test2>-5)&&(test2<5)) { val.x=j;val.y=7; } test1=p.x-100+10*A[j]; test2=p.y-100-10*B[j]; if((test1>-5)&&(test1<5)&&(test2>-5)&&(test2<5)) { val.x=j;val.y=5; } test1=p.y-100+10*A[j]; test2=p.x-100-10*B[j]; if((test1>-5)&&(test1<5)&&(test2>-5)&&(test2<5)) { val.x=j;val.y=6; } } return(val); } public void paint(Graphics g) { g.setColor(Color.white); for(int j=3;j<=29;++j) { g.setColor(Color.white); int x=100+10*A[j]; int y=100+10*B[j]; if(select[1][j]==1) g.setColor(Color.red); g.drawRect(x-3,y-3,6,6); g.setColor(Color.white); if(select[3][j]==1) g.setColor(Color.red); g.drawRect(200-x-3,200-y-3,6,6); g.setColor(Color.white); if(select[7][j]==1) g.setColor(Color.red); g.drawRect(x-3,200-y-3,6,6); g.setColor(Color.white); if(select[5][j]==1) g.setColor(Color.red); g.drawRect(200-x-3,y-3,6,6); g.setColor(Color.white); if(select[2][j]==1) g.setColor(Color.red); g.drawRect(y-3,x-3,6,6); g.setColor(Color.white); if(select[4][j]==1) g.setColor(Color.red); g.drawRect(200-y-3,200-x-3,6,6); g.setColor(Color.white); if(select[6][j]==1) g.setColor(Color.red); g.drawRect(y-3,200-x-3,6,6); g.setColor(Color.white); if(select[8][j]==1) g.setColor(Color.red); g.drawRect(200-y-3,x-3,6,6); g.setColor(Color.white); } } SelectCanvas addMotionCanvas(MotionCanvas I) { SelectCanvas B=this; B.I=I; return(B); } 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(); int test=0; Point val=identify(p); if(val.x>0) { for(int i=1;i<=8;++i) { for(int j=1;j<=29;++j) { select[i][j]=0; } } select[val.y][val.x]=1; } repaint(); } } class Animator extends Thread { private int count; MotionCanvas I; double speed; public void run() { count=0; speed=1000.0; while(true) { count=count+1; I.repaint(); try {sleep(20);} catch(Exception e) {} } } Animator addMotionCanvas(MotionCanvas I) { Animator B=this; B.I=I; return(B); } public double getCount(double mesh) { double mod; mod=count/speed+mesh; return(mod); } } class ListenSquare { int x,y,w,h; Color C; String S; int v; int on; ListenSquare(int x,int y,int w,int h,Color C,String S,int v,int o) { this.x=x; this.y=y; this.h=h; this.w=w; this.C=C; this.S=S; this.v=v; this.on=o; } void render(Graphics g) { if(on==1) { g.setColor(Color.white); g.fillRect(x+5,y+5,w-10,h-10); } g.setColor(C); g.drawRect(x,y,w,h); g.setColor(Color.white); g.setFont(new Font("TimesRoman",Font.PLAIN,13)); g.drawString(S,x+5,y+13); } int inside(Point p) { int test=0; if((p.x>x)&&(p.xy)&&(p.y