// from chapter 10 of Teach Yourself Java in 21 Days // Modified RPJ 14.i.1998 -- replace size() by getSize() // to remove deprecation // rpj 29xi06 -- modernized thread by removing deprecated stop() import java.awt.Graphics; import java.awt.Image; import java.awt.Color; public class Neko extends java.applet.Applet implements Runnable { private Image nekopics[] = new Image[9]; private Image currentimg; private Thread runner; private int xpos; private int ypos = 50; public void init() { String nekosrc[] = { "right1.gif", "right2.gif", "stop.gif", "yawn.gif", "scratch1.gif", "scratch2.gif","sleep1.gif", "sleep2.gif", "awake.gif" }; for (int i=0; i < nekopics.length; i++) { nekopics[i] = getImage(getCodeBase(), "images/" + nekosrc[i]); } } public void start() { if (runner == null) { runner = new Thread(this); runner.start(); } } public void run() { setBackground(Color.white); // run from one side of the screen to the middle nekorun(0, getSize().width / 2); // stop and pause currentimg = nekopics[2]; repaint(); pause(1000); // yawn currentimg = nekopics[3]; repaint(); pause(1000); // scratch four times nekoscratch(4); // sleep for 5 "turns" nekosleep(5); // wake up and run off currentimg = nekopics[8]; repaint(); pause(500); nekorun(xpos, getSize().width + 10); } void nekorun(int start, int end) { for (int i = start; i < end; i += 10) { xpos = i; // swap images if (currentimg == nekopics[0]) currentimg = nekopics[1]; else currentimg = nekopics[0]; repaint(); pause(150); } } void nekoscratch(int numtimes) { for (int i = numtimes; i > 0; i--) { currentimg = nekopics[4]; repaint(); pause(150); currentimg = nekopics[5]; repaint(); pause(150); } } void nekosleep(int numtimes) { for (int i = numtimes; i > 0; i--) { currentimg = nekopics[6]; repaint(); pause(250); currentimg = nekopics[7]; repaint(); pause(250); } } void pause(int time) { try { Thread.sleep(time); } catch (InterruptedException e) { } } public void paint(Graphics g) { if (currentimg != null) g.drawImage(currentimg, xpos, ypos, this); } }