網(wǎng)上關(guān)于 俄羅斯方塊的算法很所,但是我覺得,他們的算法不容易理解,但是我的算法,比較簡單,容易理解,就是計算量大點,但是今天的計算機硬件高速發(fā)展,這都已經(jīng)不是關(guān)鍵問題了??!
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}
}
};
這是俄羅斯方塊的關(guān)鍵矩陣。
其中,第一維的18,前 16 個整數(shù)表示 4*4 的方塊的形狀,后兩個變量,表示該形狀所占的寬度和高度,以免方塊出界了。
第二維中的 4 表示方塊的 4 個方向的旋轉(zhuǎn)。
第三維中的 7 表示方塊的 7 中基本形狀。
所有情況的方塊寫到一數(shù)組里,作為一常量,以備調(diào)用。
例如:
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 形狀的方塊。
方塊的變形就是改變第一維的值了,方塊的旋轉(zhuǎn)就是改變第而維的值了。
至于其他的,什么消去 ,隨機產(chǎn)生方塊啊,之類的問題,讀者自己琢磨吧!!
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}
}
};
這是俄羅斯方塊的關(guān)鍵矩陣。
其中,第一維的18,前 16 個整數(shù)表示 4*4 的方塊的形狀,后兩個變量,表示該形狀所占的寬度和高度,以免方塊出界了。
第二維中的 4 表示方塊的 4 個方向的旋轉(zhuǎn)。
第三維中的 7 表示方塊的 7 中基本形狀。
所有情況的方塊寫到一數(shù)組里,作為一常量,以備調(diào)用。
例如:
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 形狀的方塊。
方塊的變形就是改變第一維的值了,方塊的旋轉(zhuǎn)就是改變第而維的值了。
至于其他的,什么消去 ,隨機產(chǎn)生方塊啊,之類的問題,讀者自己琢磨吧!!