拼图游戏源代码
list.add(jb);
}
//打乱顺序
Collections.shuffle(list);
JButton jb = new JButton();
jb.setName("16");
jb.setIcon(new ImageIcon(path+"15.jpg"));
jb.setVisible(false);
} } } class MenuListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) {
if(e.getSource()==jmi_start){ //开始游戏 card.show(NumberGame.this.getContentPane(), "game");
@SuppressWarnings("serial") public class NumberGame extends JFrame implements ActionListener{
String path="LookingGirl/"; int i=3;
//定义一个卡片布局 CardLayout card = new CardLayout();
import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel;
System.exit(0); } } } } public static void main(String[] args) {
new NumberGame(); } }
//定义一个二维数组,用来存储 16 个按钮
JButton[][] number = new JButton[4][4];
List<JButton> list = new ArrayList<JButton>();
private void initMenu(){ this.setJMenuBar(bar); bar.add(menu); menu.add(jmi_start); menu.add(jmi_viewImage); menu.add(jmi_returnGame); menu.addSeparator(); menu.add(jmi_exit); MenuListener li = new MenuListener(); jmi_start.addActionListener(li); jmi_viewImage.addActionListener(li); jmi_returnGame.addActionListener(li); jmi_exit.addActionListener(li);
this.add(jp_image,"image"); this.add(jp_game,"game");
//显示 this.setVisible(true); } //交换两个按钮 private void change(JButton a,JButton b){ Icon str= a.getIcon(); a.setIcon(b.getIcon()); b.setIcon(str); String name = a.getName(); a.setName(b.getName()); b.setName(name); a.setVisible(!a.isVisible()); b.setVisible(!b.isVisible()); } //判断是否成功 private void success(){ boolean flag=true; for(int i=0;i<16;i++){
if(!number[i/4][i%4].getName().equals(Integer.toString(i+1))){ System.out.println(i); flag=false; break;
} }
if(flag){ //成功了 number[3][3].setVisible(true); JOptionPane.showMessageDialog(this, " 恭 喜 你 , 成 功 了 "," 成 功
}else if(e.getSource()==jmi_viewImage){ i--; jmi_viewImage.setText("查看原图 "+i); card.show(NumberGame.this.getContentPane(), "image"); if(i<1){
jmi_viewImage.setEnabled(false); } }else if(e.getSource()==jmi_returnGame){ card.show(NumberGame.this.getContentPane(), "game"); }else{ int i=JOptionPane.showConfirmDialog(NumberGame.this, " 你 真 的 要 退 出 吗?","提示",JOptionPane.OK_CANCEL_OPTION); if(i==JOptionPane.YES_OPTION){
for(int j=0;j<4;j++){ if(n==number[i][j]){ //上 if(i>0 && !number[i-1][j].isVisible()){ change(n,number[i-1][j]); }else if(i<3 && !number[i+1][j].isVisible()){ //下 change(n,number[i+1]p; !number[i][j-1].isVisible()){ //左 change(n,number[i][j-1]); }else if(j<3 && !number[i][j+1].isVisible()){ //右 change(n,number[i][j+1]); } success(); }
import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Collections; import java.util.List;
list.add(jb);
for(int i=0;i<list.size();i++){
number[i/4][i%4] = list.get(i); //为每个按钮加上监听 number[i/4][i%4].addActionListener(this); number[i/4][i%4].setFont(new Font("宋体",Font.BOLD,24)); jp_game.add(number[i/4][i%4]); } } //构造方法 public NumberGame(){ this.setBounds(100, 100, 400, 460); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置布局管理器 this.setLayout(card); initMenu(); initGame(); initImage();
JMenuBar bar = new JMenuBar(); JMenu menu=new JMenu("功能"); JMenuItem jmi_start= new JMenuItem("开始游戏"); JMenuItem jmi_viewImage= new JMenuItem("查看原图 3"); JMenuItem jmi_returnGame= new JMenuItem("返回游戏");
}
//初使化图像区 public void initImage(){
jp_image.setLayout(new BorderLayout()); jp_image.add(jl_image); }
//初使化按钮数组,并将按钮放到面板中 public void initGame(){
//将面板的布局改成 grid jp_game.setLayout(new GridLayout(4,4));
",JOptionPane.OK_OPTION,new ImageIcon("success.png")); }
}
@Override public void actionPerformed(ActionEvent e) {
JButton n=(JButton)e.getSource(); //判断当前点击的是哪 个按钮 for(int i=0;i<4;i++){