Mega Code Archive

 
Categories / Java / Swing JFC
 

Slide Puzzle

import java.applet.Applet; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.awt.Rectangle; /* SlidePuzzle, originally from VisualJ++ Developer's News, July 1997 */ public class SlidePuzzle extends Applet implements Runnable {   Thread m_SlidePuzzle = null;   private Graphics m_Graphics;   private Image logo;   private boolean m_fAllLoaded = false;   private Rectangle squares[];   private int order[];   private int x = 1;   private int y = 0;   public void init() {     //Define and populate Rectangle array     squares = new Rectangle[9];     squares[0] = new Rectangle(0, 0, 60, 60);     squares[1] = new Rectangle(0, 60, 60, 60);     squares[2] = new Rectangle(0, 120, 60, 60);     squares[3] = new Rectangle(60, 0, 60, 60);     squares[4] = new Rectangle(60, 60, 60, 60);     squares[5] = new Rectangle(60, 120, 60, 60);     squares[6] = new Rectangle(120, 0, 60, 60);     squares[7] = new Rectangle(120, 60, 60, 60);     squares[8] = new Rectangle(120, 120, 60, 60);     //Define and populate int array     order = new int[9];     order[0] = 6;     order[1] = 2;     order[2] = 8;     order[3] = 1;     order[4] = 0;     order[5] = 7;     order[6] = 5;     order[7] = 4;     order[8] = 3;   }   public void paint(Graphics g) {     if (m_fAllLoaded) {       Rectangle r = g.getClipRect();       g.clearRect(r.x, r.y, r.width, r.height);       g.drawImage(logo, 0, 0, null);     } else       g.drawString("Loading images...", 10, 20);   }   public void start() {     if (m_SlidePuzzle == null) {       m_SlidePuzzle = new Thread(this);       m_SlidePuzzle.start();     }   }   public void stop() {     if (m_SlidePuzzle != null) {       m_SlidePuzzle.stop();       m_SlidePuzzle = null;     }   }   public void run() {     if (!m_fAllLoaded) {       m_Graphics = getGraphics();       MediaTracker tracker = new MediaTracker(this);       logo = getImage(getDocumentBase(), "vjlogo.gif");       tracker.addImage(logo, 0);       try {         tracker.waitForAll();         m_fAllLoaded = !tracker.isErrorAny();       } catch (InterruptedException e) {       }       if (!m_fAllLoaded) {         stop();         m_Graphics.drawString("Error loading images!", 10, 40);         return;       }     }     //Clear the screen and draw first image     repaint();     //Move the squares     while (true) {       for (x = 1; x < 9; x++) {         //Slow down the animation         try {           Thread.sleep(350);         } catch (InterruptedException e) {         }         //Move square to next location         m_Graphics.copyArea(squares[order[x]].x, squares[order[x]].y,             60, 60, squares[order[x - 1]].x - squares[order[x]].x,             squares[order[x - 1]].y - squares[order[x]].y);         //Clear most recently copied square         m_Graphics.clearRect(squares[order[x]].x, squares[order[x]].y,             60, 60);       }       //Repaint original graphic after two cycles       y++;       if (y == 2) {         repaint();         y = 0;       }     }   } }