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

游戏

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// File:    CSuperBrickBreaker.h
  3. /// Purpose: Declaration of CSuperBrickBreaker Class
  4. ///          This class represents the main class of the application.  The
  5. ///          class is a direct descendent of CDirectDrawApp.
  6. ///////////////////////////////////////////////////////////////////////////////
  7. /// Configuation Management
  8. /// 
  9. /// Who         When          Description
  10. /// ===========================================================================
  11. /// R. Walter   28-Dec-2003   Initial Version/Release
  12. ///
  13. ///////////////////////////////////////////////////////////////////////////////
  14. /// Copyright 2003: Robert Walter   All rights reserved
  15. ///////////////////////////////////////////////////////////////////////////////
  16. #ifndef CSUPERBRICKBREAKER_H_
  17. #define CSUPERBRICKBREAKER_H_
  18. /// HEADER DEFINES ////////////////////////////////////////////////////////////
  19. #define WIN32_LEAN_AND_MEAN
  20. /// HEADER FILE INCLUDES //////////////////////////////////////////////////////
  21. #include <fstream>
  22. #include <iostream>
  23. #include <strstream>
  24. #include <cmath>
  25. #include "CDirectDrawGame.h"
  26. #include "CBall.h"
  27. #include "CBricks.h"
  28. #include "CPaddle.h"
  29. using std::ofstream;
  30. using std::ostrstream;
  31. using std::ends;
  32. using std::endl;
  33. /// TYPE / CLASS DECLARATIONS /////////////////////////////////////////////////
  34. /// declare ENUM used to define the current state of the game
  35. enum EGameState {GS_INITIALIZE, GS_MAINMENU, GS_STARTTURN, GS_GAMEPLAY, GS_GAMEPAUSED, GS_GAMEOVER};
  36. /// declare ENUM used to define which type of game is being played
  37. enum EGameType {SBB_STANDARD, SBB_DOUBLE, SBB_ESCAPE};
  38. /// declare ENUM used to define the currently selection option
  39. /// on the paused menu
  40. enum EPausedMenuState {PS_RESUME, PS_MAINMENU};
  41. /// declare ENUM used to define the currently selection option
  42. /// on the game over menu
  43. enum EGameOverMenuState {GO_PLAYAGAIN, GO_MAINMENU};
  44. /// declare ENUM used to define the how the ball intersect the
  45. /// game objects
  46. enum EIntersect {IS_NONE, IS_TOP, IS_RIGHT, IS_BOTTOM, IS_LEFT};
  47. struct TBallCorner
  48. {
  49.     int x;
  50. int y;
  51. };
  52. class CSuperBrickBreaker : public CDirectDrawGame
  53. {
  54. private:
  55. // keyboard state data retrieved from DirectInput
  56. UCHAR m_key_state[256];
  57. // colors
  58.     DWORD m_3d_light_clr;
  59.     DWORD m_3d_shadow_clr;
  60.     DWORD m_black_clr;
  61.     DWORD m_blue_clr;
  62.     DWORD m_boundary_clr;
  63.     DWORD m_green_clr;
  64.     DWORD m_red_clr;
  65.     DWORD m_yellow_clr;
  66. DWORD m_white_clr;
  67. // boundary RECTs
  68. RECT m_left_boun_rect;
  69. RECT m_top_boun_rect;
  70. RECT m_right_boun_rect;
  71. // boundary 3D RECTs
  72. RECT m_left_3d_light_rect;
  73. RECT m_left_3d_shadow_rect;
  74. RECT m_top_3d_light_rect;
  75. RECT m_top_3d_shadow_rect;
  76. RECT m_right_3d_light_rect;
  77. RECT m_right_3d_shadow_rect;
  78. // playing area
  79. RECT m_playing_area_rect;
  80. // paddle members
  81. CPaddle m_paddle;
  82. RECT m_paddle_rects[2];
  83. int  m_paddle_cnt;
  84. bool m_first_paddle_hit;
  85. // ball members
  86. CBall m_ball[3];
  87. RECT  m_ball_rect;
  88. int   m_num_balls;
  89. int   m_game_turns_remaining;
  90. int   m_balls_in_play;
  91. bool  m_hit_top_boun_fg;
  92. bool  m_new_level_fg;
  93. // brick members
  94. CBricks m_bricks;
  95. DWORD m_brick_colors[DEFAULT_BRICK_ROWS];
  96. int   m_brick_points[DEFAULT_BRICK_ROWS];
  97. int   m_brick_reflect_vel[DEFAULT_BRICK_ROWS];
  98. // 'state' members
  99. EGameState         m_game_state;
  100. EGameType          m_game_type;
  101. EPausedMenuState   m_paused_state;
  102. EGameOverMenuState m_gameover_state;
  103. // 'general' members
  104. int m_score;
  105. int m_level;
  106. HFONT m_menu_font;
  107. HFONT m_plain_font;
  108. ofstream m_file_stream;
  109. // drawing functions
  110. bool Draw3DFrame(const RECT p_rect);
  111. bool DrawBalls();
  112. bool DrawBoundary();
  113. bool DrawBricks();
  114. bool DrawGameOverMenu();
  115. bool DrawHeadingLine();
  116. bool DrawMainMenu();
  117. bool DrawPaddle();
  118. bool DrawPausedMenu();
  119. bool DrawStartNextTurn();
  120. // initialization functions
  121. void InitializeBalls();
  122. void InitializeBricks();
  123. void InitializeColors();
  124. void InitializeNewGame();
  125. void InitializeNewLevel();
  126. void InitializePaddle();
  127. void InitializePlayingArea();
  128. // main game processing functions
  129. bool ProcessBalls();
  130. bool ProcessKeyboard();
  131. bool ProcessPaddle();
  132. bool ProcessStateChange(EGameState m_new_game_state);
  133. // collision detection/resolution functions
  134. EIntersect CheckHitPaddle(const RECT p_ball_rect);
  135. EIntersect CheckHitBrick(const RECT p_ball_rect, TBrick* p_hit_brick);
  136. EIntersect BallRectIntersect(RECT p_ball_rect, RECT p_rect);
  137. bool IsBrickAtBallLocation(const RECT p_ball_rect, TBrick* l_hit_brick);
  138. public:
  139.     // constructor
  140.     CSuperBrickBreaker();
  141.     // destructor
  142.     ~CSuperBrickBreaker();
  143. // game member functions
  144.     bool GameInitialize();
  145.     bool GameShutdown();
  146.     bool GameMain();
  147. };
  148. #endif