ReaperArea.java (7457B)
1 import java.awt.Color; 2 import java.awt.Graphics; 3 import java.awt.Image; 4 import java.awt.MediaTracker; 5 import java.io.File; 6 import java.io.IOException; 7 8 import javax.imageio.ImageIO; 9 import javax.swing.JPanel; 10 11 public class ReaperArea extends JPanel { 12 private static final long serialVersionUID = 8785700671033447779L; 13 static int FLOORLEVEL = 589; 14 static final int FLOORWIDTH = 150; 15 static int FLOORDIFF = 605 - FLOORLEVEL; 16 Reaper myApplet = null; 17 Image reaperwarp; 18 Image reaper1; 19 Image reaper1left; 20 Image reaper2; 21 Image reaper2left; 22 Image reapercrouch; 23 Image reapercrouchleft; 24 Image reaperjump; 25 Image reaperjumpleft; 26 Image obstacle; 27 Image tallobstacle; 28 Image reaperstand; 29 Image reaperstandleft; 30 Image levelcomplete; 31 Image reaperdead; 32 Image squishedrunner; 33 Image runner, runner2, runnerleft, runner2left; 34 Image title[] = new Image[10]; 35 MediaTracker mt = null; 36 boolean showingMessage = false; 37 boolean starting = true; 38 39 public ReaperArea(Reaper parent) { 40 mt = new MediaTracker(parent); 41 myApplet = parent; 42 43 runner = load(parent, "run1.gif"); 44 runnerleft = load(parent, "run1left.gif"); 45 runner2 = load(parent, "run2.gif"); 46 runner2left = load(parent, "run2left.gif"); 47 48 squishedrunner = load(parent, "run1.gif"); 49 50 reaper1 = load(parent, "grimreaper.gif"); 51 reaper1left = load(parent, "grimreaper.gif"); 52 reaper2 = load(parent, "grimreaper.gif"); 53 reaper2left = load(parent, "grimreaper.gif"); 54 reapercrouch = load(parent, "grimreaper.gif"); 55 reapercrouchleft = load(parent, "grimreaper.gif"); 56 reaperjump = load(parent, "grimreaper.gif"); 57 reaperjumpleft = load(parent, "grimreaper.gif"); 58 59 obstacle = load(parent, "fire hydrant.gif"); 60 tallobstacle = load(parent, "bus.gif"); 61 reaperstand = load(parent, "grimreaper.gif"); 62 reaperstandleft = load(parent, "grimreaper.gif"); 63 64 levelcomplete = load(parent, "missioncomplete.gif"); 65 reaperdead = load(parent, "reaperdead.gif"); 66 reaperwarp = load(parent, "warp.gif"); 67 68 title[0] = load(parent, "g.gif"); 69 title[1] = load(parent, "gr.gif"); 70 title[2] = load(parent, "gri.gif"); 71 title[3] = load(parent, "grim.gif"); 72 title[4] = load(parent, "grimr.gif"); 73 title[5] = load(parent, "grimre.gif"); 74 title[6] = load(parent, "grimrea.gif"); 75 title[7] = load(parent, "grimreap.gif"); 76 title[8] = load(parent, "grimreape.gif"); 77 title[9] = load(parent, "grimreaperwriting.gif"); 78 79 } 80 81 Image load(Reaper parent, String picture) { 82 try { 83 Image im = ImageIO.read(new File("../Assets/" + picture)); 84 checkImage(im, picture); 85 return (im); 86 } catch (IOException e) { 87 // TODO Auto-generated catch block 88 e.printStackTrace(); 89 } 90 return null; 91 } 92 93 void checkImage(Image image, String name) { 94 if (mt != null) { 95 mt.addImage(image, 0); 96 try { 97 mt.waitForID(0, 5000); 98 } catch (InterruptedException ie) { 99 // nothing to do 100 } 101 if (mt.isErrorID(0)) 102 System.out.println("Image Not found: " + name.toString()); 103 } 104 } 105 106 @Override 107 public void paintComponent(Graphics g) { 108 super.paintComponent(g); 109 Image obstacleimage, preyimage; 110 if (myApplet == null) 111 return; 112 final int w = getBounds().width; 113 g.setColor(Color.white); 114 g.fillRect(0, 0, w, FLOORLEVEL); // don't white wash the floor! 115 g.setColor(Color.black); 116 117 // paint the floor 118 if (Reaper.floors[Reaper.level - 1] != null) { 119 for (int pos = 0; pos < w; pos += FLOORWIDTH) { 120 g.drawImage(Reaper.floors[Reaper.level - 1], pos, FLOORLEVEL, Color.black, null); 121 } 122 } 123 if (!Reaper.juststarted) { 124 if (Reaper.obstaclePositions != null) { 125 myApplet.changePageIfNecessary(); 126 // show the obstacles from right to left (because obstacles have white space to 127 // their left but not their right) 128 for (int i = Reaper.obstacleNumber - 1; i >= 0; i--) { 129 obstacleimage = myApplet.getObstacleImage(i); 130 if (Reaper.isTall[i]) 131 obstacleimage = tallobstacle; // only one image for this for now 132 g.drawImage(obstacleimage, 133 Reaper.obstaclePositions[i].x - (Reaper.page * Reaper.PAGEWIDTH), 134 Reaper.obstaclePositions[i].y, Color.white, null); 135 } 136 } 137 138 // show the prey 139 if (Reaper.preyPositions != null) { 140 for (int i = 0; i < Reaper.preyNumber; i++) { 141 // if (!myApplet.preyDead[i]) { 142 preyimage = myApplet.getEnemyImage(i); 143 g.drawImage(preyimage, Reaper.preyPositions[i].x - (Reaper.page * Reaper.PAGEWIDTH), 144 Reaper.preyPositions[i].y, null); 145 // } 146 } 147 } 148 149 // draw Hero (on top of preceding images) 150 if (Reaper.playerPosition != null) { 151 // show the player 152 Image reapersimage = myApplet.getHeroImage(); 153 if (Reaper.reapercrouching) { 154 if (Reaper.reaperleft) 155 reapersimage = reapercrouchleft; 156 else 157 reapersimage = reapercrouch; 158 } 159 if (Reaper.jumping) { 160 if (Reaper.reaperleft) 161 reapersimage = reaperjumpleft; 162 else 163 reapersimage = reaperjump; 164 } 165 g.drawImage(reapersimage, Reaper.playerPosition.x - (Reaper.page * Reaper.PAGEWIDTH), 166 Reaper.playerPosition.y, /* Color.white, */ null); 167 } 168 } 169 170 // draw warp image (on top of Hero) 171 if (Reaper.warpzone != null) { 172 // show the warp zone at the end of the level 173 g.drawImage(reaperwarp, Reaper.warpzone.x - (Reaper.page * Reaper.PAGEWIDTH), 174 Reaper.warpzone.y, Color.white, null); 175 } 176 177 if (Reaper.ingame == false && !Reaper.juststarted) { 178 if (Reaper.dead) { 179 // Reaper is dead (?!) 180 g.drawImage(reaperdead, myApplet.getBounds().width / 2, getBounds().height / 2, Color.white, null); 181 } else { 182 // level complete 183 g.drawImage(levelcomplete, myApplet.getBounds().width / 2, getBounds().height / 2, Color.white, null); 184 } 185 showingMessage = true; 186 } else 187 showingMessage = false; 188 if (starting) { 189 showTitle(g); 190 starting = false; 191 } 192 193 myApplet.setSomethingChangedSinceRepaint(false); 194 } 195 196 public void showTitle(Graphics g) { 197 for (int i = 0; i < 10; i++) { 198 g.drawImage(title[i], myApplet.getBounds().width / 2, getBounds().height / 2, Color.white, null); 199 try { 200 Thread.sleep(50); 201 } catch (Exception e) { 202 } 203 } 204 } 205 }