CBricks.cpp
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:10k
源码类别:

游戏

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// File:    CBricks.cpp
  3. /// Purpose: Definition of CBricks Class Members
  4. ///////////////////////////////////////////////////////////////////////////////
  5. /// Configuation Management
  6. /// 
  7. /// Who         When          Description
  8. /// ===========================================================================
  9. /// R. Walter   28-Dec-2003   Initial Version/Release
  10. ///
  11. ///////////////////////////////////////////////////////////////////////////////
  12. /// Copyright 2003: Robert Walter   All rights reserved
  13. ///////////////////////////////////////////////////////////////////////////////
  14. /// APPLICATION DEFINES ///////////////////////////////////////////////////////
  15. #define WIN32_LEAN_AND_MEAN /** no MFC **/
  16. /// HEADER FILE INCLUDES //////////////////////////////////////////////////////
  17. #include "CBricks.h"
  18. ///////////////////////////////////////////////////////////////////////////////
  19. /// Method:  CBricks --> default constructor
  20. /// Purpose: Initialize member variables
  21. ///////////////////////////////////////////////////////////////////////////////
  22. /// Receives: nothing
  23. /// Returns:  nothing
  24. ///////////////////////////////////////////////////////////////////////////////
  25. CBricks::CBricks()
  26. {
  27. m_start_x = 0;
  28. m_start_y = 0;
  29. m_brick_width = 0;
  30. m_brick_height = 0;
  31. m_brick_hor_space = 0;
  32. m_brick_ver_space = 0;
  33. m_num_rows = 0;
  34. m_num_cols = 0;
  35. m_bricks_remaining = 0;
  36. m_row_colors = NULL;
  37. m_row_points = NULL;
  38. m_row_vel = NULL;
  39. m_bricks = NULL;
  40. return;
  41. }
  42. ///////////////////////////////////////////////////////////////////////////////
  43. /// Method:  ~CBricks --> default destructor
  44. /// Purpose: Deallocate member variables
  45. ///////////////////////////////////////////////////////////////////////////////
  46. /// Receives: nothing
  47. /// Returns:  nothing
  48. ///////////////////////////////////////////////////////////////////////////////
  49. CBricks::~CBricks()
  50. {
  51. delete[] m_row_colors;
  52. delete[] m_row_points;
  53. delete[] m_row_vel;
  54. delete[] m_bricks;
  55. return;
  56. }
  57. ///////////////////////////////////////////////////////////////////////////////
  58. /// Method:  GetBrick
  59. /// Purpose: Retrieve the specified brick
  60. ///////////////////////////////////////////////////////////////////////////////
  61. /// Receives: Brick Number (row * col) + col
  62. /// Returns:  Brick struct
  63. ///////////////////////////////////////////////////////////////////////////////
  64. TBrick CBricks::GetBrick(const int p_brick_no)
  65. {
  66. return(m_bricks[p_brick_no]);
  67. }
  68. ///////////////////////////////////////////////////////////////////////////////
  69. /// Method:  GetBrickCount
  70. /// Purpose: Retrieve the total number of bricks in the array
  71. ///////////////////////////////////////////////////////////////////////////////
  72. /// Receives: nothing
  73. /// Returns:  count of bricks
  74. ///////////////////////////////////////////////////////////////////////////////
  75. int CBricks::GetBrickCount()
  76. {
  77. return(m_brick_cnt);
  78. }
  79. ///////////////////////////////////////////////////////////////////////////////
  80. /// Method:  GetBricksRemaining
  81. /// Purpose: Retrieve the count of bricks still in play (state == BS NORMAL)
  82. ///////////////////////////////////////////////////////////////////////////////
  83. /// Receives: nothing
  84. /// Returns:  count of brick remaining
  85. ///////////////////////////////////////////////////////////////////////////////
  86. int CBricks::GetBricksRemaining()
  87. {
  88. return(m_bricks_remaining);
  89. }
  90. ///////////////////////////////////////////////////////////////////////////////
  91. /// Method:  InitializeBricks
  92. /// Purpose: Based on the brick properties, intialize each structure in the
  93. ///          bricks array.
  94. ///////////////////////////////////////////////////////////////////////////////
  95. /// Receives: nothing
  96. /// Returns:  nothing
  97. ///////////////////////////////////////////////////////////////////////////////
  98. void CBricks::InitializeBricks()
  99. {
  100. m_brick_cnt = m_num_rows * m_num_cols;
  101. m_bricks_remaining = m_brick_cnt;
  102. m_brick_bottom = m_start_y + (m_num_rows * (m_brick_height + m_brick_ver_space));
  103. if (m_bricks)
  104. {
  105. delete[] m_bricks;
  106. }
  107. m_bricks = new TBrick[m_bricks_remaining];
  108. for (int r = 0; r < m_num_rows; r++)
  109. {
  110. for (int c = 0; c < m_num_cols; c++)
  111. {
  112. int l_brick = ((r * m_num_cols) + c);
  113. m_bricks[l_brick].color = m_row_colors[r];
  114. m_bricks[l_brick].point_value = m_row_points[r];
  115. m_bricks[l_brick].reflect_vel = m_row_vel[r];
  116. m_bricks[l_brick].rect.left = m_start_x + (c * (m_brick_width + m_brick_ver_space));
  117. m_bricks[l_brick].rect.top = m_start_y + (r * (m_brick_height + m_brick_ver_space));
  118. m_bricks[l_brick].rect.right = m_bricks[l_brick].rect.left + m_brick_width;
  119. m_bricks[l_brick].rect.bottom = m_bricks[l_brick].rect.top + m_brick_height; 
  120.             m_bricks[l_brick].row = r + 1;
  121. m_bricks[l_brick].col = c + 1;
  122. m_bricks[l_brick].state = BS_NORMAL;
  123. }
  124. }
  125. return;
  126. }
  127. ///////////////////////////////////////////////////////////////////////////////
  128. /// Method:  IsBrickAtPosition
  129. /// Purpose: Determine if a brick is at the specified X,Y position
  130. ///////////////////////////////////////////////////////////////////////////////
  131. /// Receives: X coordinate of search
  132. ///           Y coordinate of search
  133. ///           pointer to brick structure (to hold brick data if found at position)
  134. /// Returns:  true if brick exists at specified X,Y location, otherwise false
  135. ///////////////////////////////////////////////////////////////////////////////
  136. bool CBricks::IsBrickAtPosition(const int p_x, const int p_y, TBrick* p_brick)
  137. {
  138. ///////////////////////////////////////////////////////////////////////////
  139. /// immediately return false is y coordinate is above or below
  140. /// the entire set of bricks
  141. ///////////////////////////////////////////////////////////////////////////
  142. if ( (p_y < m_start_y) || (p_y > m_brick_bottom) )
  143. {
  144. return(false);
  145. }
  146. ///////////////////////////////////////////////////////////////////////////
  147. /// calculate the row and (including the vertical and horizontal
  148. /// space between the bricks) for the specified position
  149. ///////////////////////////////////////////////////////////////////////////
  150. int l_row = 0;
  151.     int l_col = 0;
  152. l_row = (p_y - m_start_y) / (m_brick_height + m_brick_ver_space);
  153. l_col = (p_x - m_start_x) / (m_brick_width + m_brick_hor_space);
  154. ///////////////////////////////////////////////////////////////////////////
  155. /// if the calculated column and row is valid (ie. it should exist) then
  156. /// set the brick byref return values
  157. ///////////////////////////////////////////////////////////////////////////
  158. if (( (l_row < m_num_rows) && (l_row >= 0) )
  159. &&  ( (l_col < m_num_cols) && (l_col >= 0) ))
  160. {
  161. int l_brick_num = ((l_row * m_num_cols) + l_col);
  162. *p_brick = m_bricks[l_brick_num];
  163. return(true);
  164. }
  165. return(false);
  166. }
  167. ///////////////////////////////////////////////////////////////////////////////
  168. /// Method:  SetTopLeftPosition
  169. /// Purpose: Initialize the starting point of the bricks in the 
  170. ///          playing area
  171. ///////////////////////////////////////////////////////////////////////////////
  172. /// Receives: - X coordinate (in pixels) of top left corner of starting brick
  173. ///           - Y coordinate (in pixels) of top left corner of starting brick
  174. /// Returns:  nothing
  175. ///////////////////////////////////////////////////////////////////////////////
  176. void CBricks::SetTopLeftPosition(const int p_x, const int p_y)
  177. {
  178. m_start_x = p_x;
  179. m_start_y = p_y;
  180. return;
  181. }
  182. ///////////////////////////////////////////////////////////////////////////////
  183. /// Method:  SetBrickProperties
  184. /// Purpose: Initialize the properties that describe the size of each brick
  185. ///////////////////////////////////////////////////////////////////////////////
  186. /// Receives: - width (in pixels) of each brick
  187. ///           - height (in pixels) of each brick
  188. ///           - horizontal space (in pixels) between each column of bricks
  189. ///           - vertical space (in pixels) between each row of bricks
  190. /// Returns:  nothing
  191. ///////////////////////////////////////////////////////////////////////////////
  192. void CBricks::SetBrickProperties(const int p_width, const int p_height, const int p_h_space, const int p_v_space)
  193. {
  194.     m_brick_width = p_width;
  195. m_brick_height = p_height;
  196. m_brick_hor_space = p_h_space;
  197. m_brick_ver_space = p_v_space;
  198. return;
  199. }
  200. ///////////////////////////////////////////////////////////////////////////////
  201. /// Method:  SetBrickState
  202. /// Purpose: Set the state of the passed brick
  203. ///////////////////////////////////////////////////////////////////////////////
  204. /// Receives: - ???
  205. /// Returns:  nothing
  206. ///////////////////////////////////////////////////////////////////////////////
  207. void CBricks::SetBrickState(const int p_row, const int p_col, const EBrickState p_state)
  208. {
  209. int l_brick = ((p_row - 1) * m_num_cols) + (p_col - 1);
  210. m_bricks[l_brick].state = p_state;
  211. if ((p_state == BS_HIT) || (p_state == BS_SKIP))
  212. {
  213. m_bricks_remaining--;
  214. }
  215.     return;
  216. }
  217. ///////////////////////////////////////////////////////////////////////////////
  218. /// Method:  SetRowColProperties
  219. /// Purpose: Initialize the number of rows and columns.  Also set the colors
  220. ///          for each row
  221. ///////////////////////////////////////////////////////////////////////////////
  222. /// Receives: - number of rows of bricks to create
  223. ///           - number of columns of bricks to create
  224. ///           - DWORD pointer containing the colors for each row of bricks
  225. /// Returns:  nothing
  226. ///////////////////////////////////////////////////////////////////////////////
  227. void CBricks::SetRowColProperties(const int p_rows, const int p_cols, DWORD* p_row_colors, int* p_row_points, int* p_row_vel)
  228. {
  229. m_num_rows = p_rows;
  230. m_num_cols = p_cols;
  231. if (m_row_colors)
  232. {
  233. delete[] m_row_colors;
  234. }
  235. if (m_row_points)
  236. {
  237. delete[] m_row_points;
  238. }
  239. if (m_row_vel)
  240. {
  241. delete[] m_row_vel;
  242. }
  243. m_row_colors = new DWORD[p_rows];
  244. m_row_points = new int[p_rows];
  245. m_row_vel    = new int[p_rows];
  246. for (int i = 0; i < p_rows; i++)
  247. {
  248. m_row_colors[i] = p_row_colors[i];
  249. m_row_points[i] = p_row_points[i];
  250. m_row_vel[i]    = p_row_vel[i];
  251. }
  252. return;
  253. }
  254. /// END OF FILE ///////////////////////////////////////////////////////////////