![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/21/c76017d1-91e9-4e9f-91e3-4b473f8a4636/c76017d1-91e9-4e9f-91e3-4b473f8a4636pic.jpg)
![c++課程設(shè)計報告--幸運(yùn)52_第1頁](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/21/c76017d1-91e9-4e9f-91e3-4b473f8a4636/c76017d1-91e9-4e9f-91e3-4b473f8a46361.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p> 1.基本功能描述1</p><p><b> 2.設(shè)計思路1</b></p><p><b> 3.軟件設(shè)計3</b></p><p><b> 3.1設(shè)計步驟3</b><
2、/p><p><b> 3.2界面設(shè)計5</b></p><p> 3.3關(guān)鍵功能的實(shí)現(xiàn)7</p><p> 4.結(jié)論與心得體會8</p><p><b> 5.參考文獻(xiàn)9</b></p><p><b> 6.思考題9</b></
3、p><p><b> 7.附錄10</b></p><p> 7.1調(diào)試報告10</p><p> 7.2測試結(jié)果11</p><p> 7.3關(guān)鍵源代碼15</p><p><b> 幸運(yùn)52</b></p><p><b>
4、 1.基本功能描述</b></p><p> ?。?)首先點(diǎn)擊運(yùn)行程序,進(jìn)入到程序主界面。當(dāng)用戶在沒有點(diǎn)擊“開始”按鈕之前,點(diǎn)擊確定按鈕時,系統(tǒng)將彈出對話框,提示“請先單擊‘開始’按鈕開始選擇商品”;當(dāng)用戶在點(diǎn)擊“開始”按鈕后,即啟動計時器,系統(tǒng)將隨機(jī)給出一件商品并在界面上顯示商品的名稱,用戶即可根據(jù)這些信息對商品進(jìn)行估價。</p><p> ?。?)游戲開始后,在規(guī)定時間內(nèi)
5、,用戶在沒有輸入價格的情況下,單擊確定按鈕,系統(tǒng)將彈出對話框,提示“請先輸入商品價格,再進(jìn)行提交”;當(dāng)輸入估計的價格并單擊“確定”按鈕,系統(tǒng)將會彈出一個消息框用來提示估價是猜對啦、高啦或是低啦,在彈出的消息框中單擊“確定”按鈕后,即可以再次進(jìn)行估價。用戶對同一商品的估價的次數(shù)不得超過6次。超過6次后系統(tǒng)將彈出對話框提示,“你的猜測次數(shù)已經(jīng)大于6次,將自動進(jìn)入到下一件商品的估價!”,單擊“確定”按鈕后自動進(jìn)入下一件商品的估價。</p
6、><p> ?。?)游戲過程中,如果對當(dāng)前的成績不是很滿意,可以點(diǎn)擊重新開始,系統(tǒng)會重新啟動定時器,并將隨機(jī)給出一件商品并在界面上顯示商品的名稱,即可以重新對商品進(jìn)行估價,上一局游戲的成績將被清零。當(dāng)點(diǎn)擊“查看最高紀(jì)錄”按鈕,系統(tǒng)將彈出對話框,顯示“最多猜中次數(shù)”及“姓名”。</p><p> ?。?)當(dāng)計時結(jié)束時,系統(tǒng)將彈出對話框,提示“時間到了,游戲結(jié)束”,此時,如果用戶創(chuàng)造了最高紀(jì)錄,系
7、統(tǒng)將自動彈出對話框,用戶可在彈出的對話框內(nèi)輸入姓名,點(diǎn)擊確定,系統(tǒng)將保存最高紀(jì)錄并退出。</p><p><b> 2.設(shè)計思路</b></p><p> 首先利用MFC應(yīng)用程序向?qū)е谱骰緦υ捒虻慕缑?,按照自己預(yù)先設(shè)計的樣式進(jìn)行界面的制作。確定按鈕的個數(shù),位置;編輯框的個數(shù),位置,部分編輯框的屬性需設(shè)置為只讀;靜態(tài)文本框的提示文字、位置等等。其次,給每一個控件修
8、改ID以便于自己的識別。做好界面以后,可以按照如下的程序流程圖來編寫程序:</p><p> 主程序 子程序2</p><p> 圖1 幸運(yùn)52游戲程序流程圖</p><p> 程序設(shè)計的思路是按照程序需要實(shí)現(xiàn)的功能來進(jìn)行。第一,要確定哪些控件需要關(guān)聯(lián)消息響應(yīng)函數(shù),每一個函數(shù)該如何編寫,實(shí)現(xiàn)該功能的函數(shù)是否為MFC類庫中的函數(shù);
9、第二,要分清楚各函數(shù)之間的調(diào)用關(guān)系,以及函數(shù)的帶參數(shù)情況。第三,要區(qū)分哪些是基本功能,需要優(yōu)先實(shí)現(xiàn),哪些是附加功能,在基本功能之后實(shí)現(xiàn)。</p><p> 在對話框類頭文件中設(shè)定三個數(shù)組,分別用來存儲商品的圖片(Bitmap[12])、名稱(name[12])和價格(price[12]);在構(gòu)造函數(shù)中完成相應(yīng)的初始化,在初始化函數(shù)中設(shè)定計時器初值與范圍?!伴_始”按鈕關(guān)聯(lián)的函數(shù)中,啟動計時器,自動調(diào)用OnTime
10、r(),并產(chǎn)生一個隨機(jī)數(shù)num,作為商品名稱數(shù)組與圖片數(shù)組的下標(biāo),使界面上顯示對應(yīng)商品的名稱與圖片?!按_定”按鈕對應(yīng)的函數(shù)中,將用戶的估價與商品的真實(shí)價格進(jìn)行比較,高于、低于或等于均彈出對話框給出提示。在OnTimer()中實(shí)現(xiàn)進(jìn)度條的前進(jìn),當(dāng)計時結(jié)束后,取存取最高紀(jì)錄文本中的次數(shù)與本輪正確次數(shù)相比較,若本輪正確次數(shù)大于歷史成績,彈出一個對話框,要求用戶輸入自己的姓名,并將該次數(shù)存儲在score.txt文件中,姓名則存儲在name.tx
11、t文件中。在“查看最高紀(jì)錄”按鈕關(guān)聯(lián)的函數(shù)中,打開上述兩個文檔,按設(shè)定的格式輸出文件里面的內(nèi)容。在“重新開始”按鈕對應(yīng)函數(shù)中,重新設(shè)置進(jìn)度條初值為0,清零上一局游戲的成績并調(diào)用“開始”按鈕所關(guān)聯(lián)的函數(shù)。如果用戶希望結(jié)束游戲則可以單擊“取消”按鈕,游戲結(jié)束。</p><p><b> 3.軟件設(shè)計</b></p><p><b> 3.1設(shè)計步驟</
12、b></p><p> ?。?)打開Microsoft Visual C++ 6.0應(yīng)用程序,在File菜單下選擇NEW,創(chuàng)建MFC AppWizard(exe)工程,鍵入的工程名為tanglei,在應(yīng)用程序類型中選擇基本對話框,其他屬性直接選用默認(rèn),單擊“確定”完成對話框的創(chuàng)建。最后彈出新建工程信息對話框,該對話框列出了關(guān)于新建的應(yīng)用程序項(xiàng)目文件的相關(guān)信息。單擊確定,應(yīng)用程序向?qū)械墓ぷ骶腿客瓿闪?,?/p>
13、時向?qū)橛脩羯闪艘粋€可執(zhí)行的應(yīng)用程序框架。</p><p> 圖2 選擇基于對話框,其他默認(rèn),單擊“完成”</p><p> 初始化界面,在對話框中添加所需的控件,如按鈕,文本,編輯框,菜單,Picture控件,進(jìn)度條,將它們放置在相應(yīng)的位置上。根據(jù)需要對其屬性進(jìn)行修改,添加對應(yīng)的控件變量,并建立類向?qū)?,在相?yīng)的地方添加響應(yīng)函數(shù)。</p><p> 圖3
14、 添加控件并設(shè)定屬性</p><p> (3)在實(shí)現(xiàn)文件.cpp中添加實(shí)現(xiàn)功能所需要的各種函數(shù),并添加相應(yīng)的代碼,同時在頭文件中添加對各種函數(shù)及變量的聲明。</p><p> ?。?)對完成后的程序進(jìn)行調(diào)試,修改其中的錯誤,直到程序運(yùn)行不再報錯,并能夠?qū)崿F(xiàn)所要求的各項(xiàng)功能。當(dāng)遇到不懂的報錯可以用英語電子詞典翻譯錯誤以幫助分析。</p><p><b>
15、 3.2界面設(shè)計</b></p><p> ?。?)初始化界面如下所示:</p><p> 圖4 主界面初始顯示圖</p><p> ?。?)主對話框控件設(shè)置如下:</p><p> 表1 主界面對話框控件表</p><p> (3)主界面按鈕響應(yīng)函數(shù)表如下:</p><p&g
16、t; 表2 主界面按鈕響應(yīng)函數(shù)表</p><p> ?。?)打破紀(jì)錄對話框界面如下所示:</p><p> 圖5 打破紀(jì)錄對話框顯示圖</p><p> (5)打破紀(jì)錄對話框控件設(shè)置如下:</p><p> 表3 輸入姓名對話框控件表</p><p> 3.3關(guān)鍵功能的實(shí)現(xiàn)</p>&
17、lt;p> (1)輸入焦點(diǎn)的控制:當(dāng)運(yùn)行程序時或比較價格后應(yīng)該設(shè)置焦點(diǎn)使得光標(biāo)在在估價輸入框上,在OnBegin()函數(shù)中采用GetDlgItem(IDC_PRICE)->SetFocus()實(shí)現(xiàn)。這樣每一次按下“確定”按鈕都會將焦點(diǎn)設(shè)定在估價輸入編輯框內(nèi)。</p><p> (2)設(shè)計初始界面:首先生成一個基于對話框的基本框架,再添加控件例如按鈕,編輯框,位圖,進(jìn)度條等,并設(shè)置屬性,然后為相關(guān)控
18、件關(guān)聯(lián)變量,為具有操作功能的按鈕添加必要的消息響應(yīng)函數(shù)。</p><p> ?。?)隨機(jī)顯示某一種商品:首先引入13張位圖資源,ID號設(shè)置為IDB_BITMAP0到IDB_BITMAP12,其中圖像控件的ID設(shè)為IDB_BITMAP12,這樣在游戲未開始時即顯示該宣傳圖片。然后,在對話框類的聲明文件中定義三個數(shù)組,分別存儲商品的名稱、價格和圖片;接著在對話框類的構(gòu)造函數(shù)中為名稱和價格數(shù)組初始化,并采用LoadBi
19、tmap( )實(shí)現(xiàn)位圖的加載來完成圖片數(shù)組的初始化,并使同一商品在三個數(shù)組中對應(yīng)的下標(biāo)相同;利用srand(time(NULL));num=rad( )%12產(chǎn)生一個0到11的隨機(jī)數(shù),將此隨機(jī)數(shù)作為數(shù)組的下標(biāo),選擇所要選擇的商品的三種屬性。</p><p> ?。?)計時:游戲開始時在OnBegin()函數(shù)中調(diào)用SetTimer(1000,100,NULL)函數(shù)啟動計時器并主動調(diào)用OnTimer(UINT nID
20、Event)函數(shù)對進(jìn)度條進(jìn)行設(shè)置。其中SetTimer()函數(shù)第一個參數(shù)表示計時器的ID號,第二個參數(shù)表示時間步長,以毫秒為單位,本程序設(shè)定100ms為步長,每隔步長時間就發(fā)送一個WM_TIMER消息;收到此消息,程序會自動執(zhí)行OnTimer函數(shù),每執(zhí)行一次此函數(shù)就會讓進(jìn)度條前進(jìn)一步;設(shè)定進(jìn)度條共有300步,則游戲設(shè)定的總時間為30s。</p><p> ?。?)對估價的判斷與正確次數(shù)、錯誤次數(shù)的統(tǒng)計:取用戶輸入
21、估價與真實(shí)價格進(jìn)行比較,若估價與真實(shí)價格不符,則彈出提示消息框提示“高啦”還是“低啦”并使錯誤次數(shù)i加1,再比較i與6的大小,i≥6即一件商品的估價次數(shù)已達(dá)到六次,此時將i清零,并使猜錯次數(shù)的變量error加1,且前臺更新顯示;若估價與真實(shí)價格相等,則使正確次數(shù)j加1同時使錯誤次數(shù)i為0,接著調(diào)用OnBegin()函數(shù)顯示下一種商品。</p><p> ?。?)對歷史最高紀(jì)錄的處理:歷史最高紀(jì)錄不僅僅只是程序本次
22、運(yùn)行的最高紀(jì)錄,而應(yīng)該是程序以往運(yùn)行與本次運(yùn)行共同的歷史最高紀(jì)錄,若在程序中設(shè)定兩個變量用來存儲最多猜中次數(shù)與姓名,在退出程序時,變量會被消毀,因此實(shí)現(xiàn)不了此功能。為此,在工程文件夾中創(chuàng)建兩個文本文檔分別為score.txt與name.txt,分別用來存儲最高紀(jì)錄的次數(shù)和姓名。每輪游戲計時結(jié)束時將讀取score.txt中內(nèi)容與本輪正確次數(shù)j比較,若j大于其中內(nèi)容,便彈出一個對話框要求用戶輸入自己的名字,并將輸入的姓名替代name.txt
23、中的內(nèi)容,同時將j代替score.txt中的內(nèi)容。</p><p> (7)查看最高紀(jì)錄:當(dāng)用戶查看最高紀(jì)錄時,分別從score.txt和name.txt中讀取最高紀(jì)錄次數(shù)與姓名,在對話框中予以顯示。</p><p> (8)重新開始游戲:當(dāng)用戶重新開始游戲時,將變量i、j和error清零,對進(jìn)度條重新進(jìn)行設(shè)置,使其初值為0,再調(diào)用“開始”按鈕對應(yīng)的CTangleiDlg::OnBeg
24、in()函數(shù)。 </p><p><b> 4.結(jié)論與心得體會</b></p><p> 這次課程設(shè)計總的來說對我起到了很大的鍛煉作用,時間上來說還是比較緊張的,剛開始畫出程序流程圖還是比較輕松的。之后的兩天時間便是程序設(shè)計與調(diào)試了,雖然已經(jīng)學(xué)習(xí)過VC++語言,MFC編程這塊也講到了一些,但是課程學(xué)習(xí)距現(xiàn)在的課程設(shè)計有一段時間了,有些東西只是有些印象,當(dāng)真正用起來
25、的時候,還是有些不熟練,其間,有查閱了一些資料和課件PPT,主要是對控件該關(guān)聯(lián)什么類型的變量,以及這些變量該如何使用,對一些具有操作功能的按鈕關(guān)聯(lián)消息響應(yīng)函數(shù)后,如何編寫這些函數(shù)的實(shí)現(xiàn)代碼以及各個函數(shù)之間的調(diào)用是難點(diǎn)。系統(tǒng)提供的類的函數(shù)是相當(dāng)多的,想要把它們?nèi)颗缓笤陂_始編寫程序幾乎是不可能的。只能是用到哪個函數(shù)再去具體的了解它,這樣上手比較快,學(xué)習(xí)積極性也較高。</p><p> 這次的課程設(shè)計的題目是采
26、用抽簽的方式來選定的,當(dāng)選到幸運(yùn)52之后,自己對幸運(yùn)52還是有一點(diǎn)的了解的,而且本次的課程設(shè)計的要求也只是要實(shí)現(xiàn)基本的功能。剛開始做程序界面還是比較輕松的,在設(shè)置控件的ID號時,盡量用其英文名來設(shè)置,這樣識別起來很方便。之后,在對控件進(jìn)行關(guān)聯(lián)變量時,就有些犯難了,不知道該對這些控件關(guān)聯(lián)什么類型的變量,使用起來才比較方便,對一些具有操作功能的按鈕關(guān)聯(lián)消息響應(yīng)函數(shù)也是如此。首先就是看書了,花了一部分時間將以前學(xué)習(xí)C++的教材中的MFC部分看
27、了一下,將最基本的控件使用方法看完,比如編輯框,按鈕,picture控件,菜單等。</p><p> 在我看來,對游戲記錄的保存與讀取是另一大難點(diǎn),因?yàn)樯婕暗綄ξ募淖x寫等操作,這些函數(shù)平時聯(lián)系的較少,只能自己找一找手頭的資料,看幾個例子大概熟悉了它的基本用法,然后再開始編寫相應(yīng)的實(shí)現(xiàn)代碼。就這樣一點(diǎn)一點(diǎn)地完成了基本功能的設(shè)計,之后就是對程序的完善與修改了,如輸入焦點(diǎn)的控制、未點(diǎn)擊“開始”選擇商品或未輸入商品價
28、格等的錯誤提示。課程設(shè)計這幾天收獲了很多,課堂上學(xué)的東西基本上都用上了,其間也遇到了很多的問題,在解決這些問題的時候,也積累了很多經(jīng)驗(yàn),對MFC的控件添加變量更加熟練了,對于用到的函數(shù)也更了解了??傊约哼€是得到了很大的鍛煉,也收獲很多。</p><p><b> 5.參考文獻(xiàn)</b></p><p> [1]揣錦華.面向?qū)ο蟪绦蛟O(shè)計與VC++實(shí)踐.西安:西安電
29、子科技大學(xué)出版社,2005.</p><p> [2]譚浩強(qiáng).C++面向?qū)ο蟪绦蛟O(shè)計.北京:清華大學(xué)出版社,2006.</p><p> [3]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版).北京:清華大學(xué)出版社,2007.</p><p><b> 6.思考題</b></p><p> (1) 說明保存記錄文件信息的方法
30、,考慮是否還能用其他方法實(shí)現(xiàn)?</p><p> 答:在工程文件夾中創(chuàng)建兩個文本文檔分別為score.txt與name.txt,分別存儲最高紀(jì)錄的次數(shù)與姓名。每輪游戲計時結(jié)束時讀取score.txt中內(nèi)容與本輪正確次數(shù)j比較,若j大于其中內(nèi)容,便彈出一個對話框要求用戶輸入自己的名字,并將該名字替代name.txt中的內(nèi)容,同時將j代替score.txt中的內(nèi)容。</p><p> ?。?
31、) 說明商品名稱和商品圖片、商品價格一一對應(yīng)的關(guān)鍵部分?</p><p> 答:在對話框類的聲明文件中定義三個數(shù)組Bitmap[12]、name[12]、price[12],分別用來存儲商品的圖片、名稱和價格,接著在引入資源時候按照商品順序引入位圖資源,并且逐個命名位圖ID號;之后在對話框類的構(gòu)造函數(shù)中為商品名稱與價格數(shù)組初始化,并采用LoadBitmap()實(shí)現(xiàn)位圖的加載來完成圖片數(shù)組的初始化,并使同一商品在
32、三個數(shù)組中對應(yīng)的下標(biāo)相同。這樣,便將商品名稱和商品圖片、商品價格一一對應(yīng)起來。</p><p> (3) 如何在游戲未開始時顯示空白位圖?</p><p> 答:在位圖資源中插入一張空白位圖,再將“圖像”選為該空白位圖的屬性ID,初始化函數(shù)中使用LoadBitmap()函數(shù)調(diào)用該空白位圖。</p><p><b> 7.附錄</b>&l
33、t;/p><p><b> 7.1調(diào)試報告</b></p><p> (1)加載圖片的尺寸過大:剛開始在做好界面后,引入13張位圖資源,ID號設(shè)置為IDB_BITMAP0到IDB_BITMAP12,其中圖像控件的ID設(shè)為IDB_BITMAP12,發(fā)現(xiàn)加載的圖片尺寸過大,查過了設(shè)計界面的邊框很多,于是同時圖片處理工具,將圖片尺寸縮小大適合界面大小。</p>
34、<p> 未定義的錯誤:在調(diào)試的過程中會出現(xiàn)某些變量未定義(undeclared identifier),導(dǎo)致這種錯誤有可能是在對控件建立類向?qū)У臅r候沒有添加變量,也有可能是在添加代碼的時候變量名輸錯導(dǎo)致的;對變量建立類向?qū)У臅r候添加變量或者改正錯誤的變量名就能改正這種錯誤。</p><p> 變量申明的位置不對:調(diào)試過程中遇到了如下的問題,截圖如下,在對話框類的聲明文件中定義三個數(shù)組Bitmap
35、[12]的申明在//AFX_DATA(CTangleiDlg)的下面,導(dǎo)致在主界面建立類向?qū)r彈出窗口,顯示該錯誤,將Bitmap[12]的申明放在// Construction的下面,問題得到了解決。</p><p> 圖6 調(diào)試過程中變量申明的位置錯誤</p><p> (4)添加了打開文件的相關(guān)代碼后,編譯顯示相關(guān)語句沒有定義不能識別:這是由于忘了加頭文件;加上#include
36、 "fstream.h"后編譯成功。</p><p> ?。?)重新開始游戲后,顯示本輪正確次數(shù)為上輪正確次數(shù):沒有在“重新開始”按鈕的響應(yīng)函數(shù)中將本輪正確次數(shù)j清零;加上j=0;語句后正確。</p><p> ?。?)當(dāng)用戶打破記錄時,彈出對話框提示用戶輸入姓名,點(diǎn)擊確定后,再次運(yùn)行程序后點(diǎn)擊“查看最高紀(jì)錄”,紀(jì)錄不正確:用戶的名字沒有被保存下來,還是原先的值,在判斷
37、打破記錄語句(if(j>s))下面添加如下代碼即可:</p><p> fp=fopen("name.txt","w"); //打開name文件,指向文件頭</p><p> fprintf(fp,"%10s",s); //保存姓名</p><p> fclose(fp);
38、 //關(guān)閉文件</p><p><b> 7.2測試結(jié)果</b></p><p> 游戲開始直接點(diǎn)擊“確定”,顯示“請先單擊'開始'按鈕選擇商品!”。</p><p> 圖7 未選擇商品顯示圖</p><p> (2)商品顯示時直接點(diǎn)擊“確定”,顯示“請先輸入商品價格,再進(jìn)行提
39、交!”。</p><p> 圖8 未輸入商品估價顯示圖</p><p> ?。?)輸入估價大于商品價格,點(diǎn)擊“確定”,顯示“估價高嘍,再低點(diǎn)!”。</p><p> 圖9 估價過高顯示圖</p><p> ?。?)輸入估價小于商品價格,點(diǎn)擊“確定”,顯示“估價低嘍,再高點(diǎn)!”。</p><p> 圖10
40、 估價過低顯示圖 </p><p> ?。?)輸入估價等于商品價格,點(diǎn)擊“確定”,顯示“恭喜您猜對了!”</p><p> 圖11 估價正確顯示圖</p><p> (6)計時結(jié)束,自動彈出對話框,顯示“時間到了,游戲結(jié)束!”</p><p> 圖12 計時結(jié)束顯示圖</p><p> ?。?)當(dāng)估價次數(shù)超過
41、6次時,自動彈出對話框,顯示“你的猜測次數(shù)已經(jīng)大于6次,將自動進(jìn)入到下一件商品的估價!”,點(diǎn)擊“確定”后,自動進(jìn)入到下一件商品的估價。</p><p> 圖13 估價次數(shù)超過限制顯示圖</p><p> ?。?)當(dāng)本輪游戲打破歷史紀(jì)錄時,自動彈出對話框,要求用戶輸入姓名。</p><p> 圖14 打破紀(jì)錄彈出的對話框顯示圖</p><p
42、> ?。?)點(diǎn)擊“查看最高紀(jì)錄”,彈出對話框顯示最高猜中次數(shù)與姓名。</p><p> 圖15 查看最高紀(jì)錄顯示圖</p><p><b> 7.3關(guān)鍵源代碼</b></p><p><b> 變量聲明:</b></p><p> class CTangleiDlg : public
43、 CDialog</p><p><b> {</b></p><p> // Construction</p><p> CBitmap Bitmap[12]; //用來存放Bitmap圖</p><p> CString name[12]; //用于保存商品名稱</p><p>
44、 int num; //用于表示用隨機(jī)數(shù)產(chǎn)生的當(dāng)前商品的序號</p><p> int i; //目前錯誤次數(shù)</p><p> int error; //猜錯商品件數(shù)</p><p> int j; //當(dāng)輪正確次數(shù)</p><p> int price[12]; //用于保存商品的價格</p><
45、;p> int flag;//用來標(biāo)識是否開始</p><p><b> public:</b></p><p> CButtonm_yes;</p><p> CStringm_false;</p><p> CStringm_title;</p><p> CStrin
46、gm_true;</p><p> intm_price;</p><p><b> }</b></p><p> 構(gòu)造函數(shù)對變量的初始化</p><p> CTangleiDlg::CTangleiDlg(CWnd* pParent /*=NULL*/)</p><p> :
47、CDialog(CTangleiDlg::IDD, pParent)</p><p><b> {</b></p><p> m_false = _T("");</p><p> m_title = _T("");</p><p> m_true = _T("&q
48、uot;);</p><p> m_price = 0;</p><p> i=0;//每件商品猜錯次數(shù)初始化為0 </p><p> j=0;//正確次數(shù)初始化為0</p><p> error=0;//錯誤次數(shù)初始化為0</p><p> flag=0;//標(biāo)志先設(shè)為0</p><p&
49、gt; num=-1; //當(dāng)隨機(jī)數(shù)為-1表示沒有選擇商品</p><p> name[0]="帆布鞋";//商品名數(shù)組初始化</p><p> name[1]="單肩包";</p><p> name[2]="領(lǐng)帶";</p><p> name[3]="石
50、英表";</p><p> name[4]="太陽眼鏡";</p><p> name[5]="藍(lán)牙耳機(jī)";</p><p> name[6]="九陽豆?jié){機(jī)";</p><p> name[7]="學(xué)生計算器";</p><p
51、> name[8]="佳能單反相機(jī)";</p><p> name[9]="飛科剃須刀";</p><p> name[10]="李寧羽毛球拍";</p><p> name[11]="保溫杯";</p><p> price[0]=69;//
52、價格數(shù)組初始化</p><p> price[1]=168;</p><p> price[2]=138;</p><p> price[3]=538;</p><p> price[4]=188;</p><p> price[5]=100;</p><p> price[6]=3
53、99;</p><p> price[7]=49;</p><p> price[8]=4886;</p><p> price[9]=79;</p><p> price[10]=199;</p><p> price[11]=42;</p><p> Bitmap[0].L
54、oadBitmap(IDB_BITMAP0);//位圖數(shù)組初始化,加載位圖</p><p> Bitmap[1].LoadBitmap(IDB_BITMAP1);</p><p> Bitmap[2].LoadBitmap(IDB_BITMAP2);</p><p> Bitmap[3].LoadBitmap(IDB_BITMAP3);</p>
55、<p> Bitmap[4].LoadBitmap(IDB_BITMAP4);</p><p> Bitmap[5].LoadBitmap(IDB_BITMAP5);</p><p> Bitmap[6].LoadBitmap(IDB_BITMAP6);</p><p> Bitmap[7].LoadBitmap(IDB_BITMAP7);<
56、/p><p> Bitmap[8].LoadBitmap(IDB_BITMAP8);</p><p> Bitmap[9].LoadBitmap(IDB_BITMAP9);</p><p> Bitmap[10].LoadBitmap(IDB_BITMAP10);</p><p> Bitmap[11].LoadBitmap(IDB_BI
57、TMAP11);}</p><p> (3) 初始化函數(shù)對進(jìn)度條的設(shè)置</p><p> BOOL CTangleiDlg::OnInitDialog()</p><p><b> {</b></p><p> CDialog::OnInitDialog();</p><p> CPr
58、ogressCtrl* pProg =(CProgressCtrl*) GetDlgItem(IDC_PROGRESS1); </p><p> //設(shè)置指向進(jìn)度條的指針</p><p> pProg->SetRange(0, 300); //設(shè)置范圍為0~300</p><p> pProg->SetPos(0); //設(shè)置當(dāng)前位置為0</
59、p><p><b> }</b></p><p> (4) “開始”按鈕響應(yīng)的函數(shù)</p><p> void CTangleiDlg::OnBegin() </p><p><b> {</b></p><p> GetDlgItem(IDC_PRICE)->
60、;SetFocus();//程序最開始的時候聚焦到商品價格編輯框</p><p> m_true.Format("%d",j); </p><p> m_false.Format("%d",i); </p><p> srand(time (NULL)); //利用時間設(shè)置隨機(jī)種子</p><p&g
61、t; num=rand()%12; //產(chǎn)生一個0到11的隨機(jī)數(shù)</p><p> m_title.Format("%s",name[num]); //用來顯示商品名稱 </p><p> ((CStatic*)GetDlgItem(IDC_PICTURE))->SetBitmap(HBITMAP(Bitmap[num])); </p>&
62、lt;p> //用來顯示商品圖片</p><p> if(flag==0)</p><p><b> {</b></p><p> CProgressCtrl* pProg =(CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);</p><p> //設(shè)置指向進(jìn)度條的指針
63、</p><p> pProg->SetPos(0); //設(shè)置初始值為0</p><p> SetTimer(1000,100,NULL); //啟動計時器,自動調(diào)用OnTimer()函數(shù) </p><p> flag=1;//啟動定時器后將flag置1</p><p><b> }</b></p&
64、gt;<p> UpdateData(FALSE); </p><p><b> }</b></p><p> (5) “確定”按鈕響應(yīng)的函數(shù)</p><p> void CTangleiDlg::OnYes() </p><p><b> {</b></p>
65、;<p> UpdateData(TRUE); </p><p> if(num==-1) //當(dāng)用戶沒有點(diǎn)擊開始,選擇商品</p><p><b> {</b></p><p> MessageBox("請先單擊'開始'按鈕選擇商品!","錯誤",MB_OK)
66、;</p><p> GetDlgItem(IDC_PRICE)->SetFocus();//輸入焦點(diǎn)的控制</p><p><b> return;</b></p><p><b> } </b></p><p> int priceTemp=m_price; //獲取估價進(jìn)行判
67、斷</p><p> if(priceTemp==0) </p><p><b> {</b></p><p> MessageBox("請先輸入商品價格,再進(jìn)行提交!","錯誤",MB_OK);</p><p> GetDlgItem(IDC_PRICE)->Se
68、tFocus();</p><p><b> return;</b></p><p><b> }</b></p><p> if(priceTemp==price[num])//估價正確</p><p><b> {</b></p><p>
69、 MessageBox("恭喜您猜對了!","猜對了",MB_OK);//估價正確彈出對話框提示</p><p> j++;//答對次數(shù)加1</p><p> i=0;//該件商品答錯次數(shù)清零 </p><p> m_true.Format("%d",j);</p><p>
70、; m_false.Format("%d",error); </p><p> UpdateData(FALSE);//更新顯示</p><p> OnBegin();//開始下一件商品的估價</p><p><b> }</b></p><p> else if(priceTemp<
71、price[num])//估價低了</p><p><b> {</b></p><p> MessageBox("估價低嘍,再高點(diǎn)!","猜錯了",MB_OK); </p><p> //估價低了彈出對話框提示</p><p> m_price=0;//清零,方便下一
72、次價格的輸入</p><p> i++;//該件商品答錯次數(shù)加1</p><p> m_false.Format("%d",error);</p><p> UpdateData(FALSE);//前臺更新顯示</p><p><b> }</b></p><p>
73、 else //估價高了</p><p><b> {</b></p><p> MessageBox("估價高嘍,再低點(diǎn)!","猜錯了",MB_OK); </p><p> //估價高了彈出對話框提示 </p><p> m_price=0;//清零,方便下一
74、次價格的輸入</p><p> i++; //該件商品答錯次數(shù)加1</p><p> m_false.Format("%d",error);</p><p> UpdateData(FALSE);//前臺更新顯示</p><p><b> }</b></p><p&g
75、t; if(i==6) //錯誤次數(shù)大于6次時,自動進(jìn)入到下一件商品的估價</p><p><b> {</b></p><p> MessageBox("你的猜測次數(shù)已經(jīng)大于6次,將自動進(jìn)入到下一件商品的估價!");</p><p> GetDlgItem(IDC_PRICE)->SetFocus();
76、</p><p> i=0;//該件商品答錯次數(shù)清零</p><p> error++;//商品答錯件數(shù)加1</p><p> OnBegin();//開始下一一件商品的估價</p><p> m_false.Format("%d",error);</p><p> Update
77、Data(FALSE); //錯誤次數(shù)加1且前臺更新顯示</p><p><b> }</b></p><p> (6) “查看最高紀(jì)錄”按鈕響應(yīng)的函數(shù)</p><p> void CTangleiDlg::OnCheck() </p><p><b> {</b></p&g
78、t;<p> // TODO: Add your control notification handler code here</p><p> FILE*out;//指向文件的指針</p><p> out=fopen("score.txt","r");//打開文件,指向文件頭</p><p&
79、gt; char str1[10];//用于存貯紀(jì)錄的次數(shù)</p><p> fgets(str1,4,out);//從文件中獲取4個字符存到str1中</p><p> int s=atoi(str1);//將字符轉(zhuǎn)換為整型數(shù)據(jù)</p><p> CString s1;//創(chuàng)建CString對象</p>
80、<p> s1.Format("%d",s);//將整型次數(shù)s轉(zhuǎn)換為CString類型s1</p><p> out=fopen("name.txt","r");</p><p> char str2[20];//用于存貯記錄的姓名str2</p><p> fgets(
81、str2,20,out);</p><p> CString str;</p><p> str="最多猜中次數(shù)為: "+s1+"次;"+" 姓名: "+str2;</p><p> MessageBox(str,"最高紀(jì)錄",MB_OK);</p><p&
82、gt;<b> }</b></p><p> (7) “重新開始”按鈕響應(yīng)的函數(shù)</p><p> void CTangleiDlg::OnAgain() </p><p><b> { </b></p><p> i=0;j=0;//清除上一局記錄</p>&l
83、t;p> flag=0;//flag標(biāo)志清零</p><p> OnBegin() ;//調(diào)用OnBegin(),重新啟動定時器</p><p><b> }</b></p><p> (8) OnTimer(UINT nIDEvent)函數(shù)</p><p> void CTangleiDlg::O
84、nTimer(UINT nIDEvent) </p><p><b> {</b></p><p> // TODO: Add your message handler code here and/or call default</p><p> CDialog::OnTimer(nIDEvent);</p><p&g
85、t; if (nIDEvent == 1000) //判斷計時器</p><p><b> {</b></p><p> CProgressCtrl* pProg = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1); </p><p> //設(shè)置指向進(jìn)度條的指針</p><p&
86、gt; pProg->SetPos(pProg->GetPos()+1);//前進(jìn)一步</p><p> if(pProg->GetPos() >= 300) //判斷是否達(dá)到最大值</p><p><b> { </b></p><p> KillTimer(nIDEvent);
87、 //終止計時器</p><p> MessageBox("時間到了,游戲結(jié)束!","游戲結(jié)束",MB_OK); </p><p> //彈出對話框提示時間到了</p><p> FILE *out; //指向文件的指針</p><p
88、> out=fopen("score.txt","r"); //打開文件,指向文件頭</p><p> char str1[10]; //用于存貯紀(jì)錄的次數(shù)</p><p> fgets(str1,4,out); //從文件中獲取4個字符存到str1中<
89、/p><p> int s=atoi(str1); //將字符轉(zhuǎn)換為整型數(shù)據(jù)</p><p> if(j>s) //打破記錄,保存姓名和分?jǐn)?shù)</p><p><b> {</b></p><p> INPUTDLG dlgInput;
90、 // 聲明對話框變量</p><p> if(dlgInput.DoModal() == IDOK) // 彈出模態(tài)對話框,若用戶點(diǎn)擊OK按鈕</p><p> UpdateData(FALSE);</p><p> CString s;//定義CString的變量s</p><p>
91、s=dlgInput.m_name;//將輸入的姓名賦值給s</p><p> FILE *fp; //指向文件的指針</p><p> fp=fopen("name.txt","w"); //打開name文件,指向文件頭</p><p> fprintf(fp,"%
92、10s",s); //保存姓名</p><p> fclose(fp); //關(guān)閉文件</p><p> fp=fopen("score.txt","w"); //打開score文件,指向文件頭</p><p> fprintf(fp,"%d",j);
93、 //保存分?jǐn)?shù)</p><p> fclose(fp); //關(guān)閉文件</p><p><b> }</b></p><p> CDialog::OnCancel();</p><p><b> }</b></p>
94、<p><b> }</b></p><p><b> }</b></p><p> (9) OnCancel()函數(shù)</p><p> void CTangleiDlg::OnCancel() </p><p><b> {</b></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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設(shè)計報告
- c++掃雷課程設(shè)計報告
- c++面向?qū)ο笳n程設(shè)計報告
- c++課程設(shè)計報告--幻方
- c++課程設(shè)計報告--坦克游戲
- c++推箱子課程設(shè)計報告
- c++課程設(shè)計——日期類設(shè)計報告
- c++程序設(shè)計課程設(shè)計報告
- c++醫(yī)院選址問題-課程設(shè)計報告
- c++課程設(shè)計報告--猜數(shù)游戲
- 顯示年歷c++課程設(shè)計報告資料
- c++課程設(shè)計報告-- 學(xué)籍管理系統(tǒng)
- c++課程設(shè)計報告--飛機(jī)訂票系統(tǒng)
- c++課程設(shè)計報告---飛機(jī)訂票系統(tǒng)
- c++課程設(shè)計報告--子彈打飛機(jī)
- c++課程設(shè)計—教師管理系統(tǒng)報告
- c++課程設(shè)計報告-簡易圖像處理
- 酒店管理系統(tǒng)_c++課程設(shè)計報告
- 猜單詞游戲c++課程設(shè)計報告
- c++課程設(shè)計報告--酒店管理系統(tǒng)
評論
0/150
提交評論