import java.applet.*; import java.awt.*; public class CliffApp extends Applet { public CliffApp() { receiver = null; receiverName = "receiverapp"; startB = new Button("Start"); stepB = new Button("Take Step"); gameOver = false; xpos = 250; ypos = 2; winsNum = 0; losesNum = 0; forwardNum = 0; backNum = 0; } public boolean action(Event event, Object obj) { if(event.target == startB) { xpos = 250; ypos = 2; forwardNum = 0; backNum = 0; repaint(); gameOver = false; } if(event.target == stepB && ypos == 2 && xpos < 401) { moveGuy(); repaint(); } return true; } public String getAppletInfo() { return "Cliff Hanger Applet copyright 1998 MSTE"; } public void init() { backCliff = getImage(getCodeBase(), "back.jpg"); drunkGuy = getImage(getCodeBase(), "guy.gif"); setBackground(new Color(100, 100, 255)); offscreenImage = createImage(size().width, size().height); offscreenGraphics = offscreenImage.getGraphics(); add(startB); add(stepB); doh = getAudioClip(getCodeBase(), "doh.au"); woohoo = getAudioClip(getCodeBase(), "woohoo.au"); receiver = getAppletContext().getApplet(receiverName); repaint(); } public void moveGuy() { int i = (int)(Math.random() * 3D); switch(i) { case 1: // '\001' xpos -= 10; forwardNum++; break; default: xpos += 10; backNum++; break; } } public void paint(Graphics g) { if(xpos <= 400 && xpos >= 250) { offscreenGraphics.drawImage(backCliff, 0, 0, this); offscreenGraphics.drawImage(drunkGuy, xpos, ypos, this); g.drawImage(offscreenImage, 0, 0, this); } else if (gameOver == false) { if(xpos > 400) { g.setColor(Color.red); g.setFont(new Font("TimesRoman", 1, 72)); g.drawString("You Win!", 40, 200); woohoo.play(); winsNum++; for(int i = 0; i < 0x989680; i++); g.setColor(Color.white); g.drawString("You Win!", 40, 200); for(int k = 0; k < 0x989680; k++); g.setColor(Color.red); g.drawString("You Win!", 40, 200); gameOver = true; } if(xpos < 250) { doh.play(); losesNum++; while(ypos < 550) { ypos += 10; offscreenGraphics.drawImage(drunkGuy, xpos, ypos, this); for(int j = 0; j < 10000; j++); offscreenGraphics.drawImage(backCliff, 0, 0, this); offscreenGraphics.drawImage(drunkGuy, xpos, ypos, this); g.drawImage(offscreenImage, 0, 0, this); } gameOver = true; } } else { offscreenGraphics.drawImage(backCliff, 0, 0, this); g.drawImage(offscreenImage, 0, 0, this); } if(receiver != null && (receiver instanceof CliffStat)) ((CliffStat)receiver).updateVal(winsNum, losesNum, forwardNum, backNum); } public void update(Graphics g) { paint(g); } Image backCliff; Image drunkGuy; AudioClip doh; AudioClip woohoo; Image offscreenImage; Graphics offscreenGraphics; Applet receiver; String receiverName; Button startB; Button stepB; boolean gameOver; int xpos; int ypos; int winsNum; int losesNum; int forwardNum; int backNum; }