import java.applet.Applet; import java.awt.event.*; import java.awt.*; public class test1 extends Applet { MotionCanvas X; ControlCanvas C; Animator A; GridBagConstraints c; GridBagLayout game; public void init() { game=new GridBagLayout(); c=new GridBagConstraints(); c.gridwidth=GridBagConstraints.REMAINDER; c.gridheight=1; A=new Animator(); X=new MotionCanvas(); C=new ControlCanvas(); C=C.addMotionCanvas(X); C=C.addAnimator(A); A=A.addMotionCanvas(X); X.resize(400,100); C.resize(400,60); game.setConstraints(X,c); game.setConstraints(C,c); add(X); add(C); try { A.start(); } catch(Exception e) {} setBackground(Color.black); } } 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 MotionCanvas extends DBCanvas { Bug B; MotionCanvas() { B=new Bug(); } public void paint(Graphics g) { B.render(g,0); B.render(g,-400); } } class Bug { int pos; Bug() { pos=200; } void render(Graphics g,int t) { int[] wiggle=new int[10]; int pos2; g.translate(t+pos,0); g.setColor(Color.green); for(int i=1;i<=6;++i) { pos2=pos+6*i; wiggle[i]=pos2-36*(pos2/36); } g.drawLine(50,35,38+wiggle[1],15); g.drawLine(50,65,64-wiggle[2],85); g.drawLine(20,61,36-2*wiggle[3],80); //back g.drawLine(20,39,-36+2*wiggle[4],20); //back g.drawLine(80,61,90+wiggle[5],80); //front g.drawLine(80,39,121-wiggle[6],20); //front g.setColor(Color.yellow); g.fillOval(0,35,100,30); g.setColor(Color.blue); g.fillOval(5,37,90,26); g.setColor(Color.yellow); g.fillOval(100,35,30,30); g.setColor(Color.blue); g.fillOval(102,37,26,26); g.setColor(Color.red); g.fillOval(127,57,6,6); g.fillOval(127,38,6,6); g.drawOval(127,57,6,6); g.drawOval(127,38,6,6); g.translate(-t-pos,0); } } class ControlCanvas extends Canvas implements MouseListener { Animator A; MotionCanvas X; int mode; ControlCanvas() { setBackground(Color.black); addMouseListener(this); } ControlCanvas addAnimator(Animator An) { ControlCanvas Y=this; Y.A=An; return(Y); } ControlCanvas addMotionCanvas(MotionCanvas Xx) { ControlCanvas Y=this; Y.X=Xx; return(Y); } public void paint(Graphics g) { g.setColor(Color.blue); g.fillRect(210,15,30,30); g.setFont(new Font("TimesRoman",Font.PLAIN,30)); g.setColor(Color.yellow); g.drawString("Rich: Applet 19",10,40); g.setColor(Color.yellow); g.setFont(new Font("TimesRoman",Font.PLAIN,15)); g.drawString("click on the blue square",255,25); g.drawString("to stop/start the bug",255,43); } 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(); try { if((p.x>210)&&(p.x<250)&&(p.y>10)&&(p.y<40)) { if(mode==0) A.suspend(); if(mode==1) A.resume(); mode=1-mode; } } catch(Exception x) {} } } class Animator extends Thread { private int count, parity; MotionCanvas X; public void run() { count=200; X.repaint(); while(true) { count=count+4; if(count==600) count=200; X.B.pos=count; X.repaint(); try {sleep(20);} catch(Exception e) { System.out.println(e.toString()); } } } Animator addMotionCanvas(MotionCanvas Xx) { Animator B=this; B.X=Xx; return(B); } }