java代码数字拼图

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import https://www.360docs.net/doc/d28137954.html,ponentAdapter;
import https://www.360docs.net/doc/d28137954.html,ponentEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;

public class Pingtu extends JFrame implements MouseListener,KeyListener{

private static final long serialVersionUID = 1L;
private JList listResult;
private JPanel panMain;
private JPanel panGame;
private JPanel panRight;
private DefaultComboBoxModel dcbm;

private JTextField txtCount;
private JTextField txtLevel;

private JLabel [][] labels;

private final int MAX_LEVEL = 10;
private int[][] nums;
private int level;
private long clickCount = 0L;

/**
* Create the frame
*/
public Pingtu() {
super();
addComponentListener(new ComponentAdapter() {
public void componentResized(final ComponentEvent e) {
JFrame jf = (JFrame)e.getSource();
if(jf.getHeight()<400) jf.setSize(jf.getWidth(),400);
if(jf.getWidth()<600) jf.setSize(600,jf.getHeight());
panRight.setBounds(jf.getWidth()-panRight.getWidth()-10,10,panRight.getWidth(),jf.getContentPane().getHeight()-20);
panGame.setBounds(10,10,jf.getWidth()-panRight.getWidth()-30,jf.getContentPane().getHeight()-20);
listResult.setSize(listResult.getWidth(), panRight.getHeight()-listResult.getY()-10);
}
});
setName("frmMain");
setTitle("拼图");
setBounds(100, 100, 579, 438);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panMain = new JPanel();
panMain.setLayout(null);
getContentPane().add(panMain, BorderLayout.CENTER);

panGame = new JPanel();
panGame.setLayout(null);
panGame.setBounds(10, 10, 358, 385);
panMain.add(panGame);

panRight = new JPanel();
panRight.setBackground(Color.CYAN);
panRight.setLayout(null);
panRight.setBounds(374, 10, 187, 385);
panMain.add(panRight);

txtLevel = new JTextField();
txtLevel.setText("3");
txtLevel.setBounds(62, 43, 87, 22);
panRight.add(txtLevel);

final JLabel label = new JLabel();
label.setText("行数:");
label.setBounds(10, 45, 39, 18);
panRight.add(label);

final JButton btnStart = new JButton();
btnStart.addMouseListener(new MouseAdapter() {
public void mouseReleased(final MouseEvent e) {
newGame();
}
});
btnStart.setText("开始");
btnStart.setBounds(10, 95, 73, 22);
panRight.add(btnStart);

final JLabel labCount = new JLabel();
labCount.setText("步数:");
labCount.setBounds(10, 176, 39, 18);
panRight.add(labCount);

txtCoun

t = new JTextField();
txtCount.setBounds(62, 174, 87, 22);
panRight.add(txtCount);

dcbm = new DefaultComboBoxModel();

listResult = new JList();
listResult.setModel(dcbm);
listResult.setBounds(13, 245, 164, 130);
panRight.add(listResult);

final JLabel labResult = new JLabel();
labResult.setText("结果:(级别 每局步数)");
labResult.setBounds(10, 221, 167, 18);
panRight.add(labResult);

newGame();
//
}

public boolean newGame(){
boolean rs = false;
try{
level = Integer.parseInt(txtLevel.getText());
if(level < 2 || level >MAX_LEVEL){
JOptionPane.showMessageDialog(this, "请输入大于2且小于" + MAX_LEVEL + "的数值.");
rs=false;
}
nums = new int[level][level];
for(int i = 0;ifor(int j =0;jnums[i][j] = i*level+j +1;
}
nums[level-1][level-1] = 0;
randomNums();
creatNewLabel();
}catch (NumberFormatException e) {
JOptionPane.showMessageDialog(this, "请输入整数!");
rs = false;
}
return rs;
}
public void creatNewLabel() {
panGame.removeAll();
panGame.repaint();
int len =( panGame.getWidth()>panGame.getHeight() ? panGame.getHeight() : panGame.getWidth()) / level;
labels =new JLabel[level][level];
for(int i = 0;ifor(int j =0;jlabels[i][j] = new JLabel();
labels[i][j].setFont(new Font("Arial", Font.BOLD, len/2));
labels[i][j].setHorizontalTextPosition(SwingConstants.CENTER);
labels[i][j].setHorizontalAlignment(SwingConstants.CENTER);
labels[i][j].setBorder(new LineBorder(Color.black, 1, false));
labels[i][j].setBounds(j*len, i*len, len, len);
if(nums[i][j] != 0)labels[i][j].setText(""+nums[i][j]);
else labels[i][j].setText("");
labels[i][j].addMouseListener(this);
labels[i][j].setOpaque(true);
labels[i][j].setBackground(Color.lightGray);
panGame.add(labels[i][j]);
}
clickCount = 0L;
txtCount.setText("0");

}

/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Pingtu frame = new Pingtu();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

public void mouseClicked(MouseEvent e) {
}

public void mouseEntered(MouseEvent e) {
if(e.getSource().getClass().equals(labels[0][0].getClass())){
((JLabel) e.getSource()).setBackground(Color.orange);
}
}

public void mouseExited(MouseEvent e) {
if(e.getSource().getClass().equals(labels[0][0].getClass())){
((JLabel) e.getSource()).setBackground(Color.lightGray);
}
}

public void mousePressed(MouseEvent e) {
}

public void mouseReleased(MouseEvent e) {
if(e.getSource().getClass().equals(labels[0][0].getClass())){
JLabel lab =(JLabel) e.getSource();
int i = lab.getY() / lab.getWidth();
int j = lab.getX() / lab.getWidth();
if(i>0 && nums[i-1][j]==0){
labels[i-1][j].setText(lab.getText());
labels[i][j].setText("");
nums[i-1][j]

= nums[i][j];
nums[i][j] = 0;
clickCount++;
}
else if(ilabels[i+1][j].setText(lab.getText());
labels[i][j].setText("");
nums[i+1][j] = nums[i][j];
nums[i][j] = 0;
clickCount++;
}
else if(j>0 && nums[i][j-1]==0){
labels[i][j-1].setText(lab.getText());
labels[i][j].setText("");
nums[i][j-1] = nums[i][j];
nums[i][j] = 0;
clickCount++;
}
else if(jlabels[i][j+1].setText(lab.getText());
labels[i][j].setText("");
nums[i][j+1] = nums[i][j];
nums[i][j] = 0;
clickCount++;
}
if( checkNums()){
JOptionPane.showMessageDialog(this, "恭喜你过关!\r\n你点击次数是:" + clickCount);
dcbm.addElement(""+level+" " + clickCount);
//(DefaultListModel)listResult.getModel();//.add(new JLabel(""+level+" " + clickCount));
newGame();
}
txtCount.setText(""+clickCount);
}
}
private boolean checkNums() {
for(int i = 0;ifor(int j =0;jif( (i*level+j != level*level-1) && nums[i][j] != i*level+j +1 ){
return false;
}
}
return true;
}

public void randomNums(){
int x1=0,y1=0, x2=0,y2=0,tem=0;
for(int i = 0; ix1 =(int)(Math.random()*level);
y1 =(int)(Math.random()*level);
x2 =(int)(Math.random()*level);
y2 =(int)(Math.random()*level);
tem = nums[x1][y1];
nums[x1][y1] = nums[x2][y2];
nums[x2][y2] = tem;
}
}

public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyCode());
}

public void keyReleased(KeyEvent e) {
System.out.println(e.getKeyCode());
}

public void keyTyped(KeyEvent e) {
System.out.println(e.getKeyCode());
}
}

相关文档
最新文档