首先祝贺一下,完成这一步,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;
        }

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

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

    下一个关键点就是图像块的移动,以如图为例. 假设空格处于第二行第三格,那么此时只有触摸第二行以及第三列的图像块的时候才需要移动图像块,因为别的图像块不能移动. 当触摸发生在合法的图像块的时候,即上面图 ...

  2. Android华容道之一步一步实现-3 -手指触摸处理

    华容道关键点之一出现了,就是处理触摸,包括手指按下,抬起,移动等. 自己实现一个处理触摸的类,然后处理 onTouchEvent(MotionEvent event) 事件,在这里处理手指按下,抬起, ...

  3. Android华容道之一步一步实现-2-图片分割

    因为华容道是16个格子,所以要把一张大一点的图片分割成16个相等的小图片. 可以使用Bitmap.createBitmap方法来进行. 直接上代码 ori_bitmap = BitmapFactory ...

  4. Android华容道之一步一步实现-序言

    女儿看了最强大脑的数字华容道节目之后,就缠着要玩数字华容道,买了实物版,玩了几天,感觉好像还没有过瘾,就让我做个手机版的数字华容道游戏. 说明一下,最终要实现的版本并不是最强大脑那种数字版的华容道,而 ...

  5. Android华容道之一步一步实现-6-还原状态检测

    再次说明一下,我们的华容道的最终版本是图像华容道,不是纯数字的华容道,难度当然要比纯数字版的华容道大多了,因为在玩的时候要记住整福图像以及被切分后,每一张小图片应该在什么位置,如果是一幅您不熟悉的图片 ...

  6. 一步一步教你在 Android 里创建自己的账号系统(一)

    大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 大家在 ...

  7. 一步一步学ROP之Android ARM 32位篇

    蒸米 · 2015/12/17 9:41 0x00 序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术,可以用来绕过现代操作系统的各种 ...

  8. Android一步一步实现一款实用的Android广告栏

    源码:BannerLayoutDemo 有图有真相: bannerLayoutDemo 开源界有一句很有名的话叫"不要重复发明轮子",当然,我今天的观点不是要反驳这句话,轮子理论给 ...

  9. 一步一步教你如何在AndroidStudio查看Android源码(AOSP源码)

    一步一步教你如何在AndroidStudio查看Android源码(AOSP源码) idegen工具 要将Android系统源代码工程导入到Eclipse或者IntelliJ IDEA,关键是要有相应 ...

最新文章

  1. python方向-目前最全的Python的就业方向
  2. 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )
  3. inputstream重新赋值之前需要close吗_变量提升真的搞懂了吗?打脸的一道题
  4. 牛!这个省明确:科研人员平均薪酬水平 要高于企业管理人员!
  5. 猫眼java开发暑期实习_校招|猫眼 Android日常实习一面面经
  6. iphonex如何关机_iPhoneX怎么关机 iPhoneX如何强制重启【详细步骤】
  7. 队列的JS实现及广度优先搜索(BFS)的实现
  8. 2021.01.04 第 1 个工作日反思
  9. php生成html文件方法总结
  10. AI算法工程师 | 01人工智能基础-快速入门
  11. 涉密计算机设备保密管理系统,保密室设备——涉密计算机及移动存储介质保密管理系统(三合一)...
  12. python3爬虫实战-requests+beautifulsoup-爬取下载顶点网站的小说
  13. Python格式化字符串f-string概览
  14. 如何快速将MKV格式转换成MP4高清电影格式?
  15. installing selected parcels阶段卡在activating状态
  16. sun os查看oracle,solaris 系统信息查看
  17. 谷歌将投资10亿美元在旧金山湾区新建约2万套住房
  18. 7-DoG(差分高斯,Difference of Gaussina)
  19. 谷歌浏览器如何设置搜索结果的语言
  20. 读《九败一胜—美团创始人王兴创业十年》有感

热门文章

  1. figma导出android切图,谁再说Figma没办法导出标注和切图,你把这个插件转发给他...
  2. Kotlin中的接口回调
  3. html 调用main方法,ipcmain和ipcrenderer从index.html调用main.js函数
  4. java 闹钟代码_JAVA可视化闹钟源码
  5. tensordot 的源码解读
  6. elasticsearch最大节点数_Elasticsearch选举原理之Bully算法
  7. Leetcode 213. 打家劫舍 II (每日一题 20211009)
  8. 点云网络的论文理解(六)-Frustum PointNets 总体概括
  9. 推荐系统笔记:基于模型的协同过滤
  10. 机器学习笔记:CNN卷积神经网络