import java.applet.*; import java.awt.*; import java.awt.event.*; import java.net.URL; import java.util.*; import java.awt.image.*; public class EggPuzzle extends Applet { Image offscreenImage, menu; Graphics h; public int numImages = 5; EggShell a,b,cc,d,e,f,g,hh,i; Vector objVect; public void init(){ setBackground(new Color(0,0,0)); EggShell.loadImages(this); menu = getImage(getCodeBase(),"menu.jpg"); objVect = new Vector(); a=new EggShell(232,56,1); b=new EggShell(233,88,5); cc=new EggShell(316,90,6); d=new EggShell(315,171,9); e=new EggShell(233,171,10); f=new EggShell(314,56,13); g=new EggShell(282,171,17); hh=new EggShell(282,41,21); i=new EggShell(314,42,25); objVect.addElement(a); objVect.addElement(b); objVect.addElement(cc); objVect.addElement(d); objVect.addElement(e); objVect.addElement(f); objVect.addElement(g); objVect.addElement(hh); objVect.addElement(i); offscreenImage = createImage(this.size().width,this.size().height); h = offscreenImage.getGraphics(); repaint(); } public void paint(Graphics g) { h.setColor(Color.black); h.fillRect(0,0,this.size().width,this.size().height); Enumeration e1 = objVect.elements(); while(e1.hasMoreElements()) { EggShell c = (EggShell)e1.nextElement(); c.show(h); } h.drawImage(menu,0,0,this); g.drawImage(offscreenImage,0,0,this); } public void scrambleEggs() { Enumeration e1 = objVect.elements(); while(e1.hasMoreElements()) { EggShell c = (EggShell)e1.nextElement(); c.folderX=(int)(Math.random()*200+200); c.folderY=(int)(Math.random()*290); } return; } public boolean keyDown(Event evt, int key) { if (key == 'r') { System.out.println("Rotate EggShell"); Enumeration e1 = objVect.elements(); while(e1.hasMoreElements()) { EggShell c = (EggShell)e1.nextElement(); if (c.lastSel) { switch (c.shellPeice) { case 1: c.shellPeice = 4; break; case 2: c.shellPeice = 1; break; case 3: c.shellPeice = 2; break; case 4: c.shellPeice = 3; break; case 5: c.shellPeice = 8; break; case 6: c.shellPeice = 5; break; case 7: c.shellPeice = 6; break; case 8: c.shellPeice = 7; break; case 9: c.shellPeice = 12; break; case 10: c.shellPeice = 9; break; case 11: c.shellPeice = 10; break; case 12: c.shellPeice = 11; break; case 13: c.shellPeice = 16; break; case 14: c.shellPeice = 13; break; case 15: c.shellPeice = 14; break; case 16: c.shellPeice = 15; break; case 17: c.shellPeice = 20; break; case 18: c.shellPeice = 17; break; case 19: c.shellPeice = 18; break; case 20: c.shellPeice = 19; break; case 21: c.shellPeice = 24; break; case 22: c.shellPeice = 21; break; case 23: c.shellPeice = 22; break; case 24: c.shellPeice = 23; break; case 25: c.shellPeice = 28; break; case 26: c.shellPeice = 25; break; case 27: c.shellPeice = 26; break; case 28: c.shellPeice = 27; break; } } } } if (key == 's') { System.out.println("Scramble Eggs"); scrambleEggs(); } repaint(); return true; } public boolean mouseDown(Event evt, int x, int y) { System.out.println("x: "+(x)+"y: "+(y)); // Debug position Enumeration e1 = objVect.elements(); while(e1.hasMoreElements()) { EggShell c = (EggShell)e1.nextElement(); if (c.selStat) c.reset(); if (!c.oneSelected()) c.setMousePoint(x,y); if (x > 0 && x < 10) if (y > 0 && y < 10) System.out.println("x:"+c.folderX+" y:"+c.folderY); } repaint(); return true; } public boolean mouseUp(Event evt, int x, int y) { Enumeration e1 = objVect.elements(); while(e1.hasMoreElements()) { EggShell c = (EggShell)e1.nextElement(); c.contactUp(); } repaint(); return true; } public boolean mouseDrag(Event evt, int x, int y) { Enumeration e1 = objVect.elements(); while(e1.hasMoreElements()) { EggShell c = (EggShell)e1.nextElement(); c.objectDrag(x,y); } repaint(); return true; } public void update(Graphics g) { paint(g); } } // End EggPuzzle /////////////////// EggShell Class /////////////////////////////// class EggShell extends Applet { int folderX=0, folderY=0, folderX_Old, folderY_Old, pointOnImageX, pointOnImageY; public int numImages = 28; static Image imageStrip; static private boolean selected = false; boolean mouseContact = false, lastSel=false; int shellPeice; static boolean selStat=false; private double angle=0.0; public EggShell(int x, int y, int num) { folderX=folderX_Old=x; folderY=folderY_Old=y; shellPeice=num; } public EggShell(int x, int y, int num, double degree) { folderX=folderX_Old=x; folderY=folderY_Old=y; shellPeice=num; angle = degree; } public static void loadImages(Applet parent){ imageStrip = parent.getImage(parent.getCodeBase(),"egg.gif"); } public void reset() { lastSel = false; } public void drawStripImage(Graphics g, Image imagePtr, int totalImageNum, int imageNum, int drawX, int drawY) { int imageWidth = imagePtr.getWidth(this) / totalImageNum; int imageHeight = imagePtr.getHeight(this); //getHeight(); Graphics subArea = g.create(drawX, drawY, imageWidth, imageHeight); int stripX = (imageNum-1)*imageWidth; int stripY = 0; subArea.drawImage(imagePtr, -stripX, -stripY, this); subArea.dispose(); } public void oldCoord () { folderX_Old = folderX; folderY_Old = folderY; } public boolean oneSelected() { return selected; } public void setMousePoint(int x ,int y) { //145w 117h int width=0; int height=0; switch(shellPeice) { case 1: width = 89; height = 117; break; case 2: width = 110; height = 84; break; case 3: width = 89; height = 117; break; case 4: width = 110; height = 84; break; case 5: width = 85; height = 85; break; case 6: width = 85; height = 85; break; case 7: width = 85; height = 85; break; case 8: width = 85; height = 85; break; case 9: width = 83; height = 86; break; case 10: width = 83; height = 86; break; case 11: width = 83; height = 86; break; case 12: width = 83; height = 86; break; case 13: width = 89; height = 117; break; case 14: width = 110; height = 84; break; case 15: width = 89; height = 117; break; case 16: width = 110; height = 84; break; case 17: width = 71; height = 40; break; case 18: width = 35; height = 75; break; case 19: width = 71; height = 40; break; case 20: width = 35; height = 75; break; case 21: width = 38; height = 53; break; case 22: width = 53; height = 38; break; case 23: width = 38; height = 53; break; case 24: width = 53; height = 38; break; case 25: width = 53; height = 38; break; case 26: width = 38; height = 53; break; case 27: width = 53; height = 38; break; case 28: width = 38; height = 53; break; default: width = 145; height = 117; } if (x>=folderX && x <=(folderX+width)) { if (y>=folderY && y<=(folderY+height)) { pointOnImageX = (folderX - x); pointOnImageY = (folderY - y); contact(); } } } public void objectDrag(int x, int y) { if (mouseContact) { oldCoord(); folderX=(x+pointOnImageX); folderY=(y+pointOnImageY); } } public void show (Graphics g) { drawStripImage(g, imageStrip, numImages, shellPeice ,folderX,folderY); } public void contact() { if (mouseContact == false) { mouseContact = true; selected = true; lastSel = true; selStat = true; } else { mouseContact = false; selected = false; } } public void contactUp() { if (mouseContact) { mouseContact = false; selected = false;} } } // End Class Shell