2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩45頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  課 程 設(shè) 計 報 告</p><p>  課程名稱:面向?qū)ο蟪绦蛟O(shè)計C++</p><p>  設(shè)計題目: 貪 吃 蛇 </p><p>  專 業(yè):計算機科學(xué)與技術(shù) </p><p>  姓 名: </p><p>  學(xué) 號:

2、 </p><p>  指導(dǎo)教師: 李 曉 虹 </p><p>  2015 年 12 月 20 日</p><p><b>  一、系統(tǒng)需求分析</b></p><p>  貪吃蛇游戲作為一款經(jīng)典小游戲,版本多樣,娛樂性也很高,適合在閑暇時放松心神。并且可在多個平臺上實現(xiàn),程序簡單易

3、懂,非常適合初學(xué)者學(xué)習(xí)制作。</p><p><b>  1、語言的使用</b></p><p>  現(xiàn)在的貪吃蛇游戲一般是用C語言實現(xiàn)的,用C語言編寫貪吃蛇游戲比較簡單易懂,當(dāng)然也可以用其他語言來實現(xiàn),比如Java、C++、C#等,這里我們用C++來實現(xiàn)。</p><p><b>  2、用C++的優(yōu)勢</b></

4、p><p>  C++在一定程度上可以和C語言很好的結(jié)合,甚至大多數(shù)C語言程序是在C++的集成開發(fā)環(huán)境中完成的。C++相對眾多的面向?qū)ο蟮恼Z言,具有相當(dāng)高的性能。C++引入了面向?qū)ο蟮母拍?,使得開發(fā)人機交互類型的應(yīng)用程序更為簡單、快捷。很多優(yōu)秀的程序框架包括Boost、Qt、MFC、OWL、WTL就是使用的C++。</p><p><b>  二、系統(tǒng)總體設(shè)計</b>&l

5、t;/p><p><b>  1.游戲界面設(shè)計</b></p><p><b> ?、胚\行程序。</b></p><p> ?、泣c擊“游戲->開始游戲”,出現(xiàn)圍墻界面,一條蛇在密閉的圍墻內(nèi),在圍墻內(nèi)隨機出現(xiàn)一食物,游戲開始。</p><p> ?、怯螒蜷_始后,通過四個方向鍵控制蛇的運動方向,吃掉隨

6、機出現(xiàn)的豆子,若不小心碰到墻壁或者與自身相交,則該輪游戲結(jié)束。</p><p> ?、扔螒蚪Y(jié)束后,會彈出游戲得分。</p><p>  ⑸點擊“游戲->退出游戲”,退出游戲。</p><p> ?、庶c擊“游戲設(shè)置->等級設(shè)置”,設(shè)置游戲相應(yīng)等級。</p><p> ?、它c擊“游戲幫助->幫助”,查看游戲的玩法。</p&

7、gt;<p>  ⑻點擊“游戲幫助->關(guān)于”,查看游戲的版本信息。</p><p> ?、蛦螕簟坝⑿郯瘛?,查看高手信息。</p><p>  2.游戲運行流程圖如下: </p><p><b>  三、詳細設(shè)計</b>&l

8、t;/p><p><b>  1.新建工程</b></p><p>  打開VC++6.0,選擇文件—新建命令,新建一個工程,再選擇MFC APPwizard[exe],工程名取為:Snake。新建Menu菜單,其ID設(shè)置為IDR_MAIN_MENU。</p><p><b>  2.控件的設(shè)計</b></p>

9、<p>  各控件設(shè)置屬性如下:</p><p><b>  3.添加主菜單對象</b></p><p>  成功設(shè)置ID之后 我們通過類向?qū)砑酉鄳?yīng)函數(shù),設(shè)置完畢后再在頭文件中增加一個主菜單對象,代碼如下:</p><p><b>  4.具體實現(xiàn)游戲</b></p><p>  4.1

10、 菜單響應(yīng)函數(shù)的聲明,代碼如下:</p><p>  // SnakeDlg.h : header file</p><p>  #if !defined(AFX_SNAKEDLG_H__275E8D1B_43B7_4FE8_B6AF_4897C77E9FED__INCLUDED_)</p><p>  #define AFX_SNAKEDLG_H__275E8D

11、1B_43B7_4FE8_B6AF_4897C77E9FED__INCLUDED_</p><p>  #if _MSC_VER > 1000</p><p>  #pragma once</p><p>  #endif // _MSC_VER > 1000</p><p>  /////////////////////////

12、////////////////////////////////////////////////////</p><p>  // CSnakeDlg dialog</p><p>  #include "SnakeGame.h"</p><p>  class CSnakeDlg : public CDialog</p><

13、p><b>  {</b></p><p>  // Construction</p><p><b>  public:</b></p><p>  void Help();</p><p>  void HeroList();</p><p>  void Play

14、BackMusic(BOOL bflg);</p><p>  void InitMenu();</p><p>  CSnakeDlg(CWnd* pParent = NULL);// standard constructor</p><p>  // Dialog Data</p><p>  //{{AFX_DATA(CSnakeDl

15、g)</p><p>  enum { IDD = IDD_SNAKE_DIALOG };</p><p>  // NOTE: the ClassWizard will add data members here</p><p>  //}}AFX_DATA</p><p>  // ClassWizard generated virtua

16、l function overrides</p><p>  //{{AFX_VIRTUAL(CSnakeDlg)</p><p>  protected:</p><p>  virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support</p><p>  //}}A

17、FX_VIRTUAL</p><p>  // Implementation</p><p>  protected:</p><p>  HICON m_hIcon;//主圖標(biāo)</p><p>  CMenu m_main_menu;//主菜單對象</p><p>  BOOL m_bStart;

18、//游戲開始標(biāo)志</p><p>  CSnakeGame m_snake;//主游戲?qū)ο?lt;/p><p>  // Generated message map functions</p><p>  //{{AFX_MSG(CSnakeDlg)</p><p>  virtual BOOL OnInitDialog();</

19、p><p>  afx_msg void OnSysCommand(UINT nID, LPARAM lParam);</p><p>  afx_msg void OnPaint();</p><p>  afx_msg HCURSOR OnQueryDragIcon();</p><p>  afx_msg void OnUpdatePlay

20、Music(CCmdUI* pCmdUI);</p><p>  afx_msg void OnUpdateHigh(CCmdUI* pCmdUI);</p><p>  afx_msg void OnUpdateLow(CCmdUI* pCmdUI);</p><p>  afx_msg void OnUpdateNor(CCmdUI* pCmdUI);</

21、p><p>  afx_msg void OnUpdateHelp(CCmdUI* pCmdUI);</p><p>  afx_msg void OnUpdateHeroList(CCmdUI* pCmdUI);</p><p>  afx_msg void OnUpdateExitGame(CCmdUI* pCmdUI);</p><p> 

22、 afx_msg void OnUpdateAbout(CCmdUI* pCmdUI);</p><p>  afx_msg void OnUpdateStartGame(CCmdUI* pCmdUI);</p><p>  afx_msg void OnTimer(UINT nIDEvent);</p><p>  afx_msg void OnKeyDown(U

23、INT nChar, UINT nRepCnt, UINT nFlags);</p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  };</b></p><p>  //{{AFX_INSERT_LOCATION}}</p>

24、<p>  // Microsoft Visual C++ will insert additional declarations immediately before the previous line.</p><p>  #endif // !defined(AFX_SNAKEDLG_H__275E8D1B_43B7_4FE8_B6AF_4897C77E9FED__INCLUDED_)</p

25、><p>  4.2 菜單響應(yīng)函數(shù)實現(xiàn),代碼如下:</p><p>  // SnakeDlg.cpp : implementation file</p><p><b>  //</b></p><p>  #include "stdafx.h"</p><p>  #incl

26、ude "Snake.h"</p><p>  #include "SnakeDlg.h"</p><p>  #include "HelpDlg.h"</p><p>  #include "HeroDlg.h"</p><p>  #include <m

27、msystem.h></p><p>  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = __FILE__;</p><p><b>

28、  #endif</b></p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CAboutDlg dialog used for App About</p><p>  class CAboutDlg :

29、public CDialog</p><p><b>  {</b></p><p><b>  public:</b></p><p>  CAboutDlg();</p><p>  // Dialog Data</p><p>  //{{AFX_DATA(CAbout

30、Dlg)</p><p>  enum { IDD = IDD_ABOUTBOX };</p><p>  //}}AFX_DATA</p><p>  // ClassWizard generated virtual function overrides</p><p>  //{{AFX_VIRTUAL(CAboutDlg)</p&

31、gt;<p>  protected:</p><p>  virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support</p><p>  //}}AFX_VIRTUAL</p><p>  // Implementation</p><p>  

32、protected:</p><p>  //{{AFX_MSG(CAboutDlg)</p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  };</b></p><p>  CAboutDlg::CAboutDlg

33、() : CDialog(CAboutDlg::IDD)</p><p><b>  {</b></p><p>  //{{AFX_DATA_INIT(CAboutDlg)</p><p>  //}}AFX_DATA_INIT</p><p><b>  }</b></p><

34、;p>  void CAboutDlg::DoDataExchange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(pDX);</p><p>  //{{AFX_DATA_MAP(CAboutDlg)</p><p

35、>  //}}AFX_DATA_MAP</p><p><b>  }</b></p><p>  BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CAboutDlg)</p><p>  // No message handlers&

36、lt;/p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CSnakeDlg dialog&

37、lt;/p><p>  CSnakeDlg::CSnakeDlg(CWnd* pParent /*=NULL*/)</p><p>  : CDialog(CSnakeDlg::IDD, pParent)</p><p><b>  {</b></p><p>  //{{AFX_DATA_INIT(CSnakeDlg)&l

38、t;/p><p>  // NOTE: the ClassWizard will add member initialization here</p><p>  //}}AFX_DATA_INIT</p><p>  // Note that LoadIcon does not require a subsequent DestroyIcon in Win32<

39、/p><p>  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);</p><p><b>  }</b></p><p>  void CSnakeDlg::DoDataExchange(CDataExchange* pDX)</p><p><b>  {&l

40、t;/b></p><p>  CDialog::DoDataExchange(pDX);</p><p>  //{{AFX_DATA_MAP(CSnakeDlg)</p><p>  // NOTE: the ClassWizard will add DDX and DDV calls here</p><p>  //}}AFX_

41、DATA_MAP</p><p><b>  }</b></p><p>  BEGIN_MESSAGE_MAP(CSnakeDlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CSnakeDlg)</p><p>  ON_WM_SYSCOMMAND()</p><p&g

42、t;  ON_WM_PAINT()</p><p>  ON_WM_QUERYDRAGICON()</p><p>  ON_UPDATE_COMMAND_UI(IDR_PLAY_MUSIC, OnUpdatePlayMusic)</p><p>  ON_UPDATE_COMMAND_UI(IDR_HIGH, OnUpdateHigh)</p>&l

43、t;p>  ON_UPDATE_COMMAND_UI(IDR_LOW, OnUpdateLow)</p><p>  ON_UPDATE_COMMAND_UI(IDR_NOR, OnUpdateNor)</p><p>  ON_UPDATE_COMMAND_UI(IDR_HELP, OnUpdateHelp)</p><p>  ON_UPDATE_COMM

44、AND_UI(IDR_HERO_LIST, OnUpdateHeroList)</p><p>  ON_UPDATE_COMMAND_UI(IDR_EXIT_GAME, OnUpdateExitGame)</p><p>  ON_UPDATE_COMMAND_UI(IDR_ABOUT, OnUpdateAbout)</p><p>  ON_UPDATE_COM

45、MAND_UI(IDR_START_GAME, OnUpdateStartGame)</p><p>  ON_WM_TIMER()</p><p>  ON_WM_KEYDOWN()</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  ///

46、//////////////////////////////////////////////////////////////////////////</p><p>  // CSnakeDlg message handlers</p><p>  BOOL CSnakeDlg::OnInitDialog()</p><p><b>  {</b&g

47、t;</p><p>  CDialog::OnInitDialog();//對話框初始化</p><p>  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);</p><p>  ASSERT(IDM_ABOUTBOX < 0xF000);</p><p>  CMenu*

48、 pSysMenu = GetSystemMenu(FALSE);</p><p>  if (pSysMenu != NULL)</p><p><b>  {</b></p><p>  CString strAboutMenu;</p><p>  strAboutMenu.LoadString(IDS_ABOUT

49、BOX);</p><p>  if (!strAboutMenu.IsEmpty())</p><p><b>  {</b></p><p>  pSysMenu->AppendMenu(MF_SEPARATOR);</p><p>  pSysMenu->AppendMenu(MF_STRING, ID

50、M_ABOUTBOX, strAboutMenu);</p><p><b>  }</b></p><p><b>  }</b></p><p>  SetIcon(m_hIcon, TRUE);//設(shè)置大圖標(biāo)</p><p>  SetIcon(m_hIcon, FALSE);//設(shè)

51、置小圖標(biāo)</p><p>  m_main_menu.LoadMenu(IDR_MAIN_MENU);</p><p>  SetMenu(&m_main_menu);</p><p>  InitMenu();</p><p>  m_snake.CreateEx( WS_EX_CLIENTEDGE, _T("SNAKEM

52、AP"), NULL, WS_VISIBLE | WS_BORDER | WS_CHILD,</p><p>  CRect( 0, 0, 325, 425 ), this, SNAKEMAP );</p><p>  GetDlgItem( SNAKEMAP )->SetFocus();</p><p>  return TRUE; </p&

53、gt;<p><b>  }</b></p><p>  void CSnakeDlg::OnSysCommand(UINT nID, LPARAM lParam)</p><p><b>  {</b></p><p>  if ((nID & 0xFFF0) == IDM_ABOUTBOX)<

54、;/p><p><b>  {</b></p><p>  CAboutDlg dlgAbout;</p><p>  dlgAbout.DoModal();</p><p><b>  }</b></p><p><b>  else</b></p&

55、gt;<p><b>  {</b></p><p>  CDialog::OnSysCommand(nID, lParam);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void CSnakeDlg::O

56、nPaint() </p><p><b>  {</b></p><p>  if (IsIconic())</p><p><b>  {</b></p><p>  CPaintDC dc(this); // device context for painting</p><

57、;p>  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);</p><p>  // Center icon in client rectangle</p><p>  int cxIcon = GetSystemMetrics(SM_CXICON);</p><p>  int cyIc

58、on = GetSystemMetrics(SM_CYICON);</p><p>  CRect rect;</p><p>  GetClientRect(&rect);</p><p>  int x = (rect.Width() - cxIcon + 1) / 2;</p><p>  int y = (rect.Heigh

59、t() - cyIcon + 1) / 2;</p><p>  // Draw the icon</p><p>  dc.DrawIcon(x, y, m_hIcon);</p><p><b>  }</b></p><p><b>  else</b></p><p>

60、;<b>  {</b></p><p>  CDialog::OnPaint();</p><p><b>  }</b></p><p><b>  }</b></p><p>  HCURSOR CSnakeDlg::OnQueryDragIcon()</p>

61、<p><b>  {</b></p><p>  return (HCURSOR) m_hIcon;</p><p><b>  }</b></p><p>  void CSnakeDlg::InitMenu()</p><p><b>  {//初始化菜單</b&

62、gt;</p><p>  m_main_menu.CheckMenuItem(IDR_LOW, MF_BYCOMMAND | MF_CHECKED);</p><p>  m_main_menu.CheckMenuItem(IDR_HIGH, MF_BYCOMMAND | MF_UNCHECKED);</p><p>  m_main_menu.CheckMenu

63、Item(IDR_NOR, MF_BYCOMMAND | MF_UNCHECKED);</p><p>  m_main_menu.CheckMenuItem(IDR_PLAY_MUSIC, MF_BYCOMMAND | MF_UNCHECKED);</p><p>  m_bStart = FALSE;</p><p>  m_snake.SetGameLevel

64、(GAME_LEVEL_LOW);</p><p><b>  }</b></p><p>  //播放音樂 菜單欄響應(yīng)函數(shù)</p><p>  void CSnakeDlg::OnUpdatePlayMusic(CCmdUI* pCmdUI) </p><p>  {//判斷播放音樂菜單當(dāng)前狀態(tài)</p>

65、<p>  BOOL bCheck = (BOOL)m_main_menu.GetMenuState(IDR_PLAY_MUSIC, MF_CHECKED);</p><p>  if(m_bStart)</p><p><b>  {</b></p><p>  if(bCheck)</p><p><

66、b>  {</b></p><p>  m_main_menu.CheckMenuItem(IDR_PLAY_MUSIC, MF_BYCOMMAND | MF_UNCHECKED);</p><p><b>  }</b></p><p><b>  else</b></p><p&g

67、t;<b>  {</b></p><p>  m_main_menu.CheckMenuItem(IDR_PLAY_MUSIC, MF_BYCOMMAND | MF_CHECKED);</p><p><b>  }</b></p><p>  PlayBackMusic(!bCheck);//調(diào)用播放背景音樂功能

68、函數(shù)</p><p><b>  }</b></p><p><b>  }</b></p><p>  //"游戲等級"|"高"菜單欄響應(yīng)函數(shù)</p><p>  void CSnakeDlg::OnUpdateHigh(CCmdUI* pCmdUI) &l

69、t;/p><p>  {//判斷當(dāng)前菜單狀態(tài)</p><p>  BOOL bCheck = (BOOL)m_main_menu.GetMenuState(IDR_HIGH, MF_CHECKED);</p><p>  if(!m_bStart)</p><p><b>  {</b></p><p&g

70、t;  if( !bCheck )</p><p><b>  {</b></p><p>  m_snake.SetGameLevel(GAME_LEVEL_HIGH);</p><p>  m_main_menu.CheckMenuItem(IDR_HIGH, MF_BYCOMMAND | MF_CHECKED);</p>&

71、lt;p>  m_main_menu.CheckMenuItem(IDR_LOW, MF_BYCOMMAND | MF_UNCHECKED);</p><p>  m_main_menu.CheckMenuItem(IDR_NOR, MF_BYCOMMAND | MF_UNCHECKED);</p><p><b>  }</b></p>&l

72、t;p><b>  }</b></p><p>  Invalidate();</p><p><b>  }</b></p><p>  //"游戲等級"|"低"菜單欄響應(yīng)函數(shù)</p><p>  void CSnakeDlg::OnUpdateLow

73、(CCmdUI* pCmdUI) </p><p>  {//判斷當(dāng)前菜單狀態(tài)</p><p>  BOOL bCheck = (BOOL)m_main_menu.GetMenuState(IDR_LOW, MF_CHECKED);</p><p>  if(!m_bStart)</p><p><b>  {</b>&

74、lt;/p><p>  if( !bCheck )</p><p><b>  {</b></p><p>  m_snake.SetGameLevel(GAME_LEVEL_LOW);</p><p>  m_main_menu.CheckMenuItem(IDR_LOW, MF_BYCOMMAND | MF_CHECK

75、ED);</p><p>  m_main_menu.CheckMenuItem(IDR_NOR, MF_BYCOMMAND | MF_UNCHECKED);</p><p>  m_main_menu.CheckMenuItem(IDR_HIGH, MF_BYCOMMAND | MF_UNCHECKED);</p><p><b>  }</b&

76、gt;</p><p><b>  }</b></p><p>  Invalidate();</p><p><b>  }</b></p><p>  //"游戲等級"|"中"菜單欄響應(yīng)函數(shù)</p><p>  void CSnak

77、eDlg::OnUpdateNor(CCmdUI* pCmdUI) </p><p>  {//判斷當(dāng)前菜單狀態(tài)</p><p>  BOOL bCheck = (BOOL)m_main_menu.GetMenuState(IDR_NOR, MF_CHECKED);</p><p>  if(!m_bStart)</p><p><b&

78、gt;  {</b></p><p>  if( !bCheck )</p><p><b>  {</b></p><p>  m_snake.SetGameLevel(GAME_LEVEL_NOR);</p><p>  m_main_menu.CheckMenuItem(IDR_NOR, MF_BYC

79、OMMAND | MF_CHECKED);</p><p>  m_main_menu.CheckMenuItem(IDR_LOW, MF_BYCOMMAND | MF_UNCHECKED);</p><p>  m_main_menu.CheckMenuItem(IDR_HIGH, MF_BYCOMMAND | MF_UNCHECKED);</p><p>&l

80、t;b>  }</b></p><p><b>  }</b></p><p>  Invalidate();</p><p><b>  }</b></p><p>  //"游戲幫助"菜單欄響應(yīng)函數(shù)</p><p>  void CS

81、nakeDlg::OnUpdateHelp(CCmdUI* pCmdUI) </p><p><b>  {</b></p><p>  Help();//調(diào)用幫助功能函數(shù)</p><p><b>  }</b></p><p>  //"關(guān)于"菜單欄響應(yīng)函數(shù)</p

82、><p>  void CSnakeDlg::OnUpdateAbout(CCmdUI* pCmdUI) </p><p><b>  {</b></p><p>  CAboutDlg dlgAbout;</p><p>  dlgAbout.DoModal();//彈出關(guān)于對話框</p><p>

83、<b>  }</b></p><p>  //"英雄榜"菜單欄響應(yīng)函數(shù)</p><p>  void CSnakeDlg::OnUpdateHeroList(CCmdUI* pCmdUI) </p><p><b>  {</b></p><p>  HeroList();

84、//調(diào)用英雄榜功能函數(shù)</p><p><b>  }</b></p><p>  //"退出"菜單欄響應(yīng)函數(shù)</p><p>  void CSnakeDlg::OnUpdateExitGame(CCmdUI* pCmdUI) </p><p><b>  {</b><

85、/p><p>  CDialog::OnCancel();//退出對話框功能函數(shù)</p><p><b>  }</b></p><p>  //"開始游戲"菜單欄響應(yīng)函數(shù)</p><p>  void CSnakeDlg::OnUpdateStartGame(CCmdUI* pCmdUI) </

86、p><p><b>  {</b></p><p>  m_snake.GameStart();//調(diào)用開始新游戲功能函數(shù)</p><p><b>  }</b></p><p>  void CSnakeDlg::PlayBackMusic(BOOL bflg)</p><p&

87、gt;<b>  {</b></p><p><b>  //指定文件并播放</b></p><p><b>  if(bflg)</b></p><p><b>  {</b></p><p>  sndPlaySound("music.wav

88、",SND_ASYNC);//播放音樂</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  sndPlaySound(NULL,SND_PURGE);//停止播放</p

89、><p><b>  }</b></p><p><b>  }</b></p><p>  void CSnakeDlg::HeroList()</p><p><b>  {</b></p><p>  CHeroDlg dlg;</p>

90、<p>  dlg.DoModal();</p><p><b>  }</b></p><p>  void CSnakeDlg::Help()</p><p><b>  {</b></p><p>  CHelpDlg dlg;</p><p>  dlg.D

91、oModal();</p><p><b>  }</b></p><p>  void CSnakeDlg::OnTimer(UINT nIDEvent) </p><p><b>  {</b></p><p>  // TODO: Add your message handler code h

92、ere and/or call default</p><p>  CDialog::OnTimer(nIDEvent);</p><p><b>  }</b></p><p>  void CSnakeDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) </p><

93、p><b>  {</b></p><p>  CDialog::OnKeyDown(nChar, nRepCnt, nFlags);</p><p><b>  }</b></p><p>  小結(jié):從以上代碼,不難看出其中幾個主要函數(shù)的實現(xiàn)辦法如下:</p><p>  1.“播放背景音樂

94、”菜單欄響應(yīng)函數(shù)的實現(xiàn)是:通過調(diào)用播放音樂成員函數(shù)來實現(xiàn)音樂播放功能。</p><p>  2.“游戲等級”菜單欄響應(yīng)函數(shù)的實現(xiàn)是:通過改變當(dāng)前游戲等級變量的值,來實現(xiàn)游戲等級的選擇。</p><p>  3.“幫助”菜單欄響應(yīng)函數(shù)的實現(xiàn)是:通過創(chuàng)建幫助對話框類的對象,用調(diào)用其成員函數(shù),將幫助對話框彈出。</p><p>  4.“開始游戲”菜單欄響應(yīng)函數(shù)的實現(xiàn)是:

95、通過調(diào)用對話框的開始游戲成員函數(shù),來實現(xiàn)開始新游戲功能。</p><p>  4.3 游戲幫助界面設(shè)計:</p><p>  添加一個對話框資源到工程中,并填寫說明文字,如下圖所示</p><p>  4.31 添加幫助對話框類聲明,代碼如下:</p><p>  #if !defined(AFX_HELPDLG_H__EE6E6AF7_

96、690A_431B_A0A9_C94F68CCE3E1__INCLUDED_)</p><p>  #define AFX_HELPDLG_H__EE6E6AF7_690A_431B_A0A9_C94F68CCE3E1__INCLUDED_</p><p>  #if _MSC_VER > 1000</p><p>  #pragma once</p&g

97、t;<p>  #endif // _MSC_VER > 1000</p><p>  // HelpDlg.h : header file</p><p><b>  //</b></p><p>  /////////////////////////////////////////////////////////////

98、////////////////</p><p>  // CHelpDlg dialog</p><p>  class CHelpDlg : public CDialog</p><p><b>  {</b></p><p>  // Construction</p><p><b&g

99、t;  public:</b></p><p>  CHelpDlg(CWnd* pParent = NULL); // standard constructor</p><p>  // Dialog Data</p><p>  //{{AFX_DATA(CHelpDlg)</p><p>  enum { IDD = I

100、DD_HELP_DLG };</p><p>  // NOTE: the ClassWizard will add data members here</p><p>  //}}AFX_DATA</p><p>  // Overrides</p><p>  // ClassWizard generated virtual functi

101、on overrides</p><p>  //{{AFX_VIRTUAL(CHelpDlg)</p><p>  protected:</p><p>  virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support</p><p>  //}}AFX_VIR

102、TUAL</p><p>  // Implementation</p><p>  protected:</p><p>  // Generated message map functions</p><p>  //{{AFX_MSG(CHelpDlg)</p><p>  virtual void OnOK()

103、;</p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  };</b></p><p>  4.32 幫助對話框類的實現(xiàn),代碼如下:</p><p>  // HelpDlg.cpp : implementatio

104、n file</p><p><b>  //</b></p><p>  #include "stdafx.h"</p><p>  #include "Snake.h"</p><p>  #include "HelpDlg.h"</p>&l

105、t;p>  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = __FILE__;</p><p><b>  #endif</b></p>

106、;<p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CHelpDlg dialog</p><p>  CHelpDlg::CHelpDlg(CWnd* pParent /*=NULL*/)</p><p> 

107、 : CDialog(CHelpDlg::IDD, pParent)</p><p><b>  {</b></p><p>  //{{AFX_DATA_INIT(CHelpDlg)</p><p>  // NOTE: the ClassWizard will add member initialization here</p>

108、<p>  //}}AFX_DATA_INIT</p><p><b>  }</b></p><p>  void CHelpDlg::DoDataExchange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::

109、DoDataExchange(pDX);</p><p>  //{{AFX_DATA_MAP(CHelpDlg)</p><p>  // NOTE: the ClassWizard will add DDX and DDV calls here</p><p>  //}}AFX_DATA_MAP</p><p><b>  }

110、</b></p><p>  BEGIN_MESSAGE_MAP(CHelpDlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CHelpDlg)</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  //

111、///////////////////////////////////////////////////////////////////////////</p><p>  // CHelpDlg message handlers</p><p>  void CHelpDlg::OnOK() </p><p><b>  {</b></p

112、><p>  CDialog::OnOK();</p><p><b>  }</b></p><p>  實現(xiàn)了幫助對話框類后,還要實現(xiàn)在CSnakeDlg中的Help()函數(shù),這個函數(shù)通過創(chuàng)建CHelpDlg類的對象,彈出幫助對話框,代碼如下:</p><p>  #include "HelpDlg.h&quo

113、t;</p><p><b>  ...</b></p><p>  void CSnakeDlg::help()</p><p><b>  {</b></p><p>  CHelpDlg dlg;</p><p>  dlg.Domodal();</p>

114、<p><b>  }</b></p><p>  4.4 “英雄榜”的實現(xiàn)</p><p>  4.41 創(chuàng)建一個英雄榜對話框資源,并加入工程中。對話框中的資源ID及名稱如表所示</p><p>  4.42 創(chuàng)建配置文件Hero.ini,內(nèi)容如下:</p><p><b>  [HERO]&

115、lt;/b></p><p><b>  name=22</b></p><p><b>  score=34</b></p><p><b>  level=2</b></p><p>  4.43 英雄榜對話框類的聲明,代碼如下:</p><p&

116、gt;  #if !defined(AFX_HERODLG_H__6DD769D0_3A89_47E8_A982_DE8BD87975FE__INCLUDED_)</p><p>  #define AFX_HERODLG_H__6DD769D0_3A89_47E8_A982_DE8BD87975FE__INCLUDED_</p><p>  #if _MSC_VER > 1000&

117、lt;/p><p>  #pragma once</p><p>  #endif // _MSC_VER > 1000</p><p>  // HeroDlg.h : header file</p><p><b>  //</b></p><p>  ///////////////////

118、//////////////////////////////////////////////////////////</p><p>  // CHeroDlg dialog</p><p>  class CHeroDlg : public CDialog</p><p><b>  {</b></p><p>  /

119、/ Construction</p><p><b>  public:</b></p><p>  void SetWriteFlg(BOOL bflg);</p><p>  CHeroDlg(CWnd* pParent = NULL); // standard constructor</p><p>  //

120、Dialog Data</p><p>  //{{AFX_DATA(CHeroDlg)</p><p>  enum { IDD = IDD_HERO_LIST };</p><p>  intm_level;</p><p>  CStringm_name;</p><p>  intm_score;&l

121、t;/p><p>  //}}AFX_DATA</p><p>  // Overrides</p><p>  // ClassWizard generated virtual function overrides</p><p>  //{{AFX_VIRTUAL(CHeroDlg)</p><p><b>

122、  public:</b></p><p>  virtual int DoModal();</p><p>  protected:</p><p>  virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support</p><p>  //}}AFX

123、_VIRTUAL</p><p>  // Implementation</p><p>  protected:</p><p>  // Generated message map functions</p><p>  //{{AFX_MSG(CHeroDlg)</p><p>  virtual void On

124、OK();</p><p>  afx_msg void OnBtn();</p><p>  virtual BOOL OnInitDialog();</p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  private:&l

125、t;/b></p><p>  BOOL m_bWriteflg;</p><p><b>  };</b></p><p>  //{{AFX_INSERT_LOCATION}}</p><p>  // Microsoft Visual C++ will insert additional declaratio

126、ns immediately before the previous line.</p><p>  #endif // !defined(AFX_HERODLG_H__6DD769D0_3A89_47E8_A982_DE8BD87975FE__INCLUDED_)</p><p>  4.44 “英雄榜”對話框分為2中情況。一種是顯示當(dāng)前最高紀(jì)錄;另一種是寫入當(dāng)前最高紀(jì)錄。所以必須在其

127、內(nèi)部有一個狀態(tài)標(biāo)志位變量來區(qū)別。當(dāng)需要寫入時,設(shè)置其為有效。需要顯示時,設(shè)置其為無效。代碼如下:</p><p>  // HeroDlg.cpp : implementation file</p><p><b>  //</b></p><p>  #include "stdafx.h"</p><p

128、>  #include "Snake.h"</p><p>  #include "HeroDlg.h"</p><p>  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p><p>  #undef THIS_FILE</p>&l

129、t;p>  static char THIS_FILE[] = __FILE__;</p><p><b>  #endif</b></p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CH

130、eroDlg dialog</p><p>  CHeroDlg::CHeroDlg(CWnd* pParent /*=NULL*/)</p><p>  : CDialog(CHeroDlg::IDD, pParent)</p><p><b>  {</b></p><p>  m_bWriteflg = FALSE

131、;</p><p><b>  }</b></p><p>  void CHeroDlg::DoDataExchange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(pDX);</p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論