cocos2d-x 学习——我的2048
来源:互联网 发布:万国数据成都数据中心 编辑:程序博客网 时间:2024/06/04 00:49
上周在一个游戏群看到大家在讨论 2048 这个游戏,貌似很火的样子。下下来玩了一把,觉得有点意思。正好在学cocos2d-x ,因此决定自己动手写一个来玩玩。顺便记下开发过程。通常我解决问题的方式是这样的,先把能考虑到的有难点的细节想清楚如何实现,有了几分把握再开始,期间再碰到难点在想办法解决。
- 问题:
1、以怎样的数据结构保存数字并展现;
2、带数字显示的,同时根据数字大小调整颜色的色块如何展现,原谅我是cocos2d-x 初学;
3、怎么判断滑动的方向;
4、怎么处理每次滑动数字相加与否以及移动。
- 解决思路:
1、数据结构:很简单的 4*4 二维数组,每次滑动更新数组,根据该数组显示色块。这样做有其灵活性
2、带数字的色块:新建一个Block类来表示带数字显示的色块。该类继承自 cocos2d::CCNode,并重写draw(),同时以cocos2d::CCLabelTTF作为成员变量来展现数字。并且加入 背景色(色块的颜色)、前景色(数字颜色)成员变量,通过他们来动态改变颜色值。
3、滑动方向判断:对于滑动方向的判断,我采用 斜率+x/y坐标 来处理,根据直线的数学知识,在直线与x轴夹角为45度时,斜率为 1, 135度时为-1,因此如果0 <= |k| <= 1 (k为两点计算出的斜率绝对值)时,为左-->右或右-->左方向滑动,再加上两点的x值判断即可判断出具体方向。同理如果 |k| > 1 则为上-->下/下-->上,加上两点的y值判断则可判断出具体方向。
4、检测合并以及移动:每次滑动我采用最笨的方法,比如滑动方向从左-->右,则扫描每行,对每一行从右至左做列扫描,首先判断当前数字是否为0,不为0则为空闲可填充位置保存下标列的值,为0则循环往前找不为0的数字,如果找到则判断是否跟当前值相同,相同则加入当前值,退出当前循环,如果空闲可填充位置有值,则填充到该位置。直到每一行都扫表完成。算法很笨,时间复杂度为(n^3),虽然这里只有4*4的数据,还是 求高手解救。
- 补充:这里有四个方向上的滑动,如果对每个方向滑动单独使用第四步方式解决,那么要实现四个版本的函数。于是考虑其它三个(右-->左、上-->下、下-->上)方向都统一使用左-->右的处理,这样一来,每次滑动都将数据转到 左--> 右的方向,再处理,然后转回来。具体看下面:
- 左-->右:直接处理
- 右-->左:数组按列对换-->处理(左-->右)-->数据按列兑换回来
- 上-->下:数组顺时针旋转90度(先对角线兑换,再按列对换)-->处理(左-->右)-->结果数据数组逆时针旋转90度
- 下-->上:数组逆时针旋转90度(先对角线兑换,再按行对换)-->处理(左-->右)-->结果数据数组顺时针旋转90度
- 待提升:
第四步算法效率待提高
未加入效果(cocos2d-x初学者)适应分辨率处理简单,有拉伸不好看(cocos2d-x初学者)
附图一张:
- cocos2d-x 学习——我的2048
- 我的cocos2d-x学习之路
- Cocos2d-x内存管理——读我所理解的cocos2d-x整理
- 我的cocos2d-x游戏入门——MoonWarriors
- 我的Cocos2d-x学习笔记(十二)内存管理
- 我的Cocos2d-x学习笔记(十六)动作
- 我的Cocos2d-x学习笔记(十七)CCProgressTo
- 我的Cocos2d-x学习笔记(十八)CCGridAction
- 我的Cocos2d-x学习笔记(十九)CCString、CCArray
- 我的Cocos2d-x学习笔记(二十四)CCScrollView
- cocos2d-x我的笔记
- 《cocos2d-x游戏开发之旅》——我的第一本cocos2d教科书
- cocos2d-x学习笔记—几个重要的概念
- cocos2d-x学习笔记—屏幕的滚动
- cocos2d-x学习笔记—封装可拖动的精灵
- 我所理解的Cocos2d-x Cocos2d-x 内存管理机制
- cocos2d-x 学习——环境搭建
- cocos2d-x学习笔记—图片按钮
- Android 面试有感
- UITableView优化
- Android百度地图开发 错误调试之BMapManager.init
- lzma
- 青蛙跳台阶问题
- cocos2d-x 学习——我的2048
- 一位ACMer的心得
- 理解几个网络硬件(调制解调器、路由器、交换机)的基本作用
- 会不会成为我的女神呢
- EXCEL排序(简单排序题)
- PostgreSQL 免安装版win7下使用
- 事件驱动
- activity弹出式窗口的实现
- 这么说话