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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  C++課程設(shè)計(jì)報(bào)告</b></p><p>  24點(diǎn)游戲軟件的開(kāi)發(fā)</p><p><b>  目 錄</b></p><p>  1 概 述1</p><p>  1.1 課程設(shè)計(jì)目的1</p><p>  1.2 課程設(shè)計(jì)內(nèi)

2、容1</p><p>  2 系統(tǒng)需求分析1</p><p>  2.1 系統(tǒng)目標(biāo)1</p><p>  2.2 主體功能1</p><p>  2.3 開(kāi)發(fā)環(huán)境2</p><p>  3 系統(tǒng)概要設(shè)計(jì)2</p><p>  3.1 系統(tǒng)功能模塊劃分2</p><

3、;p>  3.2 系統(tǒng)流程圖3</p><p><b>  4系統(tǒng)詳細(xì)設(shè)計(jì)4</b></p><p>  4.1 設(shè)計(jì)步驟4</p><p>  4.2 界面設(shè)計(jì)4</p><p>  4.3 關(guān)鍵功能的實(shí)現(xiàn)5</p><p><b>  5 測(cè)試9</b>

4、</p><p>  5.1 測(cè)試方案9</p><p>  5.2 測(cè)試結(jié)果9</p><p><b>  附 錄15</b></p><p>  附錄1 源程序清單15</p><p>  24點(diǎn)游戲軟件的開(kāi)發(fā)</p><p>  1 概 述

5、 </p><p>  1.1 課程設(shè)計(jì)目的</p><p>  a、鞏固并加深學(xué)生對(duì)C++語(yǔ)言程序設(shè)計(jì)知識(shí)的理解;</p><p>  b、培養(yǎng)學(xué)生面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,使學(xué)生認(rèn)識(shí)面向過(guò)程和面向?qū)ο髢煞N設(shè)計(jì)方法的區(qū)別;</p><p>  c、進(jìn)一步掌握和應(yīng)用VC++ 6.0集成開(kāi)發(fā)環(huán)境;</p><p> 

6、 d、提高運(yùn)用C++語(yǔ)言解決實(shí)際問(wèn)題的能力; </p><p>  e、初步掌握開(kāi)發(fā)小型實(shí)用軟件的基本方法,能獨(dú)立設(shè)計(jì)、實(shí)現(xiàn)基本的MIS系統(tǒng);</p><p>  f、掌握書(shū)寫(xiě)程序設(shè)計(jì)開(kāi)發(fā)文檔的能力(書(shū)寫(xiě)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告)。</p><p>  1.2 課程設(shè)計(jì)內(nèi)容</p><p>  課題名稱(chēng):24點(diǎn)游戲軟件的開(kāi)發(fā)</p>&

7、lt;p>  說(shuō)明:24點(diǎn)游戲是一種常見(jiàn)的紙牌游戲說(shuō)明</p><p><b>  要求:</b></p><p><b>  a)實(shí)現(xiàn)隨機(jī)發(fā)牌;</b></p><p>  b)能進(jìn)行結(jié)果驗(yàn)算;</p><p><b>  c)計(jì)分;</b></p>&l

8、t;p><b>  d)難度設(shè)置。</b></p><p><b>  2 系統(tǒng)需求分析</b></p><p><b>  2.1 系統(tǒng)目標(biāo)</b></p><p>  24點(diǎn)游戲是個(gè)流行的數(shù)學(xué)運(yùn)算游戲。本次課程設(shè)計(jì)通過(guò)24點(diǎn)游戲來(lái)加深我們對(duì)對(duì)話框編程的認(rèn)識(shí)和理解,并介紹Visual C++在

9、數(shù)學(xué)計(jì)算方面的應(yīng)用,以及在按鈕上設(shè)置位圖和設(shè)置計(jì)時(shí)器的方法。</p><p>  24點(diǎn)撲克游戲的規(guī)則是:由系統(tǒng)發(fā)出4張撲克牌,要求用戶(hù)利用撲克牌上顯示的數(shù)字(JQKA算10),通過(guò)加減乘除運(yùn)算得出24。</p><p><b>  2.2 主體功能</b></p><p>  a.對(duì)游戲設(shè)計(jì)三個(gè)難易級(jí)別,分別為低級(jí)、中級(jí)和高級(jí)。每次開(kāi)始游戲前

10、可以根據(jù)玩家的需要進(jìn)行難度設(shè)置,如若不設(shè)置,系統(tǒng)默認(rèn)難度級(jí)別為中級(jí),設(shè)置完難度級(jí)別之后就可以開(kāi)始游戲了,單擊“發(fā)牌”按鈕,桌面上出現(xiàn)四張翻開(kāi)的撲克牌,與此同時(shí),游戲開(kāi)始計(jì)時(shí),進(jìn)度條開(kāi)始前進(jìn)。 </p><p>  b.在規(guī)定的時(shí)間內(nèi),玩家可以在“輸入算式”的編輯框中輸入自己想好的算式,然后點(diǎn)擊“驗(yàn)算”按鈕:如果輸入的算式經(jīng)運(yùn)算后所的答案正確,則會(huì)在編輯框中顯示“正確!”;如果輸入的數(shù)字與給出的牌的數(shù)字不符或者符

11、號(hào)不合法,則會(huì)彈出“內(nèi)部錯(cuò)誤!”的窗口;如果輸入的數(shù)字與四張牌相符、字符亦合法但是答案不正確,則會(huì)在編輯框中顯示“錯(cuò)誤”;如果未輸入任何的數(shù)字和算符,則會(huì)彈出“內(nèi)部錯(cuò)誤!”的窗口。 </p><p>  c.如果在規(guī)定的時(shí)間內(nèi),玩家沒(méi)有點(diǎn)擊驗(yàn)算按鈕,則會(huì)彈出“內(nèi)部錯(cuò)誤”的窗口。 </p><p>  d.在結(jié)束本輪游戲后,如果玩家想繼續(xù)游戲,則可點(diǎn)擊“發(fā)牌”按鈕即可重新發(fā)牌,開(kāi)始下一輪的

12、游戲;如果玩家想結(jié)束游戲,則可點(diǎn)擊“結(jié)束”按鈕即可結(jié)束游戲。</p><p><b>  2.3 開(kāi)發(fā)環(huán)境</b></p><p>  Microsoft Visual C++ 6.0</p><p><b>  3 系統(tǒng)概要設(shè)計(jì)</b></p><p>  3.1 系統(tǒng)功能模塊劃分</p&g

13、t;<p>  a.建立一個(gè)隨機(jī)產(chǎn)生撲克牌的模塊。由程序隨機(jī)產(chǎn)生4張撲克牌,每張牌對(duì)應(yīng)一個(gè)整數(shù)。</p><p>  b.計(jì)時(shí)的模塊。定義一個(gè)計(jì)時(shí)器,以便對(duì)使用時(shí)間進(jìn)行計(jì)數(shù)。</p><p>  c.計(jì)算表達(dá)式的模塊。主要是通過(guò)函數(shù)來(lái)確定運(yùn)算式各符號(hào)優(yōu)先級(jí)和最終計(jì)算出輸入算式的結(jié)果。</p><p>  d.驗(yàn)算表達(dá)式正誤的模塊。在規(guī)定的時(shí)間內(nèi)輸入算式

14、進(jìn)行驗(yàn)算,根據(jù)不同的情況會(huì)出現(xiàn)不同的對(duì)話框。</p><p><b>  3.2 系統(tǒng)流程圖</b></p><p>  圖3-1 系統(tǒng)流程圖</p><p>  說(shuō)明:按下“發(fā)牌”按鈕游戲開(kāi)始,通過(guò)調(diào)用函數(shù),桌面上隨機(jī)顯示4張紙牌。這4張紙牌從1-K中隨機(jī)調(diào)出。與此同時(shí),標(biāo)識(shí)耗時(shí)時(shí)標(biāo)的進(jìn)度條開(kāi)始前進(jìn)。計(jì)時(shí)同步開(kāi)始。設(shè)置了時(shí)間限制,如果玩家沒(méi)有

15、在規(guī)定時(shí)間內(nèi)輸入表達(dá)式,本輪游戲結(jié)束,在函數(shù)OnTimer()的作用下,會(huì)彈出對(duì)話“內(nèi)部錯(cuò)誤”。</p><p>  若用戶(hù)在規(guī)定時(shí)間內(nèi)點(diǎn)擊了“驗(yàn)算”按鈕,系統(tǒng)進(jìn)行相應(yīng)運(yùn)算,緊接著系統(tǒng)調(diào)用驗(yàn)算函數(shù)對(duì)編輯框中運(yùn)算出的結(jié)果進(jìn)行驗(yàn)算,根據(jù)驗(yàn)算情況給出相應(yīng)的結(jié)果。出現(xiàn)的結(jié)果有以下四中情況:(1)如果用戶(hù)沒(méi)在輸入算式中輸入算式,直接按“驗(yàn)算”按鈕,會(huì)彈出“錯(cuò)誤!”的提示。(2)如果輸入的數(shù)字與給出的不符或者符號(hào)不合法,會(huì)彈

16、出“錯(cuò)誤!”的提示。(3)如果輸入的數(shù)字與四張牌相符、字符亦合法但是答案不正確,會(huì)彈出“錯(cuò)誤!”。(4)如果輸入算式經(jīng)運(yùn)算后所得答案正確,則會(huì)彈出“正確!”,點(diǎn)擊彈出框中的“發(fā)牌”按鈕,系統(tǒng)會(huì)自動(dòng)給出本局的得分和耗時(shí)。</p><p>  本輪游戲結(jié)束后,用戶(hù)可以選擇重新開(kāi)始,否則,可以點(diǎn)擊“結(jié)束游戲”按鈕退出游戲。</p><p><b>  4系統(tǒng)詳細(xì)設(shè)計(jì)</b>

17、</p><p><b>  4.1 設(shè)計(jì)步驟</b></p><p> ?。╝)在VC++6.0中,建立一個(gè)MFC AppWizard(exe)工程,在應(yīng)用程序類(lèi)型中選擇“基本對(duì)話框”,其余的都采用默認(rèn)選項(xiàng),即可完成對(duì)話框的創(chuàng)建。</p><p>  (b)在對(duì)話框中添加4個(gè)圖像(分別用于四張撲克牌),4個(gè)按鈕(分別是發(fā)牌、輸入算式

18、、驗(yàn)算、結(jié)束游戲),1個(gè)編輯框(輸入算式),一個(gè)進(jìn)度條和一個(gè)下拉式按鈕(用于選擇難度級(jí)別),接著根據(jù)屬性對(duì)以上所添加的控件進(jìn)行屬性修改,主要進(jìn)行重命名,以便編輯源代碼的時(shí)候區(qū)分,另外對(duì)圖像的處理除了對(duì)其進(jìn)行重命名外還要對(duì)其添加位圖。通過(guò)插入-資源-Bitmap加載圖片,圖片通過(guò)拷貝和復(fù)制等操作加載完成。加載完成的圖片在對(duì)應(yīng)的工作區(qū)可以找到,選中對(duì)其名字進(jìn)行修改。</p><p> ?。╟)接著對(duì)以上添加的控件建立

19、類(lèi)向?qū)?。主要有Add Function、Add Variable和Edit Code這三項(xiàng)的添加。</p><p>  (d)根據(jù)流程圖在類(lèi)的原文件中逐一添加實(shí)現(xiàn)各個(gè)模塊其功能所需要的各種函數(shù),并添加相應(yīng)的源代碼,同時(shí)在頭文件中添加對(duì)各種函數(shù)及變量的聲明。</p><p> ?。╡)對(duì)編譯好的程序進(jìn)行保存,開(kāi)始進(jìn)行調(diào)試,邊調(diào)試邊根據(jù)報(bào)錯(cuò)對(duì)原程序進(jìn)行修改,直至程

20、序不再報(bào)錯(cuò),并且可以實(shí)現(xiàn)預(yù)計(jì)的各種功能。</p><p><b>  4.2 界面設(shè)計(jì)</b></p><p>  界面設(shè)計(jì)主要是創(chuàng)建控件,在Resoure View選項(xiàng)卡中打開(kāi)Dialog資源組,雙擊IDD_ZHOUTONG_DIALOG,在右邊的窗口中顯示出待編輯的對(duì)話框。開(kāi)始擺放控件,包括編輯框和按鈕的創(chuàng)建。按鈕的創(chuàng)建以“1”為例進(jìn)行介紹,其他按鈕的創(chuàng)建可參照此

21、進(jìn)行操作。</p><p>  (a)在Controls的“編輯框”按鈕上單擊鼠標(biāo)左鍵,在對(duì)話框編輯窗口上合適的位置按下鼠標(biāo)左鍵并拖動(dòng)鼠標(biāo)畫(huà)出一個(gè)大小合適的編輯框。在編輯框上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇屬性選項(xiàng),此時(shí)彈出Edit屬性對(duì)話框,在該對(duì)話框中輸入ID屬性。 </p><p>  按照上面的操作過(guò)程編輯其他按鈕和編輯框等對(duì)象的屬性。</p><p>

22、  表4-1 各按鈕和編輯框等對(duì)象的屬性</p><p>  4.3 關(guān)鍵功能的實(shí)現(xiàn)</p><p>  a.發(fā)牌功能的實(shí)現(xiàn),首先,通過(guò)BOOL CDingluDlg::OnInitDialog()中,根據(jù)紙牌對(duì)應(yīng)的ID號(hào)加載紙牌,。利用函數(shù)加載了標(biāo)號(hào)1~10的十張紙牌和兩張背景紙牌。然后運(yùn)行代碼,即可在圖像框中得到四張鋪開(kāi)的紙牌。</p><p>  b.計(jì)時(shí)功能

23、的實(shí)現(xiàn),在CPoint24Dlg::OnTimer中通過(guò)m_progress.StepIt()設(shè)置是否超時(shí)。如果(m_progress.GetPos()>=100)代表游戲結(jié)束,用戶(hù)沒(méi)有時(shí)間進(jìn)行思考了,本輪游戲結(jié)束,在函數(shù)OnTimer()的作用下,會(huì)彈出對(duì)話“超時(shí)!”</p><p>  c.計(jì)算功能的實(shí)現(xiàn),對(duì)于輸入結(jié)果的驗(yàn)算,主要是通過(guò)函數(shù)來(lái)確定運(yùn)算式各符號(hào)優(yōu)先級(jí)和最終計(jì)算出輸入算式的結(jié)果。對(duì)于編輯框中

24、輸入的表達(dá)式進(jìn)行計(jì)算,借助于Str=Left+Middle+Right;將有優(yōu)先級(jí)差別同時(shí)表達(dá)式傳送到SubCompute()函數(shù)中,最終計(jì)算出輸入到編輯框中的表達(dá)式結(jié)果Result,并將其返回。</p><p>  d.驗(yàn)算功能的實(shí)現(xiàn),在規(guī)定的時(shí)間內(nèi)輸入算式進(jìn)行驗(yàn)算,根據(jù)不同的情況會(huì)出現(xiàn)不同的對(duì)話框。有以下四種情況:如果用戶(hù)沒(méi)在輸入算式中輸入算式,直接按“驗(yàn)算”按鈕,如果輸入的數(shù)字與給出的不符或者符號(hào)不合法,會(huì)

25、彈出“內(nèi)部錯(cuò)誤!”的提示對(duì)話框;如果輸入的數(shù)字與四張牌相符、字符亦合法但是答案不正確,會(huì)彈出“錯(cuò)誤!”;如果輸入算式經(jīng)運(yùn)算后所得答案正確,則會(huì)彈出“正確!”。</p><p>  e.計(jì)分功能的實(shí)現(xiàn),當(dāng)用戶(hù)在每局游戲結(jié)束后,如果沒(méi)有計(jì)算出正確結(jié)果,則會(huì)在歷史記錄中顯示1題 錯(cuò)誤;如果計(jì)算出了正確結(jié)果,則會(huì)在記錄中顯示1題正確并顯示一個(gè)0~100之間的整數(shù)值。用戶(hù)最終得分的確定是由其選擇的游戲級(jí)別和游戲所花費(fèi)時(shí)間長(zhǎng)

26、短來(lái)確定的。</p><p><b>  5 測(cè)試</b></p><p><b>  5.1 測(cè)試方案</b></p><p>  測(cè)試過(guò)程中,由于既涉及到紙牌點(diǎn)數(shù)和運(yùn)算符,又會(huì)涉及到運(yùn)算式結(jié)果,于是相應(yīng)地會(huì)顯示出四種結(jié)果,(a)如果玩家在編輯框中沒(méi)有輸入任何數(shù)字和算符而直接按下了“驗(yàn)算”按鈕,則會(huì)彈出“內(nèi)部錯(cuò)誤!”的提

27、示對(duì)話框。(b)如果玩家輸入的數(shù)字與撲克牌給出的數(shù)字不符合,則會(huì)彈出“內(nèi)部錯(cuò)誤!”的提示對(duì)話框。(c)如果玩家輸入的數(shù)字與四張牌相符、字符亦合法但是計(jì)算結(jié)果不為24,會(huì)彈出“內(nèi)部錯(cuò)誤!”的提示對(duì)話框并在表達(dá)式編輯框中顯示“錯(cuò)誤!”(d)如果玩家輸入算式經(jīng)運(yùn)算后所得答案正確,則會(huì)在編輯表達(dá)式框中顯示“正確!”</p><p><b>  5.2 測(cè)試結(jié)果</b></p><

28、p><b>  (a)進(jìn)入游戲界面</b></p><p><b>  圖5-1 游戲界面</b></p><p>  說(shuō)明:本界面為游戲初始界面,默認(rèn)難度級(jí)別為中級(jí)。</p><p><b>  (b)發(fā)牌</b></p><p><b>  圖5-2 發(fā)牌界

29、面</b></p><p>  說(shuō)明:點(diǎn)擊“發(fā)牌”按鈕,自動(dòng)發(fā)牌,計(jì)時(shí)進(jìn)度條開(kāi)始滾動(dòng)。</p><p> ?。╟)不輸入驗(yàn)算公式界面</p><p><b>  圖5-3 錯(cuò)誤界面</b></p><p>  說(shuō)明:當(dāng)不輸入驗(yàn)算公式時(shí),游戲界面會(huì)顯示錯(cuò)誤的提示。</p><p><

30、;b> ?。╠)輸入驗(yàn)算公式</b></p><p>  圖5-4 輸入算式界面</p><p>  圖5-5正確輸出界面</p><p>  圖5-6 錯(cuò)誤輸出界面</p><p>  說(shuō)明:點(diǎn)擊輸入算式后耗時(shí)標(biāo)識(shí)停止,在旁邊的輸入框中輸入算式后點(diǎn)擊驗(yàn)算,正確或錯(cuò)誤的界面會(huì)顯示</p><p>  

31、(e)沒(méi)有來(lái)的及輸入表達(dá)式,超過(guò)限制時(shí)間,頁(yè)面顯示為</p><p>  圖5-7 超時(shí)輸出界面</p><p>  說(shuō)明:.如果在規(guī)定的時(shí)間內(nèi),玩家沒(méi)有點(diǎn)擊驗(yàn)算按鈕,則會(huì)彈出“內(nèi)部錯(cuò)誤”的窗口。 </p><p><b>  6.小結(jié)</b></p><p>  這次課程設(shè)計(jì),還是像往常一樣,先由班長(zhǎng)進(jìn)行分組,每個(gè)小組

32、完成一個(gè)任務(wù)。這次我分到的學(xué)習(xí)任務(wù)是完成二十四點(diǎn)游戲軟件開(kāi)發(fā)的編程。由于沒(méi)有接觸過(guò)游戲編程,一看到這個(gè)題目我就懵了。但是課程設(shè)計(jì)還要繼續(xù),我先試著從網(wǎng)上搜尋我所需要的資料,可網(wǎng)上資料比較零散,在老師的提醒下,我去圖書(shū)館找到了我所需要的。書(shū)中一些案例和我所要做的課程設(shè)計(jì)類(lèi)似,經(jīng)過(guò)自己知識(shí)上的補(bǔ)充和同組成員的協(xié)助,我順利的完成了這次課程設(shè)計(jì)。</p><p>  課程設(shè)計(jì)是本科學(xué)習(xí)階段一次非常難得的理論與實(shí)際相結(jié)合的

33、機(jī)會(huì),通過(guò)這次比較完整的一個(gè)程序的設(shè)計(jì),我擺脫了單純的理論知識(shí)學(xué)習(xí)狀態(tài),和實(shí)際設(shè)計(jì)的結(jié)合鍛煉了我的綜合運(yùn)用所學(xué)的基礎(chǔ)知識(shí),解決實(shí)際問(wèn)題的能力,同時(shí)也提高我查閱文獻(xiàn)資料、對(duì)程序整體的把握等其他能力水平,而且通過(guò)對(duì)整體的掌控,對(duì)局部的取舍,以及對(duì)細(xì)節(jié)的斟酌處理,都使我的能力得到了鍛煉,經(jīng)驗(yàn)得到了豐富。這是我們都希望看到的也正是我們進(jìn)行課程設(shè)計(jì)的目的所在。雖然設(shè)計(jì)內(nèi)容繁多,過(guò)程繁瑣但我的收獲卻更加豐富。各種組件的運(yùn)用,各種算法的應(yīng)用,各種控件

34、的利用我都是隨著設(shè)計(jì)的不斷深入而不斷熟悉并逐步掌握的。和老師以及同學(xué)的溝通交流更使我對(duì)程序整體的規(guī)劃與設(shè)計(jì)有了新的認(rèn)識(shí)也對(duì)自己提出了新的要求。 </p><p>  根據(jù)我在實(shí)習(xí)中遇到得問(wèn)題,我將在以后的學(xué)習(xí)過(guò)程中注意以下幾點(diǎn):1、認(rèn)真上好專(zhuān)業(yè)實(shí)驗(yàn)課,多在實(shí)踐中鍛煉自己。2、寫(xiě)程序的過(guò)程中要考慮周到,嚴(yán)密。3、在做設(shè)計(jì)的時(shí)候要有信心,有耐心,切勿浮躁。4、認(rèn)真的學(xué)習(xí)課本知識(shí),掌握課本中的知識(shí)點(diǎn),并在此基

35、礎(chǔ)上學(xué)會(huì)靈活運(yùn)用。5、在課余時(shí)間里多寫(xiě)程序,熟練掌握在調(diào)試程序的過(guò)程中所遇到的常見(jiàn)錯(cuò)誤,以便能節(jié)省調(diào)試程序的時(shí)間。</p><p>  課程設(shè)計(jì)不僅能提高我們對(duì)所學(xué)知識(shí)的綜合運(yùn)用能力,全面檢查并掌握所學(xué)的內(nèi)容,還讓我懂得怎樣把理論運(yùn)用到實(shí)際,在實(shí)踐中遇到問(wèn)題怎樣用理論解決。在上機(jī)調(diào)試的過(guò)程中,我對(duì)數(shù)據(jù)結(jié)構(gòu)這一門(mén)課所學(xué)的知識(shí)有了更深入的掌握和理解,鞏固了理論教學(xué)所學(xué)到的知識(shí),擴(kuò)展了我的編程思想。</p>

36、<p>  順利如期的完成本次課程設(shè)計(jì)給了我很大的信心,但是也讓多不足的地方,學(xué)習(xí)其實(shí)就是一個(gè)不斷完善的過(guò)程,正視自己的不足之處,在以后的工作和學(xué)習(xí)中不斷的彌補(bǔ)這些不足之處,在以后的生活中也要保持同樣的態(tài)度,不斷的完善自己。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]譚浩強(qiáng).C++程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版

37、社,2012. </p><p>  [2]劉弘,劉希玉.面向?qū)ο蟪绦蛟O(shè)計(jì)——VC++6.0與基于ACIS的幾何造型[M].北京:北京郵電大學(xué)出版社,2005.</p><p>  [3]楊正華,張秋生.Visual C++游戲編程導(dǎo)學(xué)[M].北京:清華大學(xué)出版社,2004.</p><p>  [4]譚浩強(qiáng).C++程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第二版)[M].北京:清華

38、大學(xué)出版社,2012.</p><p>  [5]肖永亮.Visual C++游戲編程基礎(chǔ)[M].北京:電子工業(yè)出版社,2005.</p><p>  [6]肖宏偉.Visual C++實(shí)效編程百例[M].北京:人民郵電出版社,2004.</p><p>  [7]陳清華.Visual C++課程設(shè)計(jì)案例精選與編程指導(dǎo)[M].南京:東南大學(xué)出版社,2004.<

39、/p><p><b>  附 錄</b></p><p><b>  附錄1 源程序清單</b></p><p>  // Point24Dlg.cpp : implementation file</p><p>  // Download by http://www.codefans.net&l

40、t;/p><p>  #include "stdafx.h"</p><p>  #include "Point24.h"</p><p>  #include "Point24Dlg.h"</p><p>  #ifdef _DEBUG</p><p>  #d

41、efine new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = __FILE__;</p><p><b>  #endif</b></p><p>  /////////////////////////////////

42、////////////////////////////////////////////</p><p>  // CAboutDlg dialog used for App About</p><p>  class CAboutDlg : public CDialog</p><p><b>  {</b></p><p

43、><b>  public:</b></p><p>  CAboutDlg();</p><p>  // Dialog Data</p><p>  //{{AFX_DATA(CAboutDlg)</p><p>  enum { IDD = IDD_ABOUTBOX };</p><p&g

44、t;  //}}AFX_DATA</p><p>  // ClassWizard generated virtual function overrides</p><p>  //{{AFX_VIRTUAL(CAboutDlg)</p><p>  protected:</p><p>  virtual void DoDataExchan

45、ge(CDataExchange* pDX); // DDX/DDV support</p><p>  //}}AFX_VIRTUAL</p><p>  // Implementation</p><p>  protected:</p><p>  //{{AFX_MSG(CAboutDlg)</p><p&g

46、t;  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  };</b></p><p>  CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)</p><p><b>  {</b><

47、;/p><p>  //{{AFX_DATA_INIT(CAboutDlg)</p><p>  //}}AFX_DATA_INIT</p><p><b>  }</b></p><p>  void CAboutDlg::DoDataExchange(CDataExchange* pDX)</p><

48、p><b>  {</b></p><p>  CDialog::DoDataExchange(pDX);</p><p>  //{{AFX_DATA_MAP(CAboutDlg)</p><p>  //}}AFX_DATA_MAP</p><p><b>  }</b></p>

49、;<p>  BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CAboutDlg)</p><p>  // No message handlers</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MA

50、P()</p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CPoint24Dlg dialog</p><p>  CPoint24Dlg::CPoint24Dlg(CWnd* pParent /*=NULL*/)&

51、lt;/p><p>  : CDialog(CPoint24Dlg::IDD, pParent)</p><p><b>  {</b></p><p>  //{{AFX_DATA_INIT(CPoint24Dlg)</p><p>  m_inputs = _T("");</p><

52、;p>  //}}AFX_DATA_INIT</p><p>  // Note that LoadIcon does not require a subsequent DestroyIcon in Win32</p><p>  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);</p><p>  m_hI

53、con = AfxGetApp()->LoadIcon(IDR_MAINFRAME);</p><p><b>  //初始化變量</b></p><p>  m_number1=m_number2=m_number3=m_number4=0;</p><p>  m_pattern1=m_pattern2=m_pattern3=m_pa

54、ttern4=129;</p><p><b>  Step=500;</b></p><p>  m_score=0;</p><p>  m_factor=4;</p><p><b>  count=0;</b></p><p>  //設(shè)置列表框列屬性</p&g

55、t;<p>  lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;</p><p>  lvItem.state = 0; </p><p>  lvItem.stateMask = 0; </p><p>  lvItem.iImage = 0;</p><p>&

56、lt;b>  }</b></p><p>  void CPoint24Dlg::DoDataExchange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(pDX);</p><p>  //{{AF

57、X_DATA_MAP(CPoint24Dlg)</p><p>  DDX_Control(pDX, IDC_LIST, m_list);</p><p>  DDX_Control(pDX, IDC_PROGRESS, m_progress);</p><p>  DDX_Control(pDX, IDC_COMBO, m_combo);</p>&

58、lt;p>  DDX_Control(pDX, IDC_EDIT1, m_input);</p><p>  DDX_Text(pDX, IDC_EDIT1, m_inputs);</p><p>  DDV_MaxChars(pDX, m_inputs, 15);</p><p>  //}}AFX_DATA_MAP</p><p>

59、<b>  }</b></p><p>  BEGIN_MESSAGE_MAP(CPoint24Dlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CPoint24Dlg)</p><p>  ON_WM_SYSCOMMAND()</p><p>  ON_WM_PAINT()</p&g

60、t;<p>  ON_WM_QUERYDRAGICON()</p><p>  ON_BN_CLICKED(IDC_START, OnStart)</p><p>  ON_BN_CLICKED(IDC_INPUT, OnInput)</p><p>  ON_BN_CLICKED(IDC_CALC, OnCalc)</p><p&

61、gt;  ON_CBN_SELCHANGE(IDC_COMBO, OnSelchangeCombo)</p><p>  ON_WM_TIMER()</p><p>  ON_COMMAND(IDD_ABOUT, OnAbout)</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()<

62、;/p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CPoint24Dlg message handlers</p><p>  BOOL CPoint24Dlg::OnInitDialog()</p>&l

63、t;p><b>  {</b></p><p>  CDialog::OnInitDialog();</p><p>  // Add "About..." menu item to system menu.</p><p>  // IDM_ABOUTBOX must be in the system command

64、 range.</p><p>  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);</p><p>  ASSERT(IDM_ABOUTBOX < 0xF000);</p><p>  CMenu* pSysMenu = GetSystemMenu(FALSE);</p><p>

65、;  if (pSysMenu != NULL)</p><p><b>  {</b></p><p>  CString strAboutMenu;</p><p>  strAboutMenu.LoadString(IDS_ABOUTBOX);</p><p>  if (!strAboutMenu.IsEmpty

66、())</p><p><b>  {</b></p><p>  pSysMenu->AppendMenu(MF_SEPARATOR);</p><p>  pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);</p><p><b&

67、gt;  }</b></p><p><b>  }</b></p><p>  // Set the icon for this dialog. The framework does this automatically</p><p>  // when the application's main window i

68、s not a dialog</p><p>  SetIcon(m_hIcon, TRUE);// Set big icon</p><p>  SetIcon(m_hIcon, FALSE);// Set small icon</p><p>  // TODO: Add extra initialization here</p><

69、;p><b>  //設(shè)置組合框選項(xiàng)</b></p><p>  m_combo.InsertString(0,"高級(jí)");</p><p>  m_combo.InsertString(1,"中級(jí)");</p><p>  m_combo.InsertString(2,"低級(jí)"

70、);</p><p>  m_combo.SetCurSel(1);</p><p><b>  //設(shè)置記錄條</b></p><p>  m_progress.SetRange(1,100);</p><p>  m_progress.SetStep(2);</p><p>  m_progr

71、ess.SetPos(0);</p><p><b>  //初始化分?jǐn)?shù)</b></p><p>  SetDlgItemText(IDC_CUR_SCORE,"0");</p><p>  //設(shè)置列表框列屬性</p><p>  LV_COLUMN lvColumn;</p><

72、;p>  lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;</p><p>  lvColumn.fmt = LVCFMT_CENTER;</p><p>  lvColumn.cx = 52;</p><p>  //設(shè)置列表框列標(biāo)題</p><p> 

73、 lvColumn.iSubItem = 0;</p><p>  lvColumn.pszText = "題數(shù)";</p><p>  m_list.InsertColumn(0, &lvColumn);</p><p>  lvColumn.iSubItem = 1;</p><p>  lvColumn.ps

74、zText = "對(duì)錯(cuò)";</p><p>  m_list.InsertColumn(1, &lvColumn);</p><p>  return TRUE; // return TRUE unless you set the focus to a control</p><p><b>  }</b><

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

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

77、lt;/p><p>  CDialog::OnSysCommand(nID, lParam);</p><p><b>  }</b></p><p><b>  }</b></p><p>  // If you add a minimize button to your dialog, you wi

78、ll need the code below</p><p>  // to draw the icon. For MFC applications using the document/view model,</p><p>  // this is automatically done for you by the framework.</p><p> 

79、 void CPoint24Dlg::OnPaint() </p><p><b>  {</b></p><p>  CPaintDC pDC(this); // device context for painting</p><p>  if (IsIconic())</p><p><b>  {<

80、/b></p><p>  SendMessage(WM_ICONERASEBKGND, (WPARAM) pDC.GetSafeHdc(), 0);</p><p>  // 使圖標(biāo)處于客戶(hù)矩形的中央</p><p>  int cxIcon = GetSystemMetrics(SM_CXICON);</p><p>  int c

81、yIcon = 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.He

82、ight() - cyIcon + 1) / 2;</p><p><b>  // 畫(huà)圖標(biāo)</b></p><p>  pDC.DrawIcon(x, y, m_hIcon);</p><p><b>  }</b></p><p><b>  else</b></p&

83、gt;<p><b>  {</b></p><p><b>  //顯示撲克牌</b></p><p>  CRect rect;</p><p>  CBitmap card1,card2,card3,card4,*OldBitMap;</p><p>  CDC *dc,dcMe

84、m;</p><p>  dc=GetDC();</p><p>  dcMem.CreateCompatibleDC(&pDC);</p><p>  card1.LoadBitmap(m_pattern1);</p><p>  OldBitMap=dcMem.SelectObject(&card1);</p>

85、<p>  dc->BitBlt(50,30,BitmapW,BitmapH,</p><p>  &dcMem,0,0,SRCCOPY);</p><p>  dcMem.SelectObject(OldBitMap);</p><p>  DeleteObject(&card1);</p><p>  

86、card2.LoadBitmap(m_pattern2);</p><p>  OldBitMap=dcMem.SelectObject(&card2);</p><p>  dc->BitBlt(130,30,BitmapW,BitmapH,</p><p>  &dcMem,0,0,SRCCOPY);</p><p>

87、;  dcMem.SelectObject(OldBitMap);</p><p>  DeleteObject(&card2);</p><p>  card3.LoadBitmap(m_pattern3);</p><p>  OldBitMap=dcMem.SelectObject(&card3);</p><p>  

88、dc->BitBlt(210,30,BitmapW,BitmapH,</p><p>  &dcMem,0,0,SRCCOPY);</p><p>  dcMem.SelectObject(OldBitMap);</p><p>  DeleteObject(&card3);</p><p>  card4.LoadBi

89、tmap(m_pattern4);</p><p>  OldBitMap=dcMem.SelectObject(&card4);</p><p>  dc->BitBlt(290,30,BitmapW,BitmapH,</p><p>  &dcMem,0,0,SRCCOPY);</p><p>  dcMem.Sel

90、ectObject(OldBitMap);</p><p>  DeleteObject(&card4);</p><p>  dcMem.DeleteDC();</p><p>  CDialog::OnPaint();</p><p><b>  }</b></p><p><b

91、>  }</b></p><p>  // The system calls this to obtain the cursor to display while the user drags</p><p>  // the minimized window.</p><p>  HCURSOR CPoint24Dlg::OnQueryDrag

92、Icon()</p><p><b>  {</b></p><p>  return (HCURSOR) m_hIcon;</p><p><b>  }</b></p><p><b>  //發(fā)牌</b></p><p>  void CPoint

93、24Dlg::OnStart() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  m_progress.SetPos(0);</p><p>  m_combo.Enable

94、Window(FALSE);</p><p>  m_number1=((double)rand()/(double)RAND_MAX)*9+1;</p><p>  m_number2=((double)rand()/(double)RAND_MAX)*9+1;</p><p>  m_number3=((double)rand()/(double)RAND_MA

95、X)*9+1;</p><p>  m_number4=((double)rand()/(double)RAND_MAX)*9+1;</p><p>  m_pattern1=130+m_number1;</p><p>  m_pattern2=143+m_number2;</p><p>  m_pattern3=156+m_numbe

96、r3;</p><p>  m_pattern4=169+m_number4;</p><p>  m_input.SetReadOnly(TRUE);</p><p>  if(m_pattern4>172) m_pattern4+=7;</p><p>  UpdateData(FALSE);</p><p>

97、;  Invalidate(FALSE);</p><p>  SetTimer(1, Step, NULL);</p><p>  CWnd *pWnd=GetDlgItem(IDC_CALC);</p><p>  pWnd->EnableWindow(TRUE);</p><p>  pWnd=GetDlgItem(IDC_INP

98、UT);</p><p>  pWnd->EnableWindow(TRUE);</p><p><b>  }</b></p><p><b>  //輸入計(jì)算式</b></p><p>  void CPoint24Dlg::OnInput() </p><p>&

99、lt;b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  m_input.SetReadOnly(FALSE);</p><p>  KillTimer(TRUE);</p><p><b>

100、  }</b></p><p><b>  //計(jì)算</b></p><p>  void CPoint24Dlg::OnCalc() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handle

101、r code here</p><p>  UpdateData(TRUE);</p><p>  int result = m_expression.ChangeExpression(m_inputs);</p><p>  if (result<0)</p><p><b>  {</b></p>

102、<p>  long result = m_expression.Value(m_Result);</p><p>  if (result == DIVISION_BY_0)</p><p>  AfxMessageBox("除數(shù)不能為零!");</p><p><b>  }</b></p>

103、<p><b>  else </b></p><p><b>  {</b></p><p>  AfxMessageBox(_T("內(nèi)部錯(cuò)誤!"));</p><p><b>  }</b></p><p>  m_inputs.Empty()

104、;</p><p>  if(m_Result==24)</p><p><b>  {</b></p><p>  m_inputs="正確!";</p><p>  m_score+=m_factor;</p><p>  CString str;</p>&

105、lt;p>  str.Format("%d",m_score);</p><p>  SetDlgItemText(IDC_CUR_SCORE,str);</p><p><b>  }</b></p><p><b>  else</b></p><p>  m_inpu

106、ts="錯(cuò)誤!";</p><p><b>  char s;</b></p><p><b>  count+=1;</b></p><p>  wsprintf(&s,"%d",count);</p><p>  lvItem.iItem = co

107、unt-1;</p><p>  lvItem.iSubItem = 0;</p><p>  lvItem.pszText = &s;</p><p>  m_list.InsertItem(&lvItem);</p><p>  m_list.SetItemText(count-1, 1, m_inputs);</p

108、><p>  UpdateData(FALSE);</p><p>  m_inputs=_T("");</p><p>  //FirstResult=SecondResult=0;</p><p>  //flag='a';</p><p>  KillTimer(TRUE);&

109、lt;/p><p>  m_combo.EnableWindow(TRUE);</p><p>  CWnd *pWnd=GetDlgItem(IDC_CALC);</p><p>  pWnd->EnableWindow(FALSE);</p><p>  pWnd=GetDlgItem(IDC_INPUT);</p>&l

110、t;p>  pWnd->EnableWindow(FALSE);</p><p><b>  }</b></p><p><b>  //選擇組合框選項(xiàng)</b></p><p>  void CPoint24Dlg::OnSelchangeCombo() </p><p><b&g

111、t;  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  int i=m_combo.GetCurSel();</p><p><b>  if(i=0)</b></p><p><b&g

112、t;  {</b></p><p><b>  Step=600;</b></p><p>  m_factor=2;</p><p><b>  }</b></p><p><b>  if(i=1)</b></p><p><b&g

113、t;  {</b></p><p><b>  Step=500;</b></p><p>  m_factor=4;</p><p><b>  }</b></p><p><b>  if(i=2)</b></p><p><b&g

114、t;  {</b></p><p><b>  Step=400;</b></p><p>  m_factor=6;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //

115、計(jì)時(shí)器處理函數(shù)</b></p><p>  void CPoint24Dlg::OnTimer(UINT nIDEvent) </p><p><b>  {</b></p><p>  // TODO: Add your message handler code here and/or call default</p>

116、<p>  m_progress.StepIt();</p><p>  if(m_progress.GetPos()>=100)</p><p><b>  {</b></p><p>  KillTimer(1);</p><p>  m_inputs=_T("超時(shí)!");&l

117、t;/p><p><b>  OnCalc();</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  CDialog::OnTimer(nIDEvent);</p><p><b>  

118、}</b></p><p>  void CPoint24Dlg::OnAbout() </p><p><b>  {</b></p><p>  // TODO: Add your command handler code here</p><p>  CAboutDlg dlg;</p>

溫馨提示

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

評(píng)論

0/150

提交評(píng)論