请教一个俄罗斯方块的例题。
我在CSDN上下的一个例子,地址是:http://download.csdn.net/source/1473831
可是没有注释,看起来很吃力。很多地方不理解思路。越看越乱。网上找的相应文档太笼统了。帮不上什么忙。
请问有知道这个例子的朋友,能指点下。如果有详细的注释说明,也请告诉我下。
比如:
#ifndef BLOCK_H
#define BLOCK_H
#include <e32std.h>
class TBlock
{
public:
TBlock() :iType(0), iRot(0) {}
static int BlockCount();
static TBlock Block(int id);
static TBlock RandomBlock(TInt64 &seed);
void Rotate(int dir);
TInt8 RowMask(int nr) const;
TInt8 Color() const;
protected:
TBlock(int aType, int aRot) :iType(aType), iRot(aRot) { }
private:
TInt8 iType;
TInt8 iRot;
};
#endif
//////////////////////////////////////////
const int numBlocks=7;
const TUint16 bl_types[4][numBlocks]=
// #### ### ### ## ## ## ###
// # # ## ## ## #
{{0x4444, 0x0e20, 0x0740, 0x06c0, 0x0c60, 0x6600, 0xe400},
{0x0f00, 0x0644, 0x4460, 0x4620, 0x2640, 0x6600, 0x8c80},
{0x4444, 0x0470, 0x02e0, 0x06c0, 0x0c60, 0x6600, 0x04e0},
{0x0f00, 0x2260, 0x0622, 0x4620, 0x2640, 0x6600, 0x2620},
};
TInt8 TBlock::RowMask(int nr) const
{
return (bl_types[iRot][iType]>>(4*nr))&0xf;//<------------ 这是要做什么?
}
/////////////////////////////////////////////////////////////////////////////
bool TGrid::DoesCollide(const TBlock &b, const TPoint &p) const
{
int i;
for (i=p.iY; i<p.iY+4; i++)
{
if (i<0)
{
if ((static_cast<TUint32>(b.RowMask(i-p.iY))<<(12-p.iX))&0xf003f)//《------------------这里又是做什么,为什么这么做?
return true;
} else
if (i>=KGridY)
{
if (b.RowMask(i-p.iY)) return true;
} else
{
if (iMask[i]&(b.RowMask(i-p.iY)<<(12-p.iX))) return true;
if (p.iX<0 && ((b.RowMask(i-p.iY)>>(4+p.iX)))) return true;
}
}
return false;
}
等等~~
此类问题很多。 求帮忙。
[最优解释]
其实是把地图压缩存储了,你用最简单的方法,不压缩就行了。展开后你就看懂了。