设为首页 加入收藏

TOP

15.4.1 游戏菜单的实现
2013-10-07 13:03:20 来源: 作者: 【 】 浏览:72
Tags:15.4.1 游戏 菜单 实现

15.4  扫雷游戏的界面实现

扫雷游戏的Visual C++(www.cppentry.com)工程采用MFC对话框模式进行开发。本节主要讲解扫雷游戏各个功能模块的代码实现。

说明:界面是提高用户友好度最直接的方法,所以界面设计是游戏开发中重要的部分。

15.4.1  游戏菜单的实现

在扫雷游戏中,通过如下几步即可实现添加游戏的菜单。

(1)在扫雷游戏工程的资源中添加一个菜单资源,其属性如表15.8所示。

15.8  主菜单属性

ID< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

   

 

IDR_MAIN_MENU

弹出菜单

游戏的主菜单

IDR_START_GAME

菜单栏

开始游戏

IDR_EXIT_GAME

菜单栏

退出游戏

IDR_PLAY_MUSIC

选择菜单

播放音乐

IDR_HELP

菜单栏

帮助

IDR_ABOUT

菜单栏

关于

(2)给每个菜单栏添加响应函数到CMineDlg类中。

(3)菜单响应函数的实现,如代码15.1所示。

代码15.1  菜单响应函数的实现

  1. 01  BEGIN_MESSAGE_MAP(CMineDlg, CDialog)  
  2. 02      ON_WM_SYSCOMMAND()  
  3. 03      ON_WM_PAINT()  
  4. 04      ON_WM_QUERYDRAGICON()  
  5.         // 菜单资源与函数映射表  
  6. 05      ON_COMMAND(IDR_ABOUT, OnAbout)  
  7. 06      ON_COMMAND(IDR_EXIT_GAME, OnExitGame)  
  8. 07      ON_COMMAND(IDR_HELP, OnHelp)  
  9. 08      ON_COMMAND(IDR_PLAY_MUSIC, OnPlayMusic)  
  10. 09      ON_COMMAND(IDR_START_GAME, OnStartGame)  
  11. 10  END_MESSAGE_MAP()  
  12. 11  
  13. 12  BOOL CMineDlg::OnInitDialog()           //初始化对话框  
  14. 13  {  
  15. 14      CDialog::OnInitDialog();  
  16. 15  
  17. 16      m_bStart = FALSE;   //设置游戏状态  
  18. 17  
  19. 18      InitMenu();         //初始化菜单  
  20. 19  
  21. 20      return TRUE;        //初始化成功  
  22. 21  }  
  23. 22  ...     //省略部分代码  
  24. 23  void CMineDlg::OnOK()   //单击"确认"按钮响应函数  
  25. 24  {  
  26. 25      CDialog::OnOK();  
  27. 26  }  
  28. 27  
  29. 28  void CMineDlg::OnCancel() //单击"退出"按钮响应函数  
  30. 29  {  
  31. 30      CDialog::OnCancel();  
  32. 31  }  
  33. 32  
  34. 33  void CMineDlg::OnAbout() //关于菜单栏响应函数  
  35. 34  {  
  36. 35      CAboutDlg dlg;      //创建关于对话框  
  37. 36      dlg.DoModal();      //弹出关于对话框  
  38. 37  }  
  39. 38  
  40. 39  void CMineDlg::OnExitGame()             //退出菜单栏响应函数  
  41. 40  {  
  42. 41      CDialog::OnCancel();//调用基类退出函数  
  43. 42  }  
  44. 43  
  45. 44  void CMineDlg::OnHelp() //帮助菜单栏响应函数  
  46. 45  {  
  47. 46      CHelpDlg dlg;       //创建帮助对话框  
  48. 47      dlg.DoModal();      //弹出帮助对话框  
  49. 48  }  
  50. 49  
  51. 50  void CMineDlg::OnPlayMusic()           
    //背景音乐菜单栏响应函数  
  52. 51  {  
  53. 52      CWnd*   pMain   =   AfxGetMainWnd();  
  54. 53      CMenu*   pMenu   =   pMain->GetMenu();  
  55. 54      //判断播放音乐菜单当前状态  
  56. 55      BOOL bCheck = (BOOL)pMenu->GetMenuState
    (IDR_PLAY_MUSIC, MF_CHECKED);  
  57. 56  
  58. 57      if(m_bStart)  
  59. 58      {  
  60. 59          if(bCheck)  
  61. 60          {  
  62. 61pMenu->CheckMenuItem(IDR_PLAY_MUSIC,  
  63. 62  MF_BYCOMMAND | MF_UNCHECKED);  
  64. 63          }  
  65. 64          else  
  66. 65          {  
  67. 66pMenu->CheckMenuItem(IDR_PLAY_MUSIC,  
  68. 67  MF_BYCOMMAND | MF_CHECKED);  
  69. 68          }  
  70. 69  
  71. 70          PlayBackMusic(!bCheck);        
    //调用播放背景音乐功能函数  
  72. 71      }  
  73. 72  }  
  74. 73  
  75. 74  void CMineDlg::OnStartGame()  
  76. 75  {  
  77. 76      GameStart();        //调用游戏开始接口函数  
  78. 77  }  
  79. 78  
  80. 79  void CMineDlg::InitMenu()//初始化菜单函数  
  81. 80  {  
  82. 81      CWnd*   pMain   =   AfxGetMainWnd();  
  83. 82      CMenu*   pMenu   =   pMain->GetMenu();  
  84. 83      pMenu->CheckMenuItem(IDR_PLAY_MUSIC,
    MF_BYCOMMAND| MF_UNCHECKED);  
  85. 84  } 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.2.2 制作概要设计文档 下一篇15.1.2 可行性分析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: