FileDocCategorySizeDatePackage
SlidePuzzle.javaAPI DocExample2717Mon Jul 03 19:15:28 BST 2000None

SlidePuzzle

public class SlidePuzzle extends Applet implements Runnable

Fields Summary
Thread
m_SlidePuzzle
private Graphics
m_Graphics
private Image
logo
private boolean
m_fAllLoaded
private Rectangle[]
squares
private int[]
order
private int
x
private int
y
Constructors Summary
Methods Summary
public voidinit()


	  
	
		 //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 voidpaint(java.awt.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 voidrun()

		 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;
		 }
	   }
	
public voidstart()

		 if (m_SlidePuzzle == null)
		 {
			  m_SlidePuzzle = new Thread(this);
			  m_SlidePuzzle.start();
		 }
	
public voidstop()

		 if (m_SlidePuzzle != null)
		 {
			  m_SlidePuzzle.stop();
			  m_SlidePuzzle = null;
		 }