学mfc有一段时间了,也该是动手的时候了,以前写过一个Snake游戏,
现在想写一个俄罗斯方块,但目前有些算法还是很难搞懂,研究了一下前辈们的代码,有些难看懂,其中如下的算法我认为最好,效率方面也较好,但是有点炫://存放颜色和变化的中间数据
//重新计算m_nData
int m_nData[3][3];
int nData[][4] = {
{ 0x038, 0x092, 0x038, 0x092 },
{ 0x093, 0x03c, 0x192, 0x078 },
{ 0x096, 0x138, 0x0d2, 0x039 },
{ 0x1b0, 0x1b0, 0x1b0, 0x1b0 },
{ 0x198, 0x05a, 0x198, 0x05a },
{ 0x0f0, 0x099, 0x0f0, 0x099 },
{ 0x03a, 0x0b2, 0x0b8, 0x09a }
};
int Data = nData[sv_shape][sv_id];
//取得形状数组
m_nData[0][0] = (Data&0x100)>>8;
m_nData[0][1] = (Data&0x80)>>7;
m_nData[0][2] = (Data&0x40)>>6;
m_nData[1][0] = (Data&0x20)>>5;
m_nData[1][1] = (Data&0x10)>>4;
m_nData[1][2] = (Data&0x8)>>3;
m_nData[2][0] = (Data&0x4)>>2;
m_nData[2][1] = (Data&0x2)>>1;
m_nData[2][2] = (Data&0x1)>>0;
请问哪位能详细解释一下两个数组的作用呢?
int m_nData[3][3];int nData[][4]
另外m_nData[][]分别与8、7、6、5..作移位运算的作用呢?

解决方案 »

  1.   

    nData 应该是各种方块的不同方向的形状。储存在数组里面,就不需要实时生成,效率高。
    我估计这位仁兄的俄罗斯方块里面一定没有棍子,因为他是用的3*3的数组
    比如方块,四个方向都是
    1 1 0
    1 1 0
    0 0 0
    铺平就是110110000,转成16进制就是0x1b01 1 0
    1 1 0
    0 0 01 1 0
    1 1 0
    0 0 01 1 0
    1 1 0
    0 0 0
    比如拐子
    1 1 1
    1 0 0 
    0 0 0
    111100000 0x1E01 0 0
    1 0 0
    1 1 0
    100100110 0x1260 0 0
    0 0 1
    1 1 1
    ...0 1 1
    0 0 1
    0 0 1
    ...
      

  2.   

    nData是个2维数组,储存了每个图形的四个方向。
    m_nData则是查表,把nData的每一个图形找出每一个对应方块是否有存在