在上一篇文章中讲述了如何添加图片,本文将实现将十六个格子中的小图片打乱的效果,并且会提到有关于二维数组的知识点
在上文就提到了,这个看起来完整的大图片,实际上是十六张小图片按照一定顺序放在4×4的格子当中的,那么我们不妨 用一个二维数组来表示每一个格子,每个格子内再放入不同的图片;由于要求打乱图片,所以二维数组内的图片序号随机,具体的思路如下
tempArr,存放0-15(图片编号)int[] tempArr = {0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
//随机生成索引值
int index = r.nextInt(tempArr.length);
//交换
int temp = tempArr[i];
tempArr[i] = tempArr[index];
tempArr[index] = temp;
}
data[i][j]来表示4×4的方格int[][] data = new int[4][4];
int tempIndex = 0;
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
System.out.print(data[i][j] + " ");
}
//每行输出后要换行
System.out.println();
}
测试一下代码




private void initdata() {
//初始化一维数组
int[] tempArr = {0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
//定义一个随机变量(索引)
Random r = new Random();
//遍历数组,将每个数与随机索引对应数值交换
for (int i = 0; i < tempArr.length; i++) {
int index = r.nextInt(tempArr.length);
int temp = tempArr[i];
tempArr[i] = tempArr[index];
tempArr[index] = temp;
}
//定义索引,用来提取一维数组中的数
int tempIndex = 0;
//遍历二维数组,填入数值
for (int i = 0; i < data.length; i++) {
//将每一行看作是一个一维数组,遍历一次
for (int j = 0; j < data[i].length; j++) {
data[i][j] = tempArr[tempIndex];
//遍历完成后提取一维数组中下一个值
tempIndex++;
}
}
}
private void initImage() {
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
int number = data[i][j];
JLabel jLabel = new JLabel(new ImageIcon("F:\\IDEA\\PuzzleGame\\image\\image\\animal\\animal3\\"+ number +".jpg"));
jLabel.setBounds(105 * j, 105 * i,105,105);
this.getContentPane().add(jLabel);
}
}
}



本文中的二维数组实现方法还有另外一种,感兴趣的读者可以自己思考一下,具体的方法会在下一篇文章的文末写出来以供参考