版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設(shè)計----貪吃蛇
- c++貪吃蛇課程設(shè)計
- 貪吃蛇課程設(shè)計
- c語言貪吃蛇游戲課程設(shè)計
- c語言課程設(shè)計--貪吃蛇游戲
- 貪吃蛇課程設(shè)計
- 貪吃蛇課程設(shè)計
- 貪吃蛇java課程設(shè)計--貪吃蛇程序設(shè)計
- 貪吃蛇課程設(shè)計報告
- java課程設(shè)計貪吃蛇
- java課程設(shè)計--貪吃蛇
- 貪吃蛇課程設(shè)計報告
- 貪吃蛇課程設(shè)計報告
- 貪吃蛇vc課程設(shè)計
- 貪吃蛇課程設(shè)計報告
- android貪吃蛇課程設(shè)計報告
- java貪吃蛇游戲 課程設(shè)計
- java貪吃蛇課程設(shè)計報告
- java-課程設(shè)計--貪吃蛇
- c語言課程設(shè)計報告--貪吃蛇游戲系統(tǒng)
評論
0/150
提交評論