TBlock.cpp
上传用户:snevogroup
上传日期:2008-06-06
资源大小:432k
文件大小:2k
源码类别:

Symbian

开发平台:

C/C++

  1. #include <e32math.h>
  2. #include "TBlock.h"
  3. const TUint16 bl_types[4][BLOCKNUM]=
  4. //  #       ##      ###     ##     ####     ###      ###     ##     ##      ##      ###       #     # #     ##       # #
  5. //  #           #      #      ##       ##     ##       #      ##      # #       ##    # #
  6. { {0x0400, 0x0600, 0x0700, 0x0620, 0x4444, 0x0e20, 0x0740, 0x06c0, 0x0c60, 0x6600, 0xe400, 0x02c0, 0x0550, 0x0c30, 0x05a0},
  7.   {0x0400, 0x0440, 0x2220, 0x0260, 0x0f00, 0x0644, 0x4460, 0x08c4, 0x04c8, 0x6600, 0x8c80, 0x0422, 0x0606, 0x2244, 0x4242},
  8.   {0x0400, 0x0c00, 0x0700, 0x0460, 0x4444, 0x0470, 0x02e0, 0x06c0, 0x0c60, 0x6600, 0x04e0, 0x0340, 0x0550, 0x0c30, 0x05a0},
  9.   {0x0400, 0x4400, 0x2220, 0x0640, 0x0f00, 0x2260, 0x0622, 0x08c4, 0x04c8, 0x6600, 0x2620, 0x4420, 0x0606, 0x2244, 0x4242},
  10. };
  11. TBlock TBlock::Block(TUint8 aType)
  12. {
  13. return TBlock(aType, 0);
  14. }
  15. TBlock TBlock::RandomBlock(TInt64 &seed, const TUint8 aClassify)
  16. {
  17. TUint8 type;
  18. if(aClassify == 0)
  19. // forward 11
  20. type = static_cast<TUint8> (Math::Rand(seed) % (BLOCKNUM-4));
  21. else if(aClassify == 1)
  22. // all type
  23. type = static_cast<TUint8> (Math::Rand(seed) % BLOCKNUM);
  24. else
  25. // last 11
  26. type = static_cast<TUint8> ((Math::Rand(seed) % (BLOCKNUM-4)) + 4);
  27. return Block(type);
  28. }
  29. void TBlock::Rotate(TInt8 aDir)
  30. {
  31. if (aDir > 0) // deasil
  32. iRot++;
  33. if (aDir < 0) // anticlockwise
  34. iRot += 3;
  35. iRot %= 4;
  36. }
  37. // get a row of the block
  38. TUint16 TBlock::RowMask(TInt nr) const
  39. {
  40. return static_cast<TUint16> ((bl_types[iRot][iType] >> (4*nr)) & 0xf);
  41. }
  42. // Type()   return the block's type
  43. TUint8 TBlock::Type() const
  44. {
  45. return static_cast<TUint8> (iType + 1);
  46. }