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

其他智力游戏

开发平台:

C/C++

  1. /*++
  2. Copyright (c) 2004-2005  Micro-soft
  3. Module Name:
  4.     MineWnd.h
  5. Abstract:
  6.        the mian Frame of the Mine-Game, we should do the most draw-work here,
  7. surely,the size and style of the window should set here too. 
  8. Author:
  9. Microsoft's Engineer - Unknown Name
  10.     improved by Weijian Luo (Arthur Luo)   15-Jun-2005
  11. E-mail: skybluehacker@yahoo.com.cn
  12. Revision History:      1.0
  13. --*/
  14. #if !defined(AFX_MAINWND_H__FB2594FD_B845_48A9_A9D0_FADC86BCE950__INCLUDED_)
  15. #define AFX_MAINWND_H__FB2594FD_B845_48A9_A9D0_FADC86BCE950__INCLUDED_
  16. #if _MSC_VER > 1000
  17. #pragma once
  18. #endif // _MSC_VER > 1000
  19. typedef struct 
  20. {
  21. UINT uRow;         //所在雷区二维数组的行
  22. UINT uCol;         //所在雷区二位数组的列
  23. UINT uState;       //当前状态
  24. UINT uAttrib;      //方块属性
  25. UINT uOldState;    //历史状态
  26. } MINEWND; // 雷方块结构体
  27. /////////////////////////////////////////////////////////////////////////////
  28. class CMineWnd : public CWnd
  29. {
  30. public:
  31. CMineWnd();
  32. virtual ~CMineWnd();
  33. void ResetRecord();
  34. void SetCustom(UINT xNum, UINT yNum, UINT mNum);
  35. //{{AFX_VIRTUAL(CMineWnd)
  36. //}}AFX_VIRTUAL
  37. protected:
  38. //{{AFX_MSG(CMineWnd)
  39. afx_msg void OnPaint();
  40. afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
  41. afx_msg void OnTimer(UINT nIDEvent);
  42. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  43. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  44. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  45. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  46. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  47. afx_msg void OnMemuStart();
  48. afx_msg void OnMemuPrimary();
  49. afx_msg void OnMemuSecond();
  50. afx_msg void OnMemuAdvance();
  51. afx_msg void OnMemuCustom();
  52. afx_msg void OnMemuMark();
  53. afx_msg void OnMemuColor();
  54. afx_msg void OnMemuSound();
  55. afx_msg void OnMemuExit();
  56. afx_msg void OnMemuHelpList();
  57. afx_msg void OnMemuHelpFind();
  58. afx_msg void OnMemuHelpUse();
  59. afx_msg void OnMemuAbout();
  60. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  61. afx_msg void OnInitMenu(CMenu* pMenu);
  62. afx_msg void OnMemuClose();
  63. afx_msg void OnMemuHero();
  64. afx_msg void OnMemuCheat();
  65. //}}AFX_MSG
  66. DECLARE_MESSAGE_MAP()
  67. public:
  68. // init and save functions
  69. void LoadConfig();
  70. void SaveConfig();
  71. void LoadWaveSrc();
  72. void FreeWaveSrc();
  73. void InitGame();
  74. void LoadBitmap();
  75. void FreeMines();
  76. void SizeWindow();
  77. void LayMines(UINT row, UINT col);
  78. // draw functions
  79. void DrawShell(CPaintDC &dc);
  80. void DrawButton(CPaintDC &dc);
  81. void DrawNumber(CPaintDC &dc);
  82. void DrawMineArea(CPaintDC &dc);
  83. void DrawDownNum(MINEWND* mine, UINT num);
  84. void DrawSpecialMine(UINT row, UINT col);
  85. // change menu check state funtions
  86. void SetCheckedSound();
  87. void SetCheckedColor();
  88. void SetCheckedMark();
  89. void SetCheckedLevel();
  90. void SetCheckedCheat();
  91. // other functions
  92. void ExpandMines(UINT row, UINT col);
  93. BOOL IsInMineArea(UINT row, UINT col);
  94. BOOL IsMine(UINT row, UINT col);
  95. UINT GetAroundNum(UINT row, UINT col);
  96. UINT GetAroundFlags(UINT row, UINT col);
  97. void Dead(UINT row, UINT col);
  98. BOOL Victory();
  99. // both button click fuctions
  100. void OnLRBtnDown(UINT row, UINT col);
  101. void OnLRBtnUp(UINT row, UINT col);
  102. void OpenAround(UINT row, UINT col);
  103. BOOL ErrorAroundFlag(UINT row, UINT col/*, UINT &errorRow, UINT &errorCol*/);
  104. void OpenByCheat();
  105. MINEWND* GetMine(long x, long y);
  106. protected :
  107. UINT m_uXNum; // X方向小方块个数
  108. UINT m_uYNum; // Y方向小方块个数
  109. UINT m_uMineNum; // 总的雷个数
  110. int  m_nLeaveNum; // 剩余的雷个数
  111. UINT m_uSpendTime; // 游戏开始击到目前所花费的时间
  112. UINT m_uGameState; // 游戏状态
  113. UINT m_uTimer; // 定时器标识
  114. UINT m_uNewState; // 当前选中的小方块的状态
  115. UINT m_uLevel; // 当前游戏等级
  116. UINT m_uPrimary; // 初级记录
  117. UINT m_uSecond; // 中级记录
  118. UINT m_uAdvance; // 高级记录
  119. CString m_szPrimary; // 初级记录保持者
  120. CString m_szSecond; // 中级记录保持者
  121. CString m_szAdvance; // 高级记录保持者
  122. BOOL m_bLRBtnDown; // 是否为左右键同时按下
  123. BOOL m_bClickBtn; // 左键按下的时候鼠标是否位于按钮区域内
  124. BOOL m_bMarkful; // 是否能显示标记
  125. BOOL m_bColorful; // 是否彩色显示
  126. BOOL m_bSoundful; // 是否有声音
  127. CMenu* m_pSubMenu; // 子菜单
  128. CBitmap m_bmpMine; // 雷区背景图像
  129. CBitmap m_bmpNumber; // 数字背景图像
  130. CBitmap m_bmpButton; // 笑脸按钮背景图像
  131. CBrush m_brsBG; // 背景画刷对象
  132. COLORREF m_clrDark; // 各按钮的深色调
  133. RECT m_rcClient; // 客户区域
  134. UINT m_uBtnRect[3]; // 按钮框区域坐标数组
  135. UINT m_uBtnState; // 按钮状态
  136. UINT m_uNumRect[3]; // 数字框区域坐标数组(包括时间和雷个数)
  137. UINT m_uShellRcX[2]; // 内框以及边界的坐标X方向
  138. UINT m_uShellRcY[2]; // 内框以及边界的坐标Y方向
  139. MINEWND m_pMines[100][100]; // 表示雷区内的所有小方块的二维数组
  140. MINEWND* m_pNewMine; // 当前选中的小方块
  141. MINEWND* m_pOldMine; // 上次选中的小方块
  142. void* m_pSndDead; // 失败提示音
  143. void* m_pSndVictory; // 胜利提示音
  144. void* m_pSndClock; // 时钟提示音
  145. };
  146. //{{AFX_INSERT_LOCATION}}
  147. #endif // !defined(AFX_MAINWND_H__FB2594FD_B845_48A9_A9D0_FADC86BCE950__INCLUDED_)