Discuz!NT
欢迎 游客 , 注册 | 登录 | 会员 | 界面 | 简洁版本 | 在线 | 帮助
商都网教育宝典宝库

发表新主题 回复该主题
本主题被查看865次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第   上一主题   下一主题
标题: 俄罗斯方块程序的另类算法
-[尕硴]
超级版主
UID: 71
来自:
精华: 130
积分: 14003
帖子: 12909
注册: 2007-10-22 17:59:00
状态: 离线
威望: 444.00
金钱: 3355.00 元
只看楼主 2007-11-16 09:27
俄罗斯方块程序的另类算法
网上关于 俄罗斯方块的算法很所,但是我觉得,他们的算法不容易理解,但是我的算法,比较简单,容易理解,就是计算量大点,但是今天的计算机硬件高速发展,这都已经不是关键问题了!! 

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 形状的方块。
方块的变形就是改变第一维的值了,方块的旋转就是改变第而维的值了。
至于其他的,什么消去 ,随机产生方块啊,之类的问题,读者自己琢磨吧!!
#1  
发表新主题 回复该主题
本主题被查看865次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第







现在的时间是 2008-10-16 07:49:13

版权所有 商都网教育宝典
         Powered by Discuz!NT 1.0.6666    Copyright © 2001-2008 Comsenz Inc.
Processed in 0.046 seconds