小游戏算法系列一之俄罗斯方块矩阵旋转的一种方法

俄罗斯方块是一个非常经典的益智游戏,也是很多编程爱好者的入门练手之作。
在制作俄罗斯方块这个游戏的时候,不得不解决一个问题,就是形状的旋转。

小游戏算法系列一之俄罗斯方块矩阵旋转的一种方法_第1张图片

通常,在制作的时候,我们会用数组来表示一种形状,如L形我们会用如下二维数组表示
[[1,0],
[1,0],
[1,1]]

这是其中一种表示方法。那么形状的旋转就转化为对数组(矩阵)的旋转了。
那么要怎么旋转呢,有很多种方法

1是实现把旋转后的数组作为变量保持下来,旋转的时候调用

2.是用数学矩阵旋转的方法

小游戏算法系列一之俄罗斯方块矩阵旋转的一种方法_第2张图片

3.就是我现在说的方法

经过观测,其实只是把数组旋转90度

小游戏算法系列一之俄罗斯方块矩阵旋转的一种方法_第3张图片

如图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=0;j--){
tempArr.push(blokArr[j][i]);

}
newBlokArr.push(tempArr);
tempArr = null;
}

return newBlokArr;
}


 

你可能感兴趣的:(AS3,游戏相关)