100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android华容道之一步一步实现-5-图像块移动算法实现

Android华容道之一步一步实现-5-图像块移动算法实现

时间:2021-09-26 19:15:47

相关推荐

Android华容道之一步一步实现-5-图像块移动算法实现

首先祝贺一下,完成这一步,0.1版的图像华容道就实现了,就是能够自己可以自由玩耍了。

不要着急一次成型,要使用Agile的思想,每天一次更新,但是每天都是可用的,一个可用的软件比别的都重要。

优化啊,界面啊,性能啊,重构啊,别急,慢慢来。

在上一篇文章中提到了具体的算法思想,这次就是具体的实现,主要就这个一个函数,根据手指触摸的位置来对所有的图像块进行重新排序,但是实际上每次最多三块图像的位置发生变化,其他的图像块的位置都不会发生变化。

protected void switch_pos(int xpos,int ypos) {

if(!is_in_puzzles(xpos,ypos))

return;

row = (ypos - offset_y )/ bitmap_height;

col =(xpos- offset_x)/ bitmap_width;

int pos = row * 4 + col;

if(puzzles[pos].is_blank)

return;

//blank in row

int blank_col = -1;

for(int i=0;i<4;i++){

pos = row * 4 + i;

if(puzzles[pos].is_blank){

blank_col = i;

break;

}

}

if(blank_col != -1){

pos = row * 4 + blank_col;

img_puzzle blank_puzzle = puzzles[pos];

if(blank_col < col){

for(int j=blank_col;j <col;j++){

pos = row * 4 +j;

puzzles[pos] = puzzles[pos+1];

}

}

else{

for(int j=blank_col ;j >col;j--){

pos = row * 4 + j;

puzzles[pos]=puzzles[pos - 1];

}

}

puzzles[row * 4 + col] = blank_puzzle;

return;

}

//blank in col

int blank_row = -1;

for (int i = 0; i < 4; i++) {

pos = i * 4 + col;

if (puzzles[pos].is_blank) {

blank_row = i;

break;

}

}

if (blank_row != -1) {

pos = blank_row * 4 + col;

img_puzzle blank_puzzle = puzzles[pos];

if (blank_row < row) {

for (int i = blank_row; i < row; i++) {

int pos1 = i * 4 + col;

int pos2 = (i+1)*4 + col;

puzzles[pos1]=puzzles[pos2];

}

}

else{

for(int i=blank_row;i>row;i--){

int pos1 = i*4+col;

int pos2 = (i-1)*4 + col;

puzzles[pos1]=puzzles[pos2];

}

}

puzzles[row * 4 + col]=blank_puzzle;

return;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。