Android华容道之一步一步实现-5-图像块移动算法实现
首先祝賀一下,完成這一步,0.1版的圖像華容道就實(shí)現(xiàn)了,就是能夠自己可以自由玩耍了。
不要著急一次成型,要使用Agile的思想,每天一次更新,但是每天都是可用的,一個(gè)可用的軟件比別的都重要。
優(yōu)化啊,界面啊,性能啊,重構(gòu)啊,別急,慢慢來(lái)。
在上一篇文章中提到了具體的算法思想,這次就是具體的實(shí)現(xiàn),主要就這個(gè)一個(gè)函數(shù),根據(jù)手指觸摸的位置來(lái)對(duì)所有的圖像塊進(jìn)行重新排序,但是實(shí)際上每次最多三塊圖像的位置發(fā)生變化,其他的圖像塊的位置都不會(huì)發(fā)生變化。
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;
?? ??? ?}
總結(jié)
以上是生活随笔為你收集整理的Android华容道之一步一步实现-5-图像块移动算法实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android华容道之一步一步实现-4-
- 下一篇: Android华容道之一步一步实现-6-