我會用字摸點陣的方法保存每個方塊的形狀,並且能用掩碼的方式畫出來,但很
難判斷能否下落。
我判斷能否左右移動的算法是:用掩碼分別計算每一行最左或最右的方塊位置,然後在最左邊那則不能移動塊旁邊的中點取顏色,如果不是黑色則不能移動。
// 檢查左邊界
int Left(int x, int y, unsigned int binary_code)
{
int i;
int leftmost = 0; // 最左端與x的的距離
int pix_in_line = 0; // 標志一行是否有方塊
int mask = 1; // 設置掩碼
for(i = 1; i<=16; i++, binary_code >>= 1)
{
if((mask & binary_code) == 1)
{
if(i%4 > leftmost)
leftmost = i%4;
if(i == 4)
leftmost = 4;
pix_in_line = 1;
}
x -= LEN;
if(i%4 == 0)
{
x += 4*LEN;
if(pix_in_line == 1)
{
if(getpixel(x - leftmost*LEN - LEN/2, y + LEN/2) != BLACK)
return 1;
else if(x - leftmost*LEN == 0)
return 1;
}
y += LEN;
leftmost = 0;
pix_in_line = 0;
}
}
return 0;
}
按這種方法判斷下邊界的要用兩個for循環,很麻煩。網上的代碼看上去沒這麼麻煩,但我看不懂,有哪位大神能提供下思路嗎?謝謝!
為什麼不用a[m][n]數組表示位置(i,j)是否有方塊 判斷能否下落就是判斷下落的方塊(a[i1][j1], a[i2][j2], a[i3][j4],...)最下面的一個(j最大)的下面(j+1)是否有方塊即可