java 记忆拼图

怎么讲选取的图片分割n^2块,然后随机分布在n^2格子里,同时点两块就交换位置,直到把原图拼起来。(就是记忆拼图)
最好有源码加解释,没有的话讲下思路也行

1 首先用个数组保存位置
[code="java"]
Point[][] loc = new Point[N][N];
class Point{
int x;
int y;
}
[/code]

2 写个方法打乱loc的位置
可参照洗牌算法

3 根据loc数组来绘出
[code="java"]
int W=img.getWidth()/N
int H=img.getHeight()/N
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
drawImage(img, loc[i][j].x*W,loc[i][j].y*H,j*W,i*H,W,H);
}
}
[/code]
img为选择的图片
即把图片的loc[i][j]块的内容绘制到{i,j}块

4 用户点击两块后,改变数组loc的内容,并重新绘制那两块内容即可
[code="java"]
public void switchPix(Point a, Point b){
Point temp = loc[a.x][a.y];
loc[a.x][a.y] = loc[b.x][b.y];
loc[b.x][b.y] = tem;

drawImage(img, loc[a.x][a.y].x*W,loc[a.x][a.y].y*H,a.x*W,a.y*H,W,H);
drawImage(img, loc[b.x][b.y].x*W,loc[b.x][b.y].y*H,b.x*W,b.y*H,W,H);

// step 5
}
[/code]

5 比较是否还原
[code="java"]
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(loc[i][j].x==j&&loc[i][j].y==i)continue;
return false;
}
}
return true;
[/code]