原理部分:
旋转方法是根据方块的数据结构来确定的。一个俄罗斯方块是由四个小方块在平面上组合得到的。
法一:一维数组旋转(本人使用方法)
使用长度为16或长度为9的一维数组来表示。由于长度固定,可以提前预设旋转目标位置。
var a = [0,1,2,
3,4,5,
6,7,8];
//顺时针旋转,将a每个index旋转后对应内容的原始index存储为b
var b = [6,3,0,
7,4,1,
8,5,2];
var new_a = new Array(9);
for(var i = 0; i < new_a.length; i++) {
new_a[i] = a[b[i]];
}
----------
输出:new_a = [6,3,0,
7,4,1,
8,5,2];
法二:一维坐标对象数组旋转
另一种数据结构是一个长度为4的一维数组。数组内容为小方块的坐标对象。这种数据结构的旋转是使用了向量旋转的算法。
参考:http://blog.csdn.net/sunxing007/article/details/3331396
https://www.lyblog.net/detail/172.html
法三:二维矩阵旋转
很容易想到使用宽高均为4的二维数组来表示。1表示该小方块填充颜色,0表示不填充。这种数据结构的旋转,其实就是矩阵的旋转。使用矩阵的旋转算法即可。
代码部分
法一代码(本人使用的方法):
function generateBlock(){
var block = new Array();
var num = Math.floor(Math.random()*7);
switch(num) {
case 0:
block = [1,1,1,1,
0,0,0,0,
0,0,0,0,
0,0,0,0];
break;
case 1:
block = [1,0,0,
1,0,0,
1,1,0];
break;