1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
| /* * Author:ETY001 * URI:https://akawa.ink */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.lang.Math; import java.applet.Applet;
public class pintu extends Applet implements ActionListener { int EmptyRow = 0;//空白图横坐标 int EmptyCol = 0;//空白图纵坐标 JPanel up = new JPanel();//上部面板 JPanel down = new JPanel();//下部面板 JButton[][] btn = new JButton[5][5];//拼图按钮 int a[][] =new int[5][5];//记录是否重复随机数的数组 int m,n;//记录随机数 //JTextField tt = new JTextField(15);//调试使用
public void init() { //上部 ImageIcon oriPic = new ImageIcon("星座.jpg"); JLabel oriPicLabel = new JLabel("",oriPic,JLabel.CENTER); JButton next = new JButton("下一局"); up.setLayout(new BorderLayout()); up.add(oriPicLabel,BorderLayout.WEST); up.add(next,BorderLayout.CENTER); next.addActionListener(this);
//下部 down.setLayout(new GridLayout(5,5)); for(int i=0;i<5;i++) //清空记录数组 { for(int j=0;j<5;j++) { a[i][j]=0; } } for(int i=0;i<5;i++)//产生随机的图片碎片 { for(int j=0;j<5;j++) { m=(int)(Math.random() * 5); n=(int)(Math.random() * 5); while(a[m][n]==1) { m=(int)(Math.random() * 5); n=(int)(Math.random() * 5); } a[m][n]=1; if(m==0 && n==0)//记录初始时刻空白图片的位置 { EmptyRow = i; EmptyCol = j; } //注意原素材的10和11两张图片的扩展名是大写的,这也是两张图片导入失败的原因 btn[i][j] = new JButton(new ImageIcon(m+""+n+".jpg")); down.add(btn[i][j]); btn[i][j].setActionCommand(i+":"+j); btn[i][j].addActionListener(this); } }
//全局面板 setLayout(new BorderLayout()); add(up,BorderLayout.NORTH); add(down,BorderLayout.CENTER); //add(tt,BorderLayout.SOUTH);//调试使用 setSize(275,360); setVisible(true); }
public void PicRepeat() { for(int i=0;i<5;i++) //清空记录数组 { for(int j=0;j<5;j++) { a[i][j]=0; } } for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { m=(int)(Math.random() * 5); n=(int)(Math.random() * 5); while(a[m][n]==1) { m=(int)(Math.random() * 5); n=(int)(Math.random() * 5); } a[m][n]=1; if(m==0 && n==0)//记录初始时刻空白图片的位置 { EmptyRow = i; EmptyCol = j; } //更新按钮上的随机图片 btn[i][j].setIcon(new ImageIcon(m+""+n+".jpg")); } } }
public void changePic(int clickRow,int clickCol,int emptyRow,int emptyCol) { if(Math.abs(clickRow-emptyRow)+Math.abs(clickCol-emptyCol)==1) { Icon tmp1 = btn[clickRow][clickCol].getIcon(); Icon tmp2 = btn[emptyRow][emptyCol].getIcon(); btn[clickRow][clickCol].setIcon(tmp2); btn[emptyRow][emptyCol].setIcon(tmp1); EmptyRow = clickRow; EmptyCol = clickCol; } }
public void actionPerformed(ActionEvent e) { int row=0,col=0; if (e.getActionCommand() == "下一局") { PicRepeat(); } else { String[] tmp; tmp = e.getActionCommand().split(":"); row = Integer.parseInt(tmp[0]); col = Integer.parseInt(tmp[1]); changePic(row,col,EmptyRow,EmptyCol); } //tt.setText(""+btn[row][col].getIcon());//调试使用 } }
|