版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 24點(diǎn)游戲的開(kāi)發(fā)和實(shí)現(xiàn)課程設(shè)計(jì)
- 移動(dòng)平臺(tái)游戲軟件開(kāi)發(fā)課程設(shè)計(jì)說(shuō)明書(shū)
- 24點(diǎn)游戲課程設(shè)計(jì)報(bào)告
- 24點(diǎn)游戲課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--基于java的掃雷游戲軟件設(shè)計(jì)
- java課程設(shè)計(jì)--基于java的動(dòng)物換位游戲軟件設(shè)計(jì)
- 五子棋游戲軟件工程課程設(shè)計(jì)
- 游戲24點(diǎn)課程設(shè)計(jì)報(bào)告
- c程序課程設(shè)計(jì)報(bào)告(24點(diǎn)游戲)
- java課程設(shè)計(jì)--基于java的24點(diǎn)游戲
- 畢業(yè)論文——猜數(shù)游戲軟件的設(shè)計(jì)開(kāi)發(fā)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--24點(diǎn)游戲源代碼
- 游戲軟件-銷(xiāo)售協(xié)議
- 基于移動(dòng)設(shè)備的游戲軟件的研究與開(kāi)發(fā)(1)
- 校本教育游戲軟件的設(shè)計(jì)研究.pdf
- 基于移動(dòng)設(shè)備的游戲軟件的研究與開(kāi)發(fā).pdf
- 基于java的動(dòng)物換位游戲軟件設(shè)計(jì)
- 基于java的連連看游戲軟件設(shè)計(jì)
- 教學(xué)游戲軟件中的交互設(shè)計(jì)研究.pdf
- java課程設(shè)計(jì)-21點(diǎn)小游戲
評(píng)論
0/150
提交評(píng)論