第十三章目录
13.1 移动迷宫——拼图游戏
- 13.1.1 准备工作
- 13.1.2 初始界面
- 13.1.3 拼图界面
- 13.1.4 效果预览与功能进阶
13.2 魔幻矩阵——2048
- 13.2.1 2048概述
- 13.2.2 2048游戏分析
- 13.2.3 2048初始工作
- 13.2.4 小方块设计
- 13.2.5 全局设置
- 13.2.6 游戏面板设计
- 13.2.7 主程序设计
- 13.2.8 功能进阶
13.3 实战经验总结
第十三章读书笔记
本来这章不想写了,但是还是把主要内容概括一下吧,一共两个实例
13.1 移动迷宫——拼图游戏
13.1.1 准备工作
13.1.1.1 获取屏幕相关属性
- 创建了一个工具类,封装了获取屏幕宽高和屏幕density的静态方法
13.1.1.2 美化按钮
- 定义xml文件,shape和selector来对更改按钮外观和点击事件后的变化
13.1.2 初始界面
- 一些基本的布局,此书作者用得是GridView,选择难度用得是PopupWindow
13.1.2.1 点击事件
- 用到选择本地图库和相机拍照,然后在onActivityResult()方法中接受返回值并进行操作
13.1.3 拼图界面
- 布局就不说了
13.1.3.1 拼图算法
- 随机打乱图片后,有50%的几率将会是无解的,非常著名的算法——N Puzzle问题
13.1.3.2 图片Item实体类
- 用于放在GridView的适配器当中的,存放id和bitmmap信息
13.1.3.3 图片工具
- 涉及到2x2、3x3、4x4三种不同模式,封装两个方法:1、将bitmap分割,2、放大缩小到合适的位置
13.1.3.4 生成游戏
- 去生成乱序的图片,去根据上面提到的那个算法并判断是否有解
13.1.3.5 移动图片
- 点击事件:如果是空格图片周围的图片可以去点击
- 交换:交换后判断是否还原成功,当前id与初始状态下的id是否相同
- 成功:如果成功了,将最后一块图片补齐,提示成功
- 计时:通过Timer进行计时,一秒去刷新一下TextView
- 记步:在GridView的点击事件中记数
- 重置:这个调一下初始的生成图片的方法
- 返回:直接finish()
- 显示原图:先Gone掉,然后通过一个动画的形式显示出来
13.1.4 效果预览与功能进阶
- 还可以优化整个项目,添加新的内容,多人竞技,成绩记录等功能
- 另外,还可以开发一些新的拼图模式,创新玩法等
13.2 魔幻矩阵——2048
13.2.1 2048概述
- 这个游戏的开发者是2014年3月份一个20岁的男孩在一个周末完成的一款游戏,意外蹿红
- 具体玩法:上下左右滑动,所有数字都将会向滑动方向靠拢,遇到相同的数字就相加、合并,移动成功后会在空白区域随机出现一个数字,2或者4,直到数字合并到2048,则挑战成功
13.2.2 2048游戏分析
13.2.2.1 确定布局
- 面板:4x4的格子,作者使用的是GridLayout
- 小方块:将小方块抽象成一个对象,拥有数值,颜色等属性
13.2.2.2 确定算法
- 使用0来代表空格,如果某一行(列)为2204,先将224存入list中,然后2和2合并,为44,并将其作为该行(列)的返回值,从滑动的方向开始放置list中的数字
13.2.3 2048初始化工作
13.2.3.1 游戏主界面
- 布局没什么说的,button背景还是用shape自定义
13.2.3.2 配置界面
- 不光是4x4,也可选择5x5、6x6等类型,不光是2048,也可以是4096等等
13.2.4 小方块设计
- 小方块设计为继承自FrameLayout,并添加一个TextView,然后提供一个setNum方法,设置数值,并根据数值判断颜色
13.2.5 全局设置
- 创建一个Application类,在Mainifest文件中设置Application入口,在此类中完成对游戏的配置
13.2.6 游戏面板设计
13.2.6.1 初始化游戏矩阵
- 初始化的时候,移除之前游戏的所有布局,首先将所有小方块都设置为0
- 通过一个方法来添加随机数字2或者4
13.2.6.2 增加滑动事件
- 在onTouch()方法中捕获按下和松开的事件,通过坐标来判断向哪个方向去滑动
- 此书作者加了一个超级用户的权限,滑到一定的长度弹出对话框,想要什么数就是什么数
- 判断好具体的滑动方向后,就可以通过封装好的四个swipeXXX()方法来执行小方块的合并操作
- 合并的算法:对相同数字进行合并,加一个标志位,合并过一次就不再合并了
13.2.6.3 记录历史矩阵
- 通过记录矩阵实现撤销的功能
13.2.6.4 判断游戏结束
- 游戏成功意味着完成了2048,在每一次ACTION_UP操作都去调用一下判断的方法
- 游戏失败意味着不能再移动了,需要去判断每一个小方块的数值在其上下左右都没有相同的了
13.2.7 主程序设计
13.2.7.1 添加游戏面板和游戏信息
- 游戏记录,游戏分数什么的,比较简单吧
13.2.7.2 动画效果
- 本书是通过对小方块做了一个简单的Scale变换
13.2.8 功能进阶
- 换肤功能,多人一起玩的功能
13.3 实战经验总结
- 通过这两个实例,抛砖引玉,让读者能够找到解决问题的方法
- 在开发过程中,多总结、归纳所获得的学习经验
总结
这本书也就算看完了,起码笔记都过了一遍,但是仅看一次还不够,我还是认为无论什么书看第二遍、第三遍和看第一遍是完全不一样的,所以所以还是要多多回顾,才能学到更多的东西,有一句俗话说的好啊:“温故而知新”,学习的路程很漫长,坚持一定会有成果的,加油!