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

Symbian

开发平台:

C/C++

  1. #include "TGrid.h"
  2. // Construct
  3. TGrid::TGrid()
  4. {
  5. Clear();
  6. }
  7. TGrid TGrid::NewGrid()
  8. {
  9. return TGrid();
  10. }
  11. /////////////////////////////////////////////////////////////////////////////
  12. // Method
  13. // Clear()
  14. void TGrid::Clear()
  15. {
  16. for (int i = 0; i < KGridY; i++)
  17. {
  18. iMask[i] = 0x003f;
  19. for (int j=0; j<KGridX; j++)
  20. iContent[i][j] = 0;
  21. }
  22. }
  23. // DoesCollide()
  24. bool TGrid::DoesCollide(const TBlock& aBlock, const TPoint& aPoint) const
  25. {
  26. TInt i;
  27. for (i = aPoint.iY; i < aPoint.iY + 4; i++)
  28. {
  29. if (i < 0)
  30. {
  31. if ( ( static_cast<TUint32>(aBlock.RowMask(i - aPoint.iY)) << (12-aPoint.iX) ) & 0xf003f )
  32. return true;
  33. else if (i >= KGridY)
  34. {
  35. if (aBlock.RowMask(i-aPoint.iY)) 
  36. return true;
  37. else
  38. {
  39. if (iMask[i] & (aBlock.RowMask(i-aPoint.iY)<<(12-aPoint.iX))) 
  40. return true;
  41. if (aPoint.iX<0 && ((aBlock.RowMask(i-aPoint.iY)>>(4+aPoint.iX)))) 
  42. return true;
  43. }
  44. }
  45. return false;
  46. }
  47. // PutBlock()
  48. void TGrid::PutBlock(const TBlock& aBlock, const TPoint& aPoint)
  49. {
  50. TInt i, j;
  51. TUint8 BlockType = aBlock.Type();  // start from 1
  52. for (i = aPoint.iY; i < aPoint.iY+4; i++)
  53. {
  54. if (i<0) 
  55. continue;
  56. if (i>=KGridY)
  57. break;
  58. TUint16 mask=aBlock.RowMask(i - aPoint.iY);
  59. iMask[i] |= mask << (12 - aPoint.iX); // -3 ~ ..
  60. for (j = aPoint.iX; j < aPoint.iX+4; j++)
  61. if (mask & (1 << (3 - j + aPoint.iX)))
  62. iContent[i][j] = BlockType;
  63. }
  64. }