俄罗斯方块程序的另类算法
2007-06-09 13:33
211 查看
网上关于 俄罗斯方块的算法很所,但是我觉得,他们的算法不容易理解,但是我的算法,比较简单,容易理解,就是计算量大点,但是今天的计算机硬件高速发展,这都已经不是关键问题了!!
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 形状的方块。
方块的变形就是改变第一维的值了,方块的旋转就是改变第而维的值了。
至于其他的,什么消去 ,随机产生方块啊,之类的问题,读者自己琢磨吧!!
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 形状的方块。
方块的变形就是改变第一维的值了,方块的旋转就是改变第而维的值了。
至于其他的,什么消去 ,随机产生方块啊,之类的问题,读者自己琢磨吧!!
相关文章推荐
- 俄罗斯方块程序的另类算法
- 俺用c语言写的一个天下算法最烂的俄罗斯方块程序
- 多目标遗传算法和有限元相结合程序的计算步骤(伪代码)
- 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
- 算法与程序的关系
- PHP中奖概率的抽奖算法程序代码
- 该深度优先搜索算法查找钥匙的程序之问题~~
- 俄罗斯方块程序
- 十大滤波算法程序大全
- matlab练习程序(白平衡<灰度世界算法>)
- Delphi + delphiX( DirectX Delphi控件 ) 实现水纹效果。··大概翻译了下里面的算法···重新用程序里表现了下
- 2048-AI程序算法分析
- 给数据结构初学者:跨过算法和程序之间的鸿沟
- 身份证校验算法与ASP程序
- Java经典算法四十例编程详解+程序实例
- 实现算法2.11、2.12的程序
- 在不知道算法原理的情况下,如何阅读理解算法的matlab程序
- 保护PC程序的高速软件加密锁及其自定义算法的实现
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
- 算法与程序的区别