package EDU.gac.max.puzzle; import java.awt.*; public class Puzzle extends java.applet.Applet{ private int size = 4; // how many buttons wide and high private TileButton[][] buttons; private int blankRow, blankCol; // position of the blank space public Puzzle(){ setLayout(new BorderLayout()); Panel controlPanel = new Panel(); controlPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); add("North", controlPanel); controlPanel.add(new InitializeButton(this)); controlPanel.add(new RandomizeButton(this)); Panel mainPanel = new Panel(); add("Center", mainPanel); mainPanel.setLayout(new GridLayout(size, size)); buttons = new TileButton[size][size]; for(int row = 0; row < size; row++){ for(int col = 0; col < size; col++){ TileButton b = new TileButton(this, row, col); buttons[row][col] = b; mainPanel.add(b); } } initialize(); } void initialize(){ for(int row = 0; row < size; row++){ for(int col = 0; col < size; col++){ int label = row * size + col + 1; buttons[row][col].setLabel("" + label); } } blankRow = size - 1; blankCol = size - 1; buttons[blankRow][blankCol].setLabel(""); } void randomize(){ for(int i = 0; i < 100; i++){ pushRandomTile(); } } void pushRandomTile(){ int row = (int) (Math.random() * size); int col = (int) (Math.random() * size); pushTile(row, col); } 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(""); } }