拼图游戏思路断了!各位大神只要告诉我一点思路就行了!
我用的方法是 : 采用网格布局,初始化的时候,将图片写入到JLabel中,最后一个JLabel不写入任何信息,再用集合将JLabel添加进去,利用Collections.shuffle(集合)方法将其打乱顺序,然后一个循环将其写入网格布局中~
代码如下/**
* 这个类用来构建窗口,并把拼图的总体布局弄好
* @author a
*
*/
public class JigsawGui extends JFrame{
//这九个JLabel变量用来存放图片,有一个变量存放的是空白
private JLabel lab1 = new JLabel(),
lab2 = new JLabel(),
lab3 = new JLabel(),
lab4 = new JLabel(),
lab5 = new JLabel(),
lab6 = new JLabel(),
lab7 = new JLabel(),
lab8 = new JLabel(),
lab9 = new JLabel();
//这个集合存放九个JLabel变量
private List<JLabel> labs = new ArrayList<JLabel>();
//窗口的宽
public static final int WIDTH = 486;
//窗口的高
public static final int HEIGHT = 366;
/*
* 构造方法,初始化窗口
*/
public JigsawGui(){
//设置窗口大小
this.setSize(WIDTH,HEIGHT);
//窗口大小不可变
this.setResizable(false);
//窗口居中
this.setLocationRelativeTo(null);
//关闭窗口
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//调用jbInit方法
jbInit();
//把集合中的元素随机打乱
Collections.shuffle(labs);
//调用inputLayout方法
inputLayout(labs);
//显示窗体
this.setVisible(true);
}
/**
* 这个方法用来把集合中的每一个元素放到网格式布局中去
*/
private void inputLayout(List<JLabel> labs){
Container me = getContentPane();
me.setLayout(new GridLayout(3, 3));
for(int i = 0;i < labs.size();i++){
JLabel lab = labs.get(i);
me.add(lab);
}
}
/**
* 这个方法用于把图片存放在JLabel中,再把每一个JLabel放到集合中去
*/
public void jbInit(){
ImageIcon bg1 = new ImageIcon("");
lab1.setIcon(bg1);
labs.add(lab1);
ImageIcon bg2 = new ImageIcon("F:/images/2.png");
lab2.setIcon(bg2);
labs.add(lab2);
ImageIcon bg3 = new ImageIcon("F:/images/3.png");
lab3.setIcon(bg3);
labs.add(lab3);
ImageIcon bg4 = new ImageIcon("F:/images/4.png");
lab4.setIcon(bg4);
labs.add(lab4);
ImageIcon bg5 = new ImageIcon("F:/images/5.png");
lab5.setIcon(bg5);
labs.add(lab5);
ImageIcon bg6 = new ImageIcon("F:/images/6.png");
lab6.setIcon(bg6);
labs.add(lab6);
ImageIcon bg7 = new ImageIcon("F:/images/7.png");
lab7.setIcon(bg7);
labs.add(lab7);
ImageIcon bg8 = new ImageIcon("F:/images/8.png");
lab8.setIcon(bg8);
labs.add(lab8);
ImageIcon bg9 = new ImageIcon("F:/images/9.png");
lab9.setIcon(bg9);
labs.add(lab9);
}
/**
* 启动整个程序
* @param args
*/
public static void main(String[] args) {
new JigsawGui();
}
}
写到这里的时候,我没有思路的地方是: 空白的地方我用什么表示?比如我点击了一个网格,我就要判断它的周围是否是空白,如果是,那么我就跟空白对换,如果最终的把图片的顺序移到了最初我存在集合中顺序那么我就赢了,但是我的集合怎么实现移动?怎么实现集合中元素的交换?想了很久卡住了!
我是新手,各位大神只要稍微指点我一下就可以了!