import java.awt.*; import java.awt.event.*; public class Puzzle extends Frame implements WindowListener { private int size = 4; // how many buttons wide and high private Button[][] buttons; private int blankRow, blankCol; // position of the blank space public Puzzle(){ setLayout(new GridLayout(size, size)); buttons = new Button[size][size]; int buttonCount = 0; for(int row = 0; row < size; row++){ for(int col = 0; col < size; col++){ Button b = new Button(); buttons[row][col] = b; b.addActionListener(new TileActionListener (this, row, col)); buttonCount++; b.setLabel("" + buttonCount); add(b); } } blankRow = size - 1; blankCol = size - 1; buttons[blankRow][blankCol].setLabel(""); setSize(250, 250); addWindowListener(this); setVisible(true); } public void pushTile(int row, int col){ if(row == blankRow){ for( ; blankCol < col; blankCol++){ buttons[blankRow][blankCol].setLabel (buttons[blankRow][blankCol+1].getLabel()); } for( ; blankCol > col; blankCol--){ buttons[blankRow][blankCol].setLabel (buttons[blankRow][blankCol-1].getLabel()); } } else if(col == blankCol){ for( ; blankRow < row; blankRow++){ buttons[blankRow][blankCol].setLabel (buttons[blankRow+1][blankCol].getLabel()); } for( ; blankRow > row; blankRow--){ buttons[blankRow][blankCol].setLabel (buttons[blankRow-1][blankCol].getLabel()); } } buttons[blankRow][blankCol].setLabel(""); } public void windowClosing(WindowEvent e){ System.exit(0); } public void windowActivated(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowDeiconified(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowOpened(WindowEvent e){} public static void main(String[] args){ if(args.length > 0){ System.err.println("Usage: java Puzzle"); System.exit(1); } new Puzzle(); } }