拼图游戏思路断了!各位大神只要告诉我一点思路就行了!

qa13536514711 2014-07-27 08:57:25
我用的方法是 : 采用网格布局,初始化的时候,将图片写入到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();
}
}


写到这里的时候,我没有思路的地方是: 空白的地方我用什么表示?比如我点击了一个网格,我就要判断它的周围是否是空白,如果是,那么我就跟空白对换,如果最终的把图片的顺序移到了最初我存在集合中顺序那么我就赢了,但是我的集合怎么实现移动?怎么实现集合中元素的交换?想了很久卡住了!

我是新手,各位大神只要稍微指点我一下就可以了!


...全文
139 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sca4441479 2014-07-28
  • 打赏
  • 举报
回复
引用 1 楼 sca4441479 的回复:
list.add(index,object),用这个方法实现点击图片与空白图片的交换,不过点击图片的时候要判断上下左右有没有空白图片,没有的话点击没反应。交换过后可能要刷新一下界面显示
add前先把点击图片与空白图片remove掉
sca4441479 2014-07-28
  • 打赏
  • 举报
回复
list.add(index,object),用这个方法实现点击图片与空白图片的交换,不过点击图片的时候要判断上下左右有没有空白图片,没有的话点击没反应。交换过后可能要刷新一下界面显示

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧