skyblue_RectView.h
上传用户:hbrsgg1
上传日期:2014-05-08
资源大小:2826k
文件大小:7k
源码类别:

其他智力游戏

开发平台:

C/C++

  1. // skyblue_RectView.h : interface of the CSkyblue_RectView class
  2. //
  3. /////////////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_SKYBLUE_RECTVIEW_H__D33E8EC7_BE69_4161_9B54_FB14CBA27F2E__INCLUDED_)
  5. #define AFX_SKYBLUE_RECTVIEW_H__D33E8EC7_BE69_4161_9B54_FB14CBA27F2E__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. // 宏变量:白色和黑色
  10. #define WHITE RGB(255,255,255)
  11. #define BLACK RGB(0,0,0)
  12. #define BLUE RGB(0,0,255)
  13. //中断操作的运动趋势
  14. #define LEFT  0      //向左移动
  15. #define RIGHT 1      //向左移动
  16. #define UP    2 //向上(变形)      
  17. #define DOWN  3      //向下移动(加速)
  18. //游戏区域地图最大限制
  19. #define  MAX_ROW    100     //地图的最大行数
  20. #define  MAX_COL    100      //地图的最大列数
  21. //地图状态
  22. #define MAP_STATE_EMPTY             0    //空(未被占据)
  23. #define MAP_STATE_NOT_EMPTY         1    //被占据
  24. class CSkyblue_RectView : public CView
  25. {
  26. protected: // create from serialization only
  27. CSkyblue_RectView();
  28. DECLARE_DYNCREATE(CSkyblue_RectView)
  29. // Attributes
  30. public:
  31. CSkyblue_RectDoc* GetDocument();
  32. // Operations
  33. public:
  34. // Overrides
  35. // ClassWizard generated virtual function overrides
  36. //{{AFX_VIRTUAL(CSkyblue_RectView)
  37. public:
  38. virtual void OnDraw(CDC* pDC);  // overridden to draw this view
  39. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  40. //}}AFX_VIRTUAL
  41. // Implementation
  42. public:
  43. virtual ~CSkyblue_RectView();
  44. protected:
  45. int m_nWidth;  //子窗口的宽度
  46. int m_nHeight; //子窗口的高度
  47. //列与行的数量
  48. int m_iCol;
  49. int m_iRow;
  50. //小方块的大小,它会随着行与列的不同而不同,具体为:
  51. // 12行10列,30个象素的正方形
  52. // 18行15列,20
  53. // 24行20列,15
  54. // 30行25列,12
  55. int m_iLarge;
  56. //当前的级别,换算成速度的算法为:1500 - m_iLevel*200
  57. int m_iLevel;
  58. //当前选择的方块显示样式
  59. int m_iBlockSytle;
  60. //游戏区域左上角的坐标
  61. int m_iStartX;
  62. int m_iStartY;
  63. void RectChange();
  64. BOOL IsLeftLimit();       //下坠物件是否可向左移动
  65. BOOL IsRightLitmit();
  66. //接触面二维数组,记录1~7种下坠物的1~4种形态的接触面信息
  67. //我们把该下坠物的某种形态种的4个方块,有接触面则记录方位,无则为-1标识。
  68. int InterFace[74][4];
  69. //当前的方块形状
  70. int m_currentRect;
  71. //判断当前方块是否到底
  72. void IsBottom();
  73. //当前方块下降
  74. void RectDown();
  75. //当前方块加速:UP,左移:LEFT,右移:RIGHT
  76. void RectArrow(int m_Type);
  77. //根据下坠物的类型映射出它的具体形态  功能组
  78. //根据旧的下一下坠物映射出当前激活状态下的下坠物形态
  79. void RectStatusToActiveStatus(int m_which); 
  80. //根据下坠物形态映射出下一下坠物的形态
  81. void RectStatusToNextStatus(int m_which); 
  82. //将当前的状态映射到地图游戏区域
  83. void ActiveStatusToGameStatus(); 
  84. int Random(int MaxNumber);
  85. //标识方块已到底的变量,到底为TRUE
  86. BOOL m_isBottom;
  87. //用于标志方块状态的数组,大小由横格与竖格数据决定,为1表示该方块显示,或者不显示
  88. //画形状只需要修改数组中相应元素的状态值即可
  89. //由时钟控制,定时在OnPaint函数中根据数组画方块
  90. int GameStatus[MAX_ROW][MAX_COL];
  91. //用于保存当前方块的动态位置,4个小方块分别在大数组中的位置
  92. //存放位置为先左后右,每一列又遵循先上后下的原则
  93. int ActiveStatus[4][2];
  94. //存入下一次要出来的方块的模样的数组
  95. int NextStatus[4][2];
  96. // Generated message map functions
  97. protected:
  98. BOOL m_bGamePaush;
  99. void StopMid();
  100. void PlayMid();
  101. void CurrentAreaAndLevel();
  102. //用于记录当前区域大小与当前级别的字符串,用于显示在屏幕上提示用户当前状态
  103. CString m_strArea;
  104. CString m_strLevel;
  105. //当前的样式 ,下一个将会出现的样式
  106. int m_icurrentStatus;
  107. int m_inextStatus;
  108. //OnDraw中需要用到的设备名称
  109. CPen *m_pBlackPen;
  110. CBrush *m_pGrayBrush;
  111. CBrush *m_pBlackBrush;
  112. //是否画网格线
  113. BOOL m_bDrawGrid;
  114. //是否插放背景音乐
  115. BOOL m_bMusic;
  116. //游戏总成绩
  117. int m_iPerformance;
  118. //游戏是否已结束,为FALSE表示开始,否则为结束
  119. BOOL m_bGameEnd;
  120. //刷新指定的区域,它的大小为:四个小方块所在的正方形的大小
  121. void InvalidateCurrent();
  122. //内存绘图设备的处理
  123. CDC m_memDC;                   //内存设备环境 
  124. CBitmap m_memBmp;              //内存位图
  125. CDC m_memRectDC;       //方块内存设备环境
  126. HBITMAP m_hMemRectBmp;  //方块内存位图句柄
  127. int m_bFistPlay;               //是否是第一次开始游戏
  128. void DcEnvInitial(void); 
  129. void DCEnvClear(void);
  130. void DrawGame(CDC *pDC);
  131. // Generated message map functions
  132. protected:
  133. //{{AFX_MSG(CSkyblue_RectView)
  134. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  135. afx_msg void OnTimer(UINT nIDEvent);
  136. afx_msg void OnGameStart();
  137. afx_msg void OnGameEnd();
  138. afx_msg void OnGameOption();
  139. afx_msg void OnUpdateGameStart(CCmdUI* pCmdUI);
  140. afx_msg void OnUpdateGameOption(CCmdUI* pCmdUI);
  141. afx_msg void OnUpdateGameEnd(CCmdUI* pCmdUI);
  142. afx_msg void OnUpdateGameExit(CCmdUI* pCmdUI);
  143. afx_msg void OnUpdateHelpAbout(CCmdUI* pCmdUI);
  144. afx_msg void OnUpdateHelpHelp(CCmdUI* pCmdUI);
  145. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  146. afx_msg void OnHelpHelp();
  147. afx_msg void OnUpdateOptionArea1(CCmdUI* pCmdUI);
  148. afx_msg void OnUpdateOptionArea2(CCmdUI* pCmdUI);
  149. afx_msg void OnUpdateOptionArea3(CCmdUI* pCmdUI);
  150. afx_msg void OnUpdateOptionArea4(CCmdUI* pCmdUI);
  151. afx_msg void OnOptionArea1();
  152. afx_msg void OnOptionArea2();
  153. afx_msg void OnOptionArea3();
  154. afx_msg void OnOptionArea4();
  155. afx_msg void OnUpdateOptionLevel1(CCmdUI* pCmdUI);
  156. afx_msg void OnUpdateOptionLevel2(CCmdUI* pCmdUI);
  157. afx_msg void OnUpdateOptionLevel3(CCmdUI* pCmdUI);
  158. afx_msg void OnUpdateOptionLevel4(CCmdUI* pCmdUI);
  159. afx_msg void OnUpdateOptionLevel5(CCmdUI* pCmdUI);
  160. afx_msg void OnUpdateOptionLevel6(CCmdUI* pCmdUI);
  161. afx_msg void OnOptionLevel1();
  162. afx_msg void OnOptionLevel2();
  163. afx_msg void OnOptionLevel3();
  164. afx_msg void OnOptionLevel4();
  165. afx_msg void OnOptionLevel5();
  166. afx_msg void OnOptionLevel6();
  167. afx_msg void OnUpdateOptionGrid(CCmdUI* pCmdUI);
  168. afx_msg void OnOptionGrid();
  169. afx_msg void OnUpdateOptionMusic(CCmdUI* pCmdUI);
  170. afx_msg void OnOptionMusic();
  171. afx_msg void OnUpdateGamePaush(CCmdUI* pCmdUI);
  172. afx_msg void OnGamePaush();
  173. afx_msg void OnGameExit();
  174. afx_msg void OnHelpAbout();
  175. //}}AFX_MSG
  176. DECLARE_MESSAGE_MAP()
  177. };
  178. /*
  179. CRectGameView : public CView
  180. {
  181. //内部存取数据结构
  182. int m_stateMap[MAX_ROW][MAX_COL];
  183. //初始化操作
  184. GameInitnal();      //游戏的初始化
  185. //用于判断数据相关状态的操作
  186. IsLeftLimit();       //下坠物件是否可向左移动
  187. IsRightLitmit();     //
  188. IsBottom();          //是否已经到达了底部
  189. IsGameEnd();         //是否游戏已经结束
  190. //方块物件下坠过程中的操作
  191. RectChange();        //下坠物件变形
  192. RectDown();          //下坠物件正常下落
  193. RectArrow();         //下坠物件方向移动(左,右,下加速)
  194.    //状态控制操作
  195. GameStart();         //游戏开始
  196. GamePause();         //游戏暂停
  197. GameEnd();           //游戏结束
  198. }
  199. #ifndef _DEBUG  // debug version in skyblue_RectView.cpp
  200. inline CSkyblue_RectDoc* CSkyblue_RectView::GetDocument()
  201.    { return (CSkyblue_RectDoc*)m_pDocument; }
  202. #endif
  203. */
  204. /////////////////////////////////////////////////////////////////////////////
  205. //{{AFX_INSERT_LOCATION}}
  206. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  207. #endif // !defined(AFX_SKYBLUE_RECTVIEW_H__D33E8EC7_BE69_4161_9B54_FB14CBA27F2E__INCLUDED_)