您的位置:首页 > 其它

俄罗斯方块程序的另类算法

2010-06-10 18:49 225 查看
出处:
作者: 日期:2007年11月26日
15时07分

网上关于 俄罗斯方块的算法很所,但是我觉得,他们的算法不容易理解,但是我的算法,比较简单,容易理解,就是计算量大点,但是今天的计算机硬件高速发
展,这都已经不是关键问题了!!

int shape[7][4][18]={

{

{0,1,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0, 3,2},

{1,0,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0, 2,3},

{1,1,1,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 3,2},

{0,1,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0, 2,3}

},

{

{1,1,0,0, 0,1,0,0, 0,1,0,0, 0,0,0,0, 2,3},

{0,0,1,0, 1,1,1,0, 0,0,0,0, 0,0,0,0, 3,2},

{1,0,0,0, 1,0,0,0, 1,1,0,0, 0,0,0,0, 2,3},

{1,1,1,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, 3,2}

},

{

{1,1,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0, 2,3},

{1,1,1,0, 0,0,1,0, 0,0,0,0, 0,0,0,0, 3,2},

{0,1,0,0, 0,1,0,0, 1,1,0,0, 0,0,0,0, 2,3},

{1,0,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0, 3,2}

},

{

{1,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 2,2},

{1,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 2,2},

{1,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 2,2},

{1,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 2,2}

},

{

{1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 4,1},

{1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,4},

{1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 4,1},

{1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,4}

},

{

{1,0,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0, 2,3},

{0,1,1,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 3,2},

{1,0,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0, 2,3},

{0,1,1,0, 1,1,0,0, 0,0,0,0, 0,0,0,0, 3,2}

},

{

{0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0, 2,3},

{1,1,0,0, 0,1,1,0, 0,0,0,0, 0,0,0,0, 3,2},

{0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0, 2,3},

{1,1,0,0, 0,1,1,0, 0,0,0,0, 0,0,0,0, 3,2}

}

};

这是俄罗斯方块的关键矩阵。

其中,第一维的18,前 16 个整数表示 4*4 的方块的形状,后两
个变量,表示该形状所占的宽度和高度,以免方块出界了。

第二维中的 4 表示方块的 4 个方向的旋转。

第三维中的 7 表示方块
的 7 中基本形状。

所有情况的方块写到一数组里,作为一常量,以备调用。

例如:

for(i=0;i<4;i++)

grid[height][i+colum]+=shape[shp][loop][i];

for(i=4;i<8;i++)

grid[height+1][i+colum-4]+=shape[shp][loop][i];

for(i=8;i<12;i++)

grid[height+2][i+colum-8]+=shape[shp][loop][i];

for(i=12;i<16;i++)

grid[height+3][i+colum-12]+=shape[shp][loop][i];

其中,grid[][],
就是整个画面的情况,用 0 和 1 表示,1表示有格子,0表示没有格子,上述的程序段表示,在第 height 行 colum 列显
示 shape 形状的方块。

方块的变形就是改变第一维的值了,方块的旋转就是改变第而维的值了。

至于其他的,什么消去 ,随机产生
方块啊,之类的问题,读者自己琢磨吧!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: