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

java 记忆拼图
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- iteye_14679 2011-05-11 15:28关注
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]本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报