I am making a sliding tile puzzle. Below is my code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class GUI implements ActionListener{
private JFrame game; //Name the main window "game"
private JPanel borderPanel; //Declare borderPanel for main window
private BorderLayout border; //Name the borderPanel "border"
private ImageIcon[] image = new ImageIcon[12]; //Declare an array of images for tiles
private JButton[] tiles = new JButton[12]; //Declare an array for JButton inside the gridPanel
private JPanel gridPanel; //Declare gridPanel
private GridLayout grid; //Name the gridPanel "grid"
private int i; //Declare integer "i"
public GUI(){
game = new JFrame(); //Initial main window "game"
game.setTitle("Puzzle"); //Change window title to "Puzzle"
game.setSize(456, 392); //Set window size
game.setResizable(false); //fix the window's size
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
borderPanel = new JPanel(); //Declare borderPanel
border = new BorderLayout(); //Initial borderPanel
borderPanel.setLayout(border);
JButton newGameBtn = new JButton("New Game"); //Declare JButton "New Game"
borderPanel.add (newGameBtn, BorderLayout.PAGE_START); //Add a "new game" button on top
newGameBtn.addActionListener(this); //Add ActionListener function to JButton "newGamebtn"
gridPanel = new JPanel(); //Declare gridPanel for the tiles
GridLayout grid = new GridLayout(3, 4); //Give the gridPanel 12boxes
gridPanel.setLayout(grid); //Initial gridPanel
for (i = 0; i < 12; i++){
image[i] = new ImageIcon("bart" + i + ".jpg"); //link the array and images together
tiles[i] = new JButton(image[i]); //Setup 12 JButtons and place images onto JButtons
gridPanel.add(tiles[i]); //Add the tiles to gridPanel
}
borderPanel.add (gridPanel, BorderLayout.CENTER); //Put the gridPanel into the center of the borderPanel
game.add(borderPanel); //Add borderPanel to main frame
game.setVisible(true); //Make it visible
}
public void actionPerformed(ActionEvent click){
Collections.shuffle(Arrays.asList(tiles)); //Shuffle the the array "tiles" in an arraylist
shuffleTiles(); //Function to re-layout all tiles
}
public void shuffleTiles(){
gridPanel.removeAll(); //Remove all tiles in gridPanel
for (JButton tilesorder : tiles){ //For each element name "tilesorder" in "tiles
gridPanel.add(tilesorder); //Add all tiles back onto gridPanel with new order
}
gridPanel.repaint(); //Clean the area after remove tiles in case of old images are still there
gridPanel.revalidate(); //Re-layout the tiles
}
public static void main(String[] args){
GUI game = new GUI();
}
}
I have declared 2 arrays, 1 for images and 1 for tiles. I shuffle the tiles with Collections.shuffle function. As of now, I can shuffle the tiles but I have no idea how to swap the tiles?
Any help will be appreciated. Thanks.