小游戏算法系列一之俄罗斯方块矩阵旋转的一种方法
来源:互联网 发布:空间数据质量国家标准 编辑:程序博客网 时间:2024/06/01 10:37
俄罗斯方块是一个非常经典的益智游戏,也是很多编程爱好者的入门练手之作。
在制作俄罗斯方块这个游戏的时候,不得不解决一个问题,就是形状的旋转。
通常,在制作的时候,我们会用数组来表示一种形状,如L形我们会用如下二维数组表示
[[1,0],
[1,0],
[1,1]]
这是其中一种表示方法。那么形状的旋转就转化为对数组(矩阵)的旋转了。
那么要怎么旋转呢,有很多种方法
1是实现把旋转后的数组作为变量保持下来,旋转的时候调用
2.是用数学矩阵旋转的方法
3.就是我现在说的方法
经过观测,其实只是把数组旋转90度
如图1显示的是初始数组,表示图形L。
步骤:
1.提取出初始数组的第0列数据(图2)
2.新建一个一位数组tempArr,把图2数据一次压入新数组。(图3)
3.把tempArr压入一个辅助栈
4.提取出初始数组的第1列数据(图4)
5.新建一个一位数组tempArr,把图4数据一次压入新数组。(图5)
6.把tempArr压入辅助栈
7.最终栈的数据即为转置后的数组。(图6)
在实际开发中,我们可以新建一个数组来充当辅助栈,但要注意此时提取初始数组列的顺序应该从后往前提,因为往数组压入数组的时候,后压入的数组会在下方。
在实际开发中,提取初始数组列数据的操作,压入tempArr的操作可以在for循环中遍历一同实现。
下面来看看具体代码:
var blokArr:Array = [[1,0],[1,0],[1,1]]; //逆时针旋转function blokTurnRight(blokArr:Array):Array{var rows = blokArr.length;var column = blokArr[0].length;var newBlokArr:Array = new Array();//辅助栈 //从后往前遍历列数据for(var i=column-1;i>=0;i--){var tempArr:Array = new Array();for(var j=0;j<rows;j++){tempArr.push(blokArr[j][i]);}newBlokArr.push(tempArr);//把tempArr数组压入辅助栈数组tempArr = null;}return newBlokArr;} //顺时针旋转,基本和上面一样function blokTurnLeft(blokArr:Array):Array{var rows = blokArr.length;var column = blokArr[0].length;var newBlokArr:Array = new Array();for(var i=0;i<column;i++){var tempArr:Array = new Array();for(var j=rows-1;j>=0;j--){tempArr.push(blokArr[j][i]);}newBlokArr.push(tempArr);tempArr = null;}return newBlokArr;}
- 小游戏算法系列一之俄罗斯方块矩阵旋转的一种方法
- 基于MFC的俄罗斯方块小游戏(一)
- JS写怀旧小游戏系列(一)俄罗斯方块
- 控制台小游戏之俄罗斯方块
- 矩阵旋转的算法
- 旋转矩阵的算法
- 俄罗斯方块小游戏的各类
- 俄罗斯方块旋转算法研究
- 一种解决一维数组旋转问题的方法
- 俄罗斯方块,我的java学习之路,小游戏
- 算法系列-----矩阵(一)-------------单位矩阵的生成
- java算法之简单的二维矩阵旋转Rotate Image
- 数据结构和算法学习系列之快速排序的Partition函数一种实现方法
- JTextArea编辑的俄罗斯方块小游戏
- 网页版的俄罗斯方块小游戏
- 【图像处理】一种求三维空间中两单位向量之间旋转矩阵的方法
- 旋转矩阵的表示方法
- 玩过,但你知道么?俄罗斯方块的旋转算法。。。
- 自动获取微博的授权code码
- 双向循环链表的实现
- OSGi环境调试心得
- 使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
- Flex在线拍照并上传(兼容multipart/form-data)
- 小游戏算法系列一之俄罗斯方块矩阵旋转的一种方法
- Oracle怎么修改列名
- FXLabel支持中文行距的简单修改
- TCP序列号和确认号详解--三次握手四次挥手
- C/C++ -- 编程中的内存屏障(Memory Barriers)
- 关于2010以上版本水晶报表的引用问题
- hive void类型
- hdu1978
- linux ubuntu12.04 解压中文zip文件,解压之后乱码