/* "PuppetHead_Tony.java" */ /* "PuppetHead" (Tony) Applet, 1996 J.H. Rosen */ import java.applet.Applet; import java.awt.*; /* begin: applet */ public class PuppetHead_Tony extends java.applet.Applet implements Runnable { /* program constants */ /* font */ Font txt_Font; /* head left(x), top(y) coord */ final int head_lft = 29; final int head_top = 6; /* mouth open/close anim delay (125 milliseconds) */ final int MouthOpenCloseDelay = 125; /* eyes side-to-side anim delay (125 milliseconds) */ final int EyesSideToSideAnimDelay = 125; /* gold tooth star (star_1/star_2) anim delay (125 milliseconds) */ final int GoldToothStarAnimDelay = 125; /* eyes open/close anim delay (125 milliseconds) */ final int EyesOpenCloseAnimDelay = 125; /* btn, mouth anim delay (125 millisecs) */ final int BtnMouthDelay = 125; /* btn, star anim delay (125 millisecs) */ final int BtnStarDelay = 125; /* btn, eye side-to-side anim delay (125 millisecs) */ final int BtnEyeSideToSideDelay = 125; /* btn, eye open/close anim delay (125 millisecs) */ final int BtnEyeOpenCloseDelay = 125; /* declaration of instance variables */ /* offscreen anim/image buffer, "PuppetHead" canvas */ Image offPuppetHead_Image; Graphics offPuppetHead_Graphics; /* begin: "PuppetHead" images */ /* head */ Image head_Image; /* eyes [4] */ Image eyes_Images[]; /* mouth, open/close [2] */ Image mouth_Images[]; /* gold tooth star [2] */ Image gold_tooth_Images[]; /* button images */ Image btn_mouth_Images[]; // mouth btns Image btn_eye_sidetoside_Images[]; // eye side-to-side btns Image btn_star_Images[]; // gold tooth star btns Image btn_eye_openclose_Images[]; // eye open/close btns /* end: "PuppetHead" images */ /* "PuppetHead" MediaTracker */ MediaTracker puppetHead_MediaTracker; /* begin: face parts animation */ /* Mouth anim flag (false= anim off/true= anim on) */ boolean mouth_AnmFlg; /* eyes side-to-side anim flag (false= anim off/true= anim on) */ boolean eyesSideToSide_AnmFlg; /* gold star tooth anim flag (false= anim off/true= anim on) */ boolean goldStarTooth_AnmFlg; /* eyes open/close anim flag (false= anim off/true= anim on) */ boolean eyesOpenClose_AnmFlg; /* mouth anim timer */ long mouthOpenClose_Time; /* eyes side-to-side anim timer */ long eyesSideToSide_Time; /* gold star tooth anim timer */ long goldStarTooth_Time; /* eyes open/close anim timer */ long eyesOpenClose_Time; /* mouth anim flag (closed = 0;open = 1) */ int mouthOpenClose_Flg; /* eyes side-to-side anim frame (left=1;center=2;right=3;center=4) */ int eyesSideToSide_Frame; /* gold star tooth index (star_1 = 0;star_2 = 1) */ int goldStarTooth_Idx; /* eyes image idx (left=0;center=1;right=2;closed=3) */ int eyes_ImageIdx; /* end: face parts animation */ /* begin: btn variables */ /* mouth btn rectangle */ Rectangle btnMouth_Rectangle; /* eye side-to-side btn rectangle */ Rectangle btnEyeSideToSide_Rectangle; /* star btn rectangle */ Rectangle btnStar_Rectangle; /* eye open/close btn rectangle */ Rectangle btnEyeOpenClose_Rectangle; /* mouth btn anim timer */ long btnMouthOpenClose_Time; /* eye side-to-side btn anim timer */ long btnEyeSideToSide_Time; /* star btn anim timer */ long btnStar_Time; /* eye open/close btn anim timer */ long btnEyeOpenClose_Time; /* mouth btn anim flag (closed = 0;open = 1) */ int btnMouthOpenClose_Flg; /* eye side-to-side btn anim frame (left=1;center=2;right=3;center=4) */ int btnEyeSideToSide_Frame; /* eye side-to-side btn anim idx (left=0;center=1;right=2) */ int btnEyeSideToSide_Idx; /* star btn anim idx (star_1 = 0;star_2 = 1) */ int btnStar_Idx; /* eye open/close btn anim idx (closed = 0;open = 1) */ int btnEyeOpenClose_Idx; /* end: btn variables */ /* "PuppetHead" animation thread */ Thread animation_Thread; /* methods invoked by Java */ /* "init()" * initialize the applet */ public void init() { /* MediaTracker image load loop counter */ int mt_Idx; /* 257W X 316H canvas */ resize(257,316); /* create offscreen anim/image buffer, "PuppetHead" canvas */ /* 0,0,257,316 */ offPuppetHead_Image = createImage(257,316); offPuppetHead_Graphics = offPuppetHead_Image.getGraphics(); /* begin: retrieve "PuppetHead" images */ /* head (198W X 242H) */ head_Image = getImage(getCodeBase(),"images/head.gif"); /* eyes (76W X 36H) */ eyes_Images = new Image[4]; // eyes eyes_Images[0] = getImage(getCodeBase(),"images/eyes_left.gif"); eyes_Images[1] = getImage(getCodeBase(),"images/eyes_center.gif"); eyes_Images[2] = getImage(getCodeBase(),"images/eyes_right.gif"); eyes_Images[3] = getImage(getCodeBase(),"images/eyes_closed.gif"); /* mouth (85W X 75H) */ mouth_Images = new Image[2]; // mouths mouth_Images[0] = getImage(getCodeBase(),"images/mouth_closed.gif"); mouth_Images[1] = getImage(getCodeBase(),"images/mouth_open.gif"); /* gold tooth star [2] (48W X 38H) */ gold_tooth_Images = new Image[2]; // gold tooth star gold_tooth_Images[0] = getImage(getCodeBase(),"images/star_1.gif"); gold_tooth_Images[1] = getImage(getCodeBase(),"images/star_2.gif"); /* btn images (55W X 56H) */ btn_eye_sidetoside_Images = new Image[3]; // eye side-to-side btns btn_eye_sidetoside_Images[0] = getImage(getCodeBase(),"images/btn_eye_left.gif"); btn_eye_sidetoside_Images[1] = getImage(getCodeBase(),"images/btn_eye_center.gif"); btn_eye_sidetoside_Images[2] = getImage(getCodeBase(),"images/btn_eye_right.gif"); btn_mouth_Images = new Image[2]; // mouth btns btn_mouth_Images[0] = getImage(getCodeBase(),"images/btn_mouth_closed.gif"); btn_mouth_Images[1] = getImage(getCodeBase(),"images/btn_mouth_open.gif"); btn_star_Images = new Image[2]; // gold tooth star btns btn_star_Images[0] = getImage(getCodeBase(),"images/btn_star_1.gif"); btn_star_Images[1] = getImage(getCodeBase(),"images/btn_star_2.gif"); btn_eye_openclose_Images = new Image[2]; // eye open/close btns btn_eye_openclose_Images[0] = getImage(getCodeBase(),"images/btn_eye_closed.gif"); btn_eye_openclose_Images[1] = getImage(getCodeBase(),"images/btn_eye_open.gif"); /* end: retrieve "PuppetHead" images */ /* init "PuppetHead" MediaTracker */ puppetHead_MediaTracker = new MediaTracker(this); /* load images into MediaTracker */ /* head */ puppetHead_MediaTracker.addImage(head_Image,0); /* eyes */ for (mt_Idx = 0; mt_Idx <= 3; mt_Idx++) puppetHead_MediaTracker.addImage(eyes_Images[mt_Idx],mt_Idx + 1); /* mouth */ for (mt_Idx = 0; mt_Idx <= 1; mt_Idx++) puppetHead_MediaTracker.addImage(mouth_Images[mt_Idx],(mt_Idx + 1 + 4)); /* gold tooth star */ for (mt_Idx = 0; mt_Idx <= 1; mt_Idx++) puppetHead_MediaTracker.addImage(gold_tooth_Images[mt_Idx],(mt_Idx + 1 + 4 + 2)); /* btn, eye (side-to-side) */ for (mt_Idx = 0; mt_Idx <= 2; mt_Idx++) puppetHead_MediaTracker.addImage( btn_eye_sidetoside_Images[mt_Idx], (mt_Idx + 1 + 4 + 2 + 2) ); /* btn, mouth */ for (mt_Idx = 0; mt_Idx <= 1; mt_Idx++) puppetHead_MediaTracker.addImage(btn_mouth_Images[mt_Idx],(mt_Idx + 1 + 4 + 2 + 2 + 3)); /* btn, star */ for (mt_Idx = 0; mt_Idx <= 1; mt_Idx++) puppetHead_MediaTracker.addImage( btn_star_Images[mt_Idx], (mt_Idx + 1 + 4 + 2 + 2 + 3 + 2) ); /* btn, eye (open/close) */ for (mt_Idx = 0; mt_Idx <= 1; mt_Idx++) puppetHead_MediaTracker.addImage( btn_eye_openclose_Images[mt_Idx], (mt_Idx + 1 + 4 + 2 + 2 + 3 + 2 + 2) ); /* begin: init face parts animation */ /* Mouth anim flag (false= anim off/true= anim on) */ mouth_AnmFlg = false; // initially anim off /* eyes side-to-side anim flag (false= anim off/true= anim on) */ eyesSideToSide_AnmFlg = false; // initially anim off /* gold star tooth anim flag (false= anim off/true= anim on) */ goldStarTooth_AnmFlg = false; // initially anim off /* eyes open/close anim flag (false= anim off/true= anim on) */ eyesOpenClose_AnmFlg = false; // initially anim off /* mouth anim timer */ mouthOpenClose_Time = System.currentTimeMillis(); /* eyes side-to-side anim timer */ eyesSideToSide_Time = System.currentTimeMillis(); /* gold star tooth anim timer */ goldStarTooth_Time = System.currentTimeMillis(); /* eyes open/close anim timer */ eyesOpenClose_Time = System.currentTimeMillis(); /* mouth anim flag (closed = 0;open = 1) */ mouthOpenClose_Flg = 0; // initially closed /* eyes side-to-side anim frame (left=1;center=2;right=3;center=4) */ eyesSideToSide_Frame = 1; // initially left /* gold star tooth anim idx (star_1 = 0;star_2 = 1) */ goldStarTooth_Idx = 0; //initially star_1 /* eyes image idx (left=0;center=1;right=2;closed=3) */ eyes_ImageIdx = 1; // initially open/center /* end: face parts animation */ /* begin: init btn variables */ /* mouth btn rectangle */ btnMouth_Rectangle = new Rectangle(8, 254, 55, 56); /* eye side-to-side btn rectangle */ btnEyeSideToSide_Rectangle = new Rectangle(70, 254, 55, 56); /* star btn rectangle */ btnStar_Rectangle = new Rectangle(132, 254, 55, 56); /* eye open/close btn rectangle */ btnEyeOpenClose_Rectangle = new Rectangle(194, 254, 55, 56);; /* mouth btn anim timer */ btnMouthOpenClose_Time = System.currentTimeMillis(); /* eye side-to-side btn anim timer */ btnEyeSideToSide_Time = System.currentTimeMillis(); /* star btn anim timer */ btnStar_Time = System.currentTimeMillis(); /* eye open/close btn anim timer */ btnEyeOpenClose_Time = System.currentTimeMillis(); /* mouth btn anim flag (closed = 0;open = 1) */ btnMouthOpenClose_Flg = 0; /* eye side-to-side btn anim frame (left=1;center=2;right=3;center=4) */ btnEyeSideToSide_Frame = 1; /* eye side-to-side btn anim idx (left=0;center=1;right=2) */ btnEyeSideToSide_Idx = 0; //initially left /* star btn anim idx (star_1 = 0;star_2 = 1) */ btnStar_Idx = 0; /* eye open/close btn anim idx (closed = 0;open = 1) */ btnEyeOpenClose_Idx = 0; /* end: init btn variables */ } /* end method "init" */ /* "start()" * called when the applet becomes visible on screen */ public void start() { /* start "PuppetHead" animation thread */ animation_Thread = new Thread(this); animation_Thread.start(); } /* end method "start" */ /* "stop()" * called when the applet is no longer visible on screen */ public void stop() { /* stop "PuppetHead" animation thread */ if (animation_Thread != null) animation_Thread.stop(); animation_Thread = null; } /* end method "stop" */ /* "destroy()" * called just before the browser exits */ public void destroy() { /* dispose offscreen anim/image buffer, "PuppetHead" canvas */ offPuppetHead_Graphics.dispose(); offPuppetHead_Graphics = null; } /* end method "destroy" */ /* "run()" * called (repeatedly) by the Thread created in "start()" */ public void run() { /* update "PuppetHead" animation thread */ while (Thread.currentThread() == animation_Thread) { /* force repaint */ repaint(); /* begin: thread delay (125 milliseconds) */ try { Thread.sleep(125); } catch (InterruptedException e) { break; } /* end: thread delay */ } /* end "while (Thread.currentThread() == animation_Thread)" */ } /* end method "run" */ /* "mouseMove()" * called when the mouse pointer is moved */ public boolean mouseMove(Event evt, int x, int y) { // begin: mouth button if ( ((x >= btnMouth_Rectangle.x) && (x <= (btnMouth_Rectangle.x + btnMouth_Rectangle.width))) && ((y >= btnMouth_Rectangle.y) && (y <= (btnMouth_Rectangle.y + btnMouth_Rectangle.height))) ) { // activate mouth anim (if not already activated) if (mouth_AnmFlg == false) { mouth_AnmFlg = true; mouthOpenClose_Flg = 1; /* force repaint */ repaint(); } } else { // if mouth anim activated, deactivate (we're not in button anymore) if (mouth_AnmFlg == true) { mouth_AnmFlg = false; mouthOpenClose_Flg = 0; /* force repaint */ repaint(); } } // end: mouth button // begin: eye side-to-side button if ( ((x >= btnEyeSideToSide_Rectangle.x) && (x <= (btnEyeSideToSide_Rectangle.x + btnEyeSideToSide_Rectangle.width))) && ((y >= btnEyeOpenClose_Rectangle.y) && (y <= (btnEyeSideToSide_Rectangle.y + btnEyeSideToSide_Rectangle.height))) ) { // activate eyes side-to-side anim (if not already activated) if (eyesSideToSide_AnmFlg == false) { /* flag */ eyesSideToSide_AnmFlg = true; /* flag side-to-side anm open/left */ eyesSideToSide_Frame = 0; /* force repaint */ repaint(); } } else { // if eyes side-to-side anim activated, deactivate (not in btn anymore) if (eyesSideToSide_AnmFlg == true) { /* flag */ eyesSideToSide_AnmFlg = false; /* open/center */ eyes_ImageIdx = 1; /* force repaint */ repaint(); } } // end: eye side-to-side button // begin: gold star tooth button if ( ((x >= btnStar_Rectangle.x) && (x <= (btnStar_Rectangle.x + btnStar_Rectangle.width))) && ((y >= btnStar_Rectangle.y) && (y <= (btnStar_Rectangle.y + btnStar_Rectangle.height))) ) { // activate gold star tooth anim (if not already activated) if (goldStarTooth_AnmFlg == false) { goldStarTooth_AnmFlg = true; /* force repaint */ repaint(); } } else { // if gold star tooth anim activated, deactivate (not in btn anymore) if (goldStarTooth_AnmFlg == true) { goldStarTooth_AnmFlg = false; /* force repaint */ repaint(); } } // end: gold star tooth button // begin: eye open/close button if ( ((x >= btnEyeOpenClose_Rectangle.x) && (x <= (btnEyeOpenClose_Rectangle.x + btnEyeOpenClose_Rectangle.width))) && ((y >= btnEyeOpenClose_Rectangle.y) && (y <= (btnEyeOpenClose_Rectangle.y + btnEyeOpenClose_Rectangle.height))) ) { // activate eyes open/close anim (if not already activated) if (eyesOpenClose_AnmFlg == false) { /* flag */ eyesOpenClose_AnmFlg = true; /* open (will flip-flop to close in "paint") */ eyes_ImageIdx = 1; /* force repaint */ repaint(); } } else { // if eyes open/close anim activated, deactivate (not in btn anymore) if (eyesOpenClose_AnmFlg == true) { /* flag */ eyesOpenClose_AnmFlg = false; /* open */ eyes_ImageIdx = 1; /* force repaint */ repaint(); } } // end: eye open/close button return true; } /* end method "mouseMove" */ /* "mouseExit()" * called when the mouse pointer exits the applet's display area */ public boolean mouseExit(Event evt, int x, int y) { // if mouth anim activated, deactivate (we're not in applet anymore) if (mouth_AnmFlg == true) { mouth_AnmFlg = false; mouthOpenClose_Flg = 0; /* force repaint */ repaint(); } // if eyes side-to-side anim activated, deactivate (we're not in applet anymore) else if (eyesSideToSide_AnmFlg == true) { eyesSideToSide_AnmFlg = false; /* open/center */ eyes_ImageIdx = 1; /* force repaint */ repaint(); } // if gold star tooth anim activated, deactivate (we're not in applet anymore) else if (goldStarTooth_AnmFlg == true) { goldStarTooth_AnmFlg = false; /* force repaint */ repaint(); } // if eyes open/close anim activated, deactivate (we're not in applet anymore) else if (eyesOpenClose_AnmFlg == true) { eyesOpenClose_AnmFlg = false; /* open/center */ eyes_ImageIdx = 1; /* force repaint */ repaint(); } return true; } /* end method "mouseExit" */ /* "update()" * update the screen */ public void update(Graphics g) { /* (intercepting "update" avoids background erase) */ /* call "paint" */ paint(g); } /* end method "update" */ /* "paint()" * paint the screen */ public void paint(Graphics g) { /* fill offscreen anim/image buffer with white color */ offPuppetHead_Graphics.setColor(Color.white); offPuppetHead_Graphics.fillRect(0,0,257,316); /* wait for images to laod before drawing */ if (puppetHead_MediaTracker.checkAll(true) == true) { /* draw head image */ offPuppetHead_Graphics.drawImage(head_Image,head_lft,head_top,this); /* begin: draw eyes image */ /* eyes open/close anm timer (open/close every "EyesOpenCloseAnimDelay" millisecs) */ if ( (eyesOpenClose_AnmFlg == true) && (System.currentTimeMillis() >= (eyesOpenClose_Time + (int) (Math.random() * EyesOpenCloseAnimDelay))) ) { if (eyes_ImageIdx == 3) eyes_ImageIdx = 1; else eyes_ImageIdx = 3; /* reset timer */ eyesOpenClose_Time = System.currentTimeMillis(); } /* end: eyes open/close anm timer */ /* eyes side-to-side anm timer (shift eyes every "EyesSideToSideAnimDelay" millisecs) */ else if ( (eyesSideToSide_AnmFlg == true) && (System.currentTimeMillis() >= (eyesSideToSide_Time + (int) (Math.random() * EyesSideToSideAnimDelay))) ) { switch (eyesSideToSide_Frame) { case 1: // left eyes_ImageIdx = 0; break; case 2: // center eyes_ImageIdx = 1; break; case 3: // right eyes_ImageIdx = 2; break; case 4: // center eyes_ImageIdx = 1; break; } /* end "switch" */ // frame advance if (eyesSideToSide_Frame < 4) eyesSideToSide_Frame++; else eyesSideToSide_Frame = 1; /* reset timer */ eyesSideToSide_Time = System.currentTimeMillis(); } /* end: eyes side-to-side anm timer */ /* draw */ offPuppetHead_Graphics.drawImage( eyes_Images[eyes_ImageIdx], head_lft + 63, head_top + 70, this ); /* end: draw eyes image */ /* begin: draw mouth image */ /* mouth anm timer (open/close every "MouthOpenCloseDelay" millisecs) */ if ( (mouth_AnmFlg == true) && (System.currentTimeMillis() >= (mouthOpenClose_Time + (int) (Math.random() * MouthOpenCloseDelay))) ) { /* flag open/close */ if (mouthOpenClose_Flg == 1) mouthOpenClose_Flg = 0; else mouthOpenClose_Flg = 1; /* reset timer */ mouthOpenClose_Time = System.currentTimeMillis(); } /* end: mouth anm timer */ /* draw */ offPuppetHead_Graphics.drawImage( mouth_Images[mouthOpenClose_Flg], head_lft + 61, head_top + 136, this ); /* end: draw mouth image */ /* begin: draw gold tooth star image */ /* gold star tooth anm timer (star_1/star_2 every "GoldToothStarAnimDelay" millisecs) */ if ( (goldStarTooth_AnmFlg == true) && (System.currentTimeMillis() >= (goldStarTooth_Time + (int) (Math.random() * GoldToothStarAnimDelay))) ) { /* draw */ offPuppetHead_Graphics.drawImage( gold_tooth_Images[goldStarTooth_Idx], head_lft + 74, head_top + 136, this ); /* idx, star_1/star_2 */ if (goldStarTooth_Idx == 1) goldStarTooth_Idx = 0; else goldStarTooth_Idx = 1; /* reset timer */ goldStarTooth_Time = System.currentTimeMillis(); } /* end: gold star tooth anm timer */ /* end: draw gold tooth star image */ /* btn images */ // mouth btn /* begin: mouth btn timer (open/close every "BtnMouthDelay" millisecs) */ if ( System.currentTimeMillis() >= (btnMouthOpenClose_Time + (int) (Math.random() * BtnMouthDelay)) ) { /* flag open/close */ if (btnMouthOpenClose_Flg == 1) btnMouthOpenClose_Flg = 0; else btnMouthOpenClose_Flg = 1; /* reset timer */ btnMouthOpenClose_Time = System.currentTimeMillis(); } /* end: mouth btn timer */ /* draw */ offPuppetHead_Graphics.drawImage( btn_mouth_Images[btnMouthOpenClose_Flg], btnMouth_Rectangle.x, btnMouth_Rectangle.y, this ); // eye side-to-side btn /* begin: eye side-to-side btn timer */ if ( System.currentTimeMillis() >= (btnEyeSideToSide_Time + (int) (Math.random() * BtnEyeSideToSideDelay)) ) { switch (btnEyeSideToSide_Frame) { case 1: // left btnEyeSideToSide_Idx = 0; break; case 2: // center btnEyeSideToSide_Idx = 1; break; case 3: // right btnEyeSideToSide_Idx = 2; break; case 4: // center btnEyeSideToSide_Idx = 1; break; } /* end "switch" */ // frame advance if (btnEyeSideToSide_Frame < 4) btnEyeSideToSide_Frame++; else btnEyeSideToSide_Frame = 1; /* reset timer */ btnEyeSideToSide_Time = System.currentTimeMillis(); } /* end: eye side-to-side btn timer */ /* draw */ offPuppetHead_Graphics.drawImage( btn_eye_sidetoside_Images[btnEyeSideToSide_Idx], btnEyeSideToSide_Rectangle.x, btnEyeSideToSide_Rectangle.y, this ); /* end: eye side-to-side btn timer */ // gold tooth star btns /* begin: star btn timer (star_1/star_2 every "BtnStarDelay" millisecs) */ if ( System.currentTimeMillis() >= (btnStar_Time + (int) (Math.random() * BtnStarDelay)) ) { /* idx star_1/star_2 */ if (btnStar_Idx == 1) btnStar_Idx = 0; else btnStar_Idx = 1; /* reset timer */ btnStar_Time = System.currentTimeMillis(); } /* end: star btn timer */ /* draw */ offPuppetHead_Graphics.drawImage( btn_star_Images[btnStar_Idx], btnStar_Rectangle.x, btnStar_Rectangle.y, this ); // eye open/close btns /* begin: eye btn open/close timer (open/close every "BtnEyeOpenCloseDelay" mlsecs) */ if ( System.currentTimeMillis() >= (btnEyeOpenClose_Time + (int) (Math.random() * BtnEyeOpenCloseDelay)) ) { /* idx open/close */ if (btnEyeOpenClose_Idx == 1) btnEyeOpenClose_Idx = 0; else btnEyeOpenClose_Idx = 1; /* reset timer */ btnEyeOpenClose_Time = System.currentTimeMillis(); } /* end: star btn timer */ /* draw */ offPuppetHead_Graphics.drawImage( btn_eye_openclose_Images[btnEyeOpenClose_Idx], btnEyeOpenClose_Rectangle.x, btnEyeOpenClose_Rectangle.y, this ); } // end "if (puppetHead_MediaTracker.checkAll(true) == true)" /* begin: write text message, "Loading Images..." */ else { /* set text string font */ offPuppetHead_Graphics.setFont(txt_Font); /* set text string color */ offPuppetHead_Graphics.setColor(Color.black); /* write/draw text message */ offPuppetHead_Graphics.drawString("Loading Images...",25,25); } /* end: write text message, "Loading Images..." */ /* frame applet edges (black border) */ offPuppetHead_Graphics.setColor(Color.black); offPuppetHead_Graphics.drawRect(0,0,256,315); /* blast "PuppetHead" offscreen anim/image buffer to screen */ g.drawImage(offPuppetHead_Image,0,0,this); } /* end method "paint" */ } /* end class "PuppetHead_Tony" */ /* end file "PuppetHead_Tony.java */