Easy to use Java GUI to make a simple puzzle game
Main
Package Hw1;import Java.io.ioexception;import Javax.swing.icon;import javax.swing.imageicon;import Javax.swing.jframe;import Javax.swing.jlabel;public class HW1 extends jframe{/** * */public hw1_0586 (String string) {Ico n icon = new ImageIcon (string); JLabel label = new JLabel (icon); this.add (label); This.settitle ("Original image!"); This.setlocation (200,0);} /** * To build icon from an existing image. * * @param path of the path of the image * @return */public static void Main (String args[]) throws ioexception{string path = "Img1.png";//string path = "Img2.png" <span style= "font-family:arial, Helvetica, Sans-serif;" >;</span> HW1 buttonframe = new HW1 (path); Jeightpuzzleframe jframe = new Jeightpuzzleframe ("Eight Puzzle", path); Jframe.setdefaultcloseoperation (Jframe.exit_on_close); Jframe.setsize (165,165); Set Frame size jframe.setvisible (true); Display frame buttonframe.setdefaultcloseoperation (jframe.exit_on_close); Buttonframe.setsize (165,165); Set Frame size buttonframe.setvisible (true); Display Frame}}
Eight puzzle
Package Hw1;import Java.awt.container;import Java.awt.gridlayout;import java.awt.event.actionevent;import Java.awt.event.actionlistener;import Java.awt.image.bufferedimage;import Java.io.file;import java.io.IOException; Import Java.util.arraylist;import java.util.random;import Javax.imageio.imageio;import Javax.swing.Icon;import Javax.swing.imageicon;import Javax.swing.jbutton;import Javax.swing.jframe;import Javax.swing.JLabel;import Javax.swing.joptionpane;import javax.swing.jpanel;/** This is a eight puzzle game. * Two-dimensional array Save the location of button * The One-array Save the individual button * */public class Jeightpuz Zleframe extends JFrame {/** * *///private static final long serialversionuid = 1l;private bufferedimage img;private Buff Eredimage [] IMGs = new Bufferedimage[8];p rivate jbutton[] buttons = new Jbutton[8];p rivate imageicon [] imgicons = new Im AGEICON[8]; Private Icon [] icons = new Icon[8];p rivate GridLayout layout;private JPanel panel;private ContainerContainer;private JLabel label;private int[][] array = new Int[3][3];p ublic jeightpuzzleframe (string title, string path) { Super (title); System.out.println (This.getlocation ()); container = new container (); container = Getcontentpane ();p anel = new JPanel (); Layout = new GridLayout (3, 3); setlayout (layout); label = new JLabel (""); for (int i = 0; I < 8; i++) {Buttons[i] = new JButton ();} Panel.add (label), try {img = imageio.read (new File (Path)),} catch (IOException e) {//TODO auto-generated catch Blocke.prin Tstacktrace ();} int num = Img.getwidth (); Because of square,same length in width and//heightcontainer = Getcontentpane (); Imgs[0] = img.getsubimage (0, 0, NUM/3 , NUM/3); imgs[1] = img.getsubimage (NUM/3, 0, NUM/3, NUM/3); imgs[2] = img.getsubimage (2 * num/3, 0, NUM/3, num /3); Imgs[3] = img.getsubimage (0, NUM/3, NUM/3, NUM/3); imgs[4] = Img.getsubimage (NUM/3, NUM/3, NUM/3, NUM/3) ; Imgs[5] = img.getsubimage (2 * num/3, NUM/3, NUM/3, NUM/3); imgs[6] = Img.getsubImage (0, 2 * num/3, NUM/3, NUM/3); imgs[7] = Img.getsubimage (NUM/3, 2 * num/3, NUM/3, NUM/3);//instantiated t He object of image iconfor (int i =0; i < 8; i++) {imgicons[i] = new ImageIcon ();} Set the image into image iconfor (int i = 0; i < 8; i++) {imgicons[i].setimage (imgs[i]);} Assign image icon to iconfor (int i = 0; i < 8; i++) {icons[i] = imgicons[i];} instantiated the buttonfor (int i = 0;i < 8; i++) {buttons[i] = new JButton (Icons[i]);} Set the size of the buttonfor (int i =0; i < 8; i++) {buttons[i].setsize (Icons[0].geticonwidth (), Icons[0].geticonheigh T ());} Set the size of the empty panel panel.setsize (Icons[0].geticonwidth (), Icons[0].geticonheight ());//instantiated the Button Handlerbuttonhandler handler = new Buttonhandler (); for (int i = 0, i < 8; i++) {//add handle to Buttonbuttons[i] . addActionListener (handler);} First time initial game.this.initialGame ();} Initialize the first game!private void Initialgame () {array[0][0] = 8;array[1][0] = 0;array[2] [0] = 1;array[0][1] = 4;array[1][1] = 5;array[2][1] = 2;array[0][2] = 3;array[1][2] = 6;array[2][2] = 7;add (panel); Add (but Add (Buttons[1]), add (Buttons[4]), add (Buttons[5]), add (Buttons[2]), add (Buttons[3]), add (Buttons[6]), add (tons[0); BUTTONS[7]);} Button action Listenerprivate class Buttonhandler implements ActionListener {public void actionperformed (ActionEvent E {int num = -1;for (int i = 0; i < 8; i++) {if (e.getsource () = = Buttons[i]) {num = I;break;}} Determinelocation (num); move (); Congratulation (Win ()), if (Win ()) {reinitializegame (); Move ();}} Determine the location of the empty panelprivate void determinelocation (int. num) {for (int i = 0; i < 3; i++) for (int j = 0; J < 3; J + +) {if (array[j][i] = = num) {determinemove (j,i); return;//we need to stop this processing,//so we return over here.}}} Determine whether it can mvoveprivate void determinemove (int j, int i) {int A, B, C, d;int temp;a = J-1;b = j + 1;c = I-1;d = i + 1;if (a >= 0 && array[a][i] = = 8) {TeMP = Array[a][i];array[a][i] = array[j][i];array[j][i] = temp; System.out.print ("Left");} else if (b <= 2 && array[b][i] = = 8) {temp = Array[b][i];array[b][i] = array[j][i];array[j][i] = temp; System.out.print ("Right");} else if (c >= 0 && array[j][c] = = 8) {temp = Array[j][c];array[j][c] = array[j][i];array[j][i] = temp; System.out.print ("Up");} else if (d <= 2 && array[j][d] = = 8) {temp = Array[j][d];array[j][d] = array[j][i];array[j][i] = temp; System.out.print ("Down");}} Execute the action of Moveprivate Void Move () {System.out.println ("can Move"); Container.removeall (); for (int i = 0; I &l T 3; i++) {for (int j = 0; J < 3; J + +) {if (array[j][i] = = 8) {Add (panel);} elseadd (Buttons[array[j][i]);}} Getcontentpane (). validate ();} Show the congratulation dialog!private Void congratulation (Boolean win) {if (Win) {icon icon = new ImageIcon ("/users/huaz He/desktop/file of Eclipse/hw1_1/src/image/congratulation.gif "); System.out.println ("You win!"); JoptionpaNe.showmessagedialog (This, "", "congratulation!", 0,icon); }else{//nothing}}//if win return Trueprivate Boolean win () {int [][]winarray = new int [3][3];int temp = 0;for (int i =0; i < 3; i++) for (Int J =0; J < 3; J + +) {Winarray[j][i] = temp;temp++;} for (int i =0; i < 3, i++) {for (int J =0; J < 3; J + +) {if (Winarray[j][i]! = Array[j][i]) {return false;}} return true;} Reinitialize the Game.private void Reinitializegame () {arraylist<integer> list = new arraylist<integer> () ; Random random = new random (); object[] value = new Object[8];//get the 9 random number (range from 0 to 9)//and make sure t Here are no repetition in It.while (true) {int number = Random.nextint (9), if (!list.contains (number)) {List.add (number);} if (list.size () = = 9) {break;}} Value = List.toarray (); for (int i = 0; i < 9; i++) {System.out.println (value[i]);} int count = 0;for (int i = 0; i < 3; i++) for (int j = 0; J < 3; J + +) {Array[j][i] = (Integer) value[count];count++;}}
Tip: When you want to run, replace the img1.png in main with the path to your own picture.
Java GUI Basics Eight Puzzle (puzzle game)