time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > C\C++\VC > C语言 > 俄罗斯方块程序的另类算法

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

时间:2009-09-20 23:31 点击:645次 字体:[ ]




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

 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 形状的方块。

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

    至于其他的,什么消去 ,随机产生方块啊,之类的问题,读者自己琢磨吧!



本文地址 : http://www.fengfly.com/plus/view-77314-1.html
标签: 实例编程
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:
本栏分类