该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package com.dyan.view;
public class JigsawSuanFa {
// 游戏算法类,用来初始化游戏的状态,判断游戏是否胜利
int[][] n = new int[3][3];// 存储数字的数组
int[] num = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };// 生成随机数字的源数组,随机数字从该数组中产生
public JigsawSuanFa() {
// TODO Auto-generated constructor stub
}
public int[][] generateMap() {
int i = 0, j = 0;
int k = 0;
// 打乱顺序的方向;0--向上移动
// 1--向右移动;2--向下移动;3--向左移动
int direction = 0;
int count = 100;
// 初始化数组为正确的顺序
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
n[i][j] = num[k++];
}
}
// 空白格初始的位置
i = 2;
j = 2;
// 打乱顺序,注意数组是否越界
while (count-- > 0) {
int tmp;
int x = i, y = j;// x和y保存的是空白格的位置坐标
int oldX = x;
int oldY = y;
boolean flag = true;
// 对下标进行越界判断
while (flag) {
direction = randomDirection();
switch (direction) {
case 0:
oldY = y;
y--;
break;
case 1:
oldX = x;
x++;
break;
case 2:
oldY = y;
y++;
break;
case 3:
oldX = x;
x--;
break;
}
if ((y >= 0 && y < 3) && (x >= 0 && x < 3)) {
flag = false;
} else {
x = oldX;
y = oldY;
}
}
switch (direction) {
case 0:
tmp = n[i][j];
n[i][j] = n[i][j - 1];
n[i][j - 1] = tmp;
j--;
break;
case 1:
tmp = n[i][j];
n[i][j] = n[i + 1][j];
n[i + 1][j] = tmp;
i++;
break;
case 2:
tmp = n[i][j];
n[i][j] = n[i][j + 1];
n[i][j + 1] = tmp;
j++;
break;
case 3:
tmp = n[i][j];
n[i][j] = n[i - 1][j];
n[i - 1][j] = tmp;
i--;
break;
}
}
return n;
}
public int randomDirection() {
return (int) (Math.random() * 4);
}
public boolean checkWin(int[][] number) {
Boolean isWin=true;
int k=0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if(number[i][j]!=num[k++]){
isWin = false;
}
}
}
return isWin;
}
}