首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Symbian >

请问一个俄罗斯方块的例题

2012-12-25 
请教一个俄罗斯方块的例题。 我在CSDN上下的一个例子,地址是:http://download.csdn.net/source/1473831可是

请教一个俄罗斯方块的例题。
 我在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;
}


等等~~
此类问题很多。 求帮忙。
[最优解释]
其实是把地图压缩存储了,你用最简单的方法,不压缩就行了。展开后你就看懂了。

热点排行