![]() ![]() |
|
俄罗斯方块程序的另类算法 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 13:57:08 文章录入:杜斌 责任编辑:杜斌 | |
|
|
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 形状的方块。 方块的变形就是改变第一维的值了,方块的旋转就是改变第而维的值了。 至于其他的,什么消去 ,随机产生方块啊,之类的问题,读者自己琢磨吧!! |
|
![]() ![]() |