24點游戲設(shè)計報告_第1頁
24點游戲設(shè)計報告_第2頁
24點游戲設(shè)計報告_第3頁
24點游戲設(shè)計報告_第4頁
24點游戲設(shè)計報告_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基本功能描述24點游戲是一種常見的數(shù)學(xué)運算游戲,玩游戲者只需根據(jù)系統(tǒng)給出的四張19的紙牌算出24即可,而程序主要負責(zé)實現(xiàn)隨機發(fā)牌、結(jié)果驗算、計算得分和難度設(shè)置等功能。設(shè)計的程序要求具有如下功能:(1)按下“發(fā)牌”按鈕時開始游戲,桌面上顯示4張翻開的撲克牌,并且游戲開始計時,進度條開始前進。(2)當用戶能夠?qū)?張牌計算出24時,可以按下“輸入算式”按鈕,此時游戲計時停止,用戶可在編輯框中輸入。(3)輸入結(jié)束,用戶按下“驗算”按鈕,計算輸入的多項式。驗算通過,顯示“正確”;驗算出錯,顯示“錯誤”。(4)如果用戶希望繼續(xù)游戲,則可按下“發(fā)牌”按鈕;否則按下“結(jié)束游戲”按鈕。在運行游戲時,還可以通過難

2、度級別的下拉列表來改變游戲的難度。改變難度可以變化游戲的限時和游戲加分的規(guī)則。運行后的初始界面為:運行成功后的界面為:設(shè)計框圖運行調(diào)試出錯調(diào)試出錯調(diào)試出錯功能調(diào)試功能調(diào)試功能調(diào)試添加進度條完成調(diào)試通過編寫消息處理代碼編寫消息處理代碼編寫消息處理代碼添加列表控件添加組合框添 加按鈕添加靜態(tài)控件應(yīng)用程序界面設(shè)計導(dǎo)入撲克牌資源創(chuàng)建基于對話框的應(yīng)用程序原理、功能分析開始加載菜單資源軟件設(shè)計過程一、應(yīng)用程序界面設(shè)計首先創(chuàng)建一個名為“24點游戲”的工程。啟動vc6.0,依次點擊“文件新建”,在彈出的對話框中選擇工程類型為“mfc appwizard(exe)”,工程名取為“24點游戲”,保存在“d:趙志剛

3、24點游戲”目錄下,選擇基于對話框的應(yīng)用程序類型,生成與用戶交互的應(yīng)用程序界面。程序界面如圖1所示(圖1)通過對應(yīng)用程序基本功能的描述,可以知道要實現(xiàn)該程序的功能,在所設(shè)計的基于對話框的應(yīng)用程序中應(yīng)包括以下資源及控件:(一)資源撲克牌資源:由于windows系統(tǒng)自帶的紙牌游戲中存放有撲克牌,故可以將所需的撲克牌資源導(dǎo)入應(yīng)用程序。首先找到位于windows目錄下的cards.dll文件,然后選擇vc ide中的“文件 | 打開”,文件類型選擇executable files(.exe;.dll;.ocx),“打開方式” 選擇resource,然后打開cards.dll文件(如下圖2所示)。打開c

4、ards.dll,選擇其中所需的bitmap,按住鼠標左鍵不放,將bitmap直接拖入應(yīng)用程序的workspace工作區(qū)。本程序選擇各種花色從a9以及用于程序運行后初始顯示為背面的紙牌總計37張牌。將所需紙牌全部導(dǎo)入應(yīng)用程序后,更改其屬性,將id設(shè)置為從137這些整數(shù)值。 圖(2) 圖(3)菜單資源:依次點擊“插入資源”,在彈出的對話框中雙擊“menu”項(如圖3所示),即實現(xiàn)了向應(yīng)用程序中加載菜單資源。(二)控件(1)靜態(tài)控件:共9個,其中4個用于顯示隨機產(chǎn)生的4張撲克牌,另外5個分別用于顯示提示文字“耗時標識:”、“難度級別:”、“當前得分:”、“歷史記錄:”以及累計游戲得分值。具體為:

5、耗時標識:提示用戶計時時間。 難度級別:提示用戶當前選擇的難度級別。 當前得分:提示用戶累計總得分信息。歷史記錄:提示用戶有關(guān)游戲次數(shù)及正誤信息。顯示累計游戲得分值,初始設(shè)置為0(2)按鈕:共4個,分別是:“發(fā)牌”按鈕:點擊此按鈕,隨機產(chǎn)生4張撲克牌并在4個靜態(tài)控件上顯示,同時啟動計時器,進度條開始計時。游戲開始?!拜斎胨闶健卑粹o:當用戶能夠?qū)?張牌計算出24時,點擊此按鈕即可在編輯框中輸入計算式,同時停止游戲計時,進度條停止前進。“驗算”按鈕:點擊此按鈕,應(yīng)用程序即對用戶輸入的計算式進行檢驗,如果判斷用戶輸入的計算式恰為所發(fā)牌的點數(shù),則對輸入算式進行驗算,同時將計算結(jié)果以消息框的形式告知用戶

6、,并在歷史記錄列表框中加以顯示。若計算結(jié)果正確,程序還根據(jù)難度級別在“當前得分:”中加分;若輸入算式不合乎要求,則告知用戶一個錯誤消息。最后,為防止游戲者不斷點擊此按鈕以增加得分,當用戶一次點擊后即被禁止,呈灰色顯示。“結(jié)束游戲”按鈕:點擊此按鈕則游戲結(jié)束,退出應(yīng)用程序。(3)組合框:共1個,此框中設(shè)置有“熱身運動”和“智力比拼”兩個難度級別以供游戲者選擇,不同的難度級別在一次游戲得分和耗時標識進度條計時快慢上有所不同。游戲者點擊不同的選項即可設(shè)定不同的難度級別。(4)列表控件:共1個,用于記錄游戲者總的游戲次數(shù)以及相關(guān)的對錯信息。(5)編輯框:共1個,用于接收游戲者輸入的計算式。 (6)進度

7、條:共1個,游戲者單擊發(fā)牌按鈕后,計時器啟動,耗時標識進度條同時開始計時,游戲者必須在耗時標識進度條計時終止前思考出計算式,然后單擊“輸入算式”按鈕,此時耗時標識進度條停止計時。否則,耗時標識進度條計時終止,應(yīng)用程序以消息框的形式報告真遺憾,時間到了!。添加這些控件后,再設(shè)置其屬性,如id及caption等。各控件的相關(guān)設(shè)置信息列表如下:控件對象idcaption顯示紙牌的靜態(tài)控件1idc_static1/顯示紙牌的靜態(tài)控件2idc_static2/顯示紙牌的靜態(tài)控件3idc_static3/顯示紙牌的靜態(tài)控件4idc_static4/耗時標識提示靜態(tài)控件idc_static耗時標識:難度級別

8、提示靜態(tài)控件idc_static5難度級別:當前得分提示靜態(tài)控件idc_static6當前得分:顯示當前得分靜態(tài)控件idc_static7/歷史記錄提示靜態(tài)控件idc_static8歷史記錄發(fā)牌按鈕idc_button1發(fā)牌輸入算式按鈕idc_button2輸入算式驗算按鈕idc_button3驗算結(jié)束游戲按鈕idc_button4結(jié)束游戲進度條idc_progress1/輸入算式編輯框idc_edit1/顯示歷史記錄列表控件idc_combo1/難度級別選擇組合框idc_list1/添加控件以及設(shè)置屬性等完成后,應(yīng)用程序的界面如下圖4所示(圖4)(注:由于用于顯示隨機產(chǎn)生的4張牌及當前得分的

9、靜態(tài)控件其caption并未設(shè)置任何內(nèi)容,故在界面中并未顯示。)二、編寫應(yīng)用程序代碼(一)為添加的各個控件定義成員變量在進行程序的代碼編寫過程之前需要為某些控件連接變量。定義成員變量可以在“建立類向?qū)А敝型瓿?,其操作步驟為:在欲添加成員變量的控件上右擊,點擊彈出的快捷菜單中的“建立類向?qū)А表?,在隨后彈出的對話框中選擇“member variables”選項卡,單擊欲添加變量的控件id標識,接著點擊“add variable”按鈕,在彈出的對話框中設(shè)定“member variable name”、“category”及“variable type”,然后點擊ok按鈕,則為該控件添加了一個成員變量

10、。其他控件成員變量的添加可以仿此完成。其演示過程如下圖57所示: 圖(5) 圖(6)圖(7)比較圖5和圖7,可以看到,在圖7中已經(jīng)為編輯框控件添加了一個成員變量m_edit,其類型為cstring類。重復(fù)此過程,為所有需要添加變量的控件連接變量,結(jié)果如下表所示:控件對象變量名類型idc_static1m_bmp1cstaticidc_static2m_bmp2cstaticidc_static3m_bmp3cstaticidc_static4m_bmp4cstaticidc_combo1m_cbccomboboxidc_edit1m_editcstring(二)為按鈕及組合框控件添加消息響應(yīng)函

11、數(shù)由于按鈕及組合框控件均能發(fā)送消息,故應(yīng)用程序中應(yīng)有對此消息的響應(yīng)函數(shù),以處理這些消息并實現(xiàn)相應(yīng)的功能。此程序中為這些控件添加的方法如下表所示:控件對象方法idc_button1onbutton1()idc_button2onbutton2()idc_button3onbutton3()idc_button4onbutton4()idc_list1onselchangecombo1()(三)方法的實現(xiàn)a應(yīng)用程序啟動時會自動顯示4張背面的紙牌,并且難度級別默認為“熱身運動”(可以選擇“熱身運動”或“智力比拼”),當前得分為0,列表控件無歷史記錄,由此則需要在構(gòu)造函數(shù)cmy24dlg(cwnd*

12、pparent /*=null*/)及初始化函數(shù)oninitdialog( )中添加如下代碼:/定義一個結(jié)構(gòu)體變量lvitemlv_item lvitem;cmy24dlg:cmy24dlg(cwnd* pparent /*=null*/)/設(shè)置列表控件列屬性 lvitem.mask = lvif_text | lvif_image | lvif_state;lvitem.state = 0; lvitem.statemask = 0; lvitem.iimage = 0;bool cmy24dlg:oninitdialog() /初始化組合框m_cb.insertstring(0,智力比拼)

13、; /為組合框添加子項m_cb.insertstring(1,熱身運動); /為組合框添加子項m_cb.setcursel(1); /默認為“熱身運動”setdlgitemtext(idc_static7,0); /開始時得分為0/設(shè)置列表控件風(fēng)格lv_column lvcolumn; /定義一個結(jié)構(gòu)體變量lvcolumn lvcolumn.mask = lvcf_fmt | lvcf_width | lvcf_text | lvcf_subitem;lvcolumn.fmt = lvcfmt_center;lvcolumn.cx = 52;/設(shè)置列表控件列標題lvcolumn.isubite

14、m = 0;lvcolumn.psztext = 題數(shù);(clistctrl*)getdlgitem(idc_list1)-insertcolumn(0, &lvcolumn);lvcolumn.isubitem = 1;lvcolumn.psztext = 對錯;(clistctrl*)getdlgitem(idc_list1)-insertcolumn(1, &lvcolumn); /通過強制類型轉(zhuǎn)換以獲得列表控件的指針,并對它進行相關(guān)操作/設(shè)置初始發(fā)牌顯示為背面的紙牌m_bmp1.modifystyle(0,ss_bitmap);hbitmap hbmp1; hbmp1=loadbitm

15、ap(afxgetinstancehandle(),makeintresource(37);m_bmp1.setbitmap(hbmp1);m_bmp2.modifystyle(0,ss_bitmap);hbitmap hbmp2; hbmp2=loadbitmap(afxgetinstancehandle(),makeintresource(37);m_bmp2.setbitmap(hbmp2);m_bmp3.modifystyle(0,ss_bitmap);hbitmap hbmp3; hbmp3=loadbitmap(afxgetinstancehandle(),makeintresou

16、rce(37);m_bmp3.setbitmap(hbmp3);m_bmp4.modifystyle(0,ss_bitmap);hbitmap hbmp4; hbmp4=loadbitmap(afxgetinstancehandle(),makeintresource(37);m_bmp4.setbitmap(hbmp4);/設(shè)置進度條的初始位置為0,范圍為0100 cprogressctrl *pprog=(cprogressctrl*)getdlgitem(idc_progress1);pprog-setrange(0,100);pprog-setpos(0);b當發(fā)牌時,進度條開始計時。

17、當輸入算式時進度條停止計時。需要設(shè)置進度條的范圍和當前位置。范圍表示整個操作的持續(xù)時間,當前位置表示當前進行到的位置。進度條根據(jù)當前位置來判斷進行的百分比并顯示進度。進度條的初始化在初始化函數(shù)oninitdialog( )中完成,添加的代碼如前所示。進度條的停止計時控制在onbutton1( )消息響應(yīng)中完成。按下按鈕1時,系統(tǒng)要隨機發(fā)出4張牌,進度條同時開始計時,編輯框中前一次輸入的內(nèi)容被清除。給按鈕idc_button1添加代碼,onbutton1( )方法的實現(xiàn)代碼如下: int suiji4;void cmy24dlg:onbutton1() / todo: add your cont

18、rol notification handler code heregetdlgitem(idc_button3)-enablewindow(1); /重新發(fā)牌時激活驗算按鈕3cstring s(); /清除前一次輸入的內(nèi)容m_edit=s;updatedata(false);/產(chǎn)生136之間的四個隨機數(shù),并存放在一個整型數(shù)組中srand( (unsigned)time( null ) );/產(chǎn)生四個隨機數(shù)for (int i=0;isetpos(0);settimer(1000,100,null); /步進時間設(shè)置為0.1秒c按下按鈕2時進度條停止計時,游戲者在編輯框中輸入計算式。為按鈕id

19、c_button2添加代碼,onbutton2( )方法的實現(xiàn)代碼如下:void cmy24dlg:onbutton2() / todo: add your control notification handler code here killtimer(1000);d按下按鈕3時,應(yīng)用程序判斷游戲者輸入是否符合要求,若計算式所得結(jié)果正確,則加分并修改歷史記錄,否則,以消息框的形式告知游戲者“錯誤”并修改歷史記錄。若輸入操作數(shù)不符合要求,則彈出操作數(shù)個數(shù)不符消息框;若輸入的操作數(shù)不是所發(fā)牌的點數(shù),則彈出輸入數(shù)據(jù)與所發(fā)牌不一致,游戲結(jié)束!消息框。最后兩者都對歷史記錄進行修改。為按鈕idc_but

20、ton3添加代碼,onbutton3( )方法的實現(xiàn)代碼如下:首先添加頭文件:#include #include #include stdio.h然后添加方法的實現(xiàn)代碼:typedef struct /表達式處理函數(shù) int top; double array50;numstack;typedef struct int top;char array50;opstack;int cint(char mychar) return (mychar-48);void pushnum(numstack *numstack,double num) numstack-top+; numstack-array

21、numstack-top-1=num;void popnum(numstack *numstack,double *num) *num=numstack-arraynumstack-top-1; numstack-top-;void pushop(opstack *opstack,char op) opstack-top+; opstack-arrayopstack-top-1=op;void popop(opstack *opstack,char *op) *op=opstack-arrayopstack-top-1; opstack-top-;double calc(double a,do

22、uble b,char c) double result; switch(c) case +: result=a+b;break; case -: result=a-b;break; case *: result=a*b;break; case /: result=a/b;break; return result;char priority(char y,char x) char priority=;break; case *: case /: if(y=( | y=#| y=+ | y=-)priority=;break; case (: priority=;break; case ): i

23、f(y=()priority=;break; case #: if(y=#)priority=;break; default: priority=e; return priority;void process(numstack *numstack,opstack *opstack,char x)double a,b;char c;static double tempnum=0.00000000;static int len=10;static int dot=0,flags=0;if(isdigit(x) | x=.) if(x=.) dot=1; else if(dot=0) tempnum

24、=tempnum*10+cint(x); else tempnum=tempnum+(double)cint(x)/len; len*=10; else if(flags=0& x!=() pushnum(numstack,tempnum);tempnum=0.00000000;len=10;dot=0; switch(priority(opstack-arrayopstack-top-1,x) case : pushop(opstack,x);flags=0;break; case : popop(opstack,&c); popnum(numstack,&b); popnum(numsta

25、ck,&a); pushnum(numstack,calc(a,b,c);flags=1; process(numstack,opstack,x);break; case =: popop(opstack,&c);flags=1;break; int checkequ(int s,int m) /判斷編輯框中輸入的數(shù)字是否為所發(fā)牌的點數(shù) int a=0,b=0; for(int k=0;k4;k+)int qiuyu=sk%9; if(qiuyu=0) sk=9; else sk%=9; for(int t=0;t4;t+)/判斷編輯框輸入的每個數(shù)字能否都在隨機數(shù)中找到與之相同的項 if(st

26、=m0|st=m1|st=m2|st=m3) a+=1; for(int j=0;j4;j+)/判斷隨機數(shù)中的每個數(shù)字能否都與編輯框輸入的數(shù)據(jù)相匹配 if(mj=s0|mj=s1|mj=s2|mj=s3) b+=1; if(a=4)&(b=4)/對判斷結(jié)果的處理,若一致則返回1值,否則返回0值 return 1;else return 0;cstring input; /定義一個字符串類int proceed(lpctstr l)/驗算輸入計算式,若結(jié)果等于24則返回真值,否則為假,并提示 numstack numstack;opstack opstack;int i=0; numstack.

27、top=0;opstack.top=0; pushop(&opstack,#); for(i=0;istrlen(l);i+) process(&numstack,&opstack,li);if(numstack.arraynumstack.top-1=24) afxmessagebox(正確);input=正確;return 1;elseafxmessagebox(錯誤);input=錯誤;return 0;/為響應(yīng)函數(shù)onbutton3()添加代碼,判斷操作數(shù)是否合乎要求,修改當前得分及歷史記錄void cmy24dlg:onbutton3() / todo: add your contr

28、ol notification handler code hereint m=0,i=0, shuju100; cstring biaoda; updatedata(true);biaoda=m_edit;biaoda=biaoda+#; for(i=0;i0)&(biaodaienablewindow(0);/個數(shù)不匹配,點按鈕3后即被禁止 else int r=checkequ(suiji,shuju);if(r=1) int flag=proceed(biaoda); if(flag) /若計算式正確,則根據(jù)難度級別加分,修改當前得分記錄 defen+=jiafen; cstring s

29、tr; str.format(%d,defen); setdlgitemtext(idc_static7,str); else afxmessagebox(輸入數(shù)據(jù)與所發(fā)牌不一致,游戲結(jié)束!); getdlgitem(idc_button3)-enablewindow(0);/ 防止刷分,點按鈕3后即被禁止 int count=0; char s;count+=1; /根據(jù)程序運行結(jié)果修改歷史記錄wsprintf(&s,%d,count);lvitem.iitem = count-1;lvitem.isubitem = 0;lvitem.psztext = &s;(clistctrl*)get

30、dlgitem(idc_list1)-insertitem(&lvitem);(clistctrl*)getdlgitem(idc_list1)-setitemtext(count-1, 1,input);updatedata(false);e按下按鈕4時游戲結(jié)束,退出應(yīng)用程序。為按鈕idc_button4添加代碼,onbutton4( )方法的實現(xiàn)代碼如下:void cmy24dlg:onbutton4() / todo: add your control notification handler code hereonok();f.游戲啟動后,在發(fā)牌之前,游戲者首先選擇難度級別(如果不進行

31、選擇的話,則默認為“熱身運動”),程序根據(jù)游戲者設(shè)置的級別來進行計時和加分。因此當游戲者進行選擇時,列表框會發(fā)出cbn_selchange消息,其處理函數(shù)為onselchangecombo1( ),其實現(xiàn)方法如下:void cmy24dlg:onselchangecombo1() / todo: add your control notification handler code herecstring msg;m_cb.getlbtext(m_cb.getcursel(),msg);if(strcmp(msg,智力比拼)sudu=1;jiafen=5;if(strcmp(msg,熱身運動)s

32、udu=3;jiafen=10;(四)添加菜單項及其消息響應(yīng)代碼(1)添加菜單項打開workspace工作區(qū),展開“menu”文件夾并雙擊“idm_menu1”,在右邊窗格中右擊有虛線框標識的菜單,在隨后彈出的對話框中設(shè)置其屬性:“標題”中填入“游戲”,選中“彈出”復(fù)選框,這樣就不必設(shè)置其id。如圖8所示圖(8)單擊“游戲”菜單項,在彈出的中右擊虛框標識的菜單項,隨后設(shè)置其屬性:以添加“開始b”菜單項為例,設(shè)置其id為“idm_begin” ,“標題”填入“開始&b”如下圖9所示。完成后回車,其界面變?yōu)橹貜?fù)此過程,為菜單添加菜單項“開始”、“退出”、“幫助”以及“關(guān)于”。(2)將菜單資源鏈接到

33、主對話框展開“dialog”文件夾,雙擊“idd_my24_dialog”項,在隨后彈出的應(yīng)用程序界面上右擊標題欄,在彈出的對話框中設(shè)置“菜單:”項為“idd_menu1”,則將菜單鏈接到了主對話框中。如圖10所示圖(10)回車后運行程序,則可以看到已經(jīng)將菜單成功加入。(3)為菜單項添加消息響應(yīng)代碼“開始”菜單項用于控制發(fā)牌和啟動計時器,使進度條前進。為其添加消息響應(yīng)函數(shù)及代碼如下:void cmy24dlg:onbegin() / todo: add your command handler code heregetdlgitem(idc_button3)-enablewindow(1);c

34、string s();m_edit=s;updatedata(false); srand( (unsigned)time( null ) );for (int i=0;isetpos(0);settimer(1000,100,null); “退出”菜單項用于結(jié)束游戲并退出應(yīng)用程序。為其添加消息響應(yīng)函數(shù)及代碼如下:void cmy24dlg:onexit() / todo: add your command handler code hereonok();“關(guān)于”菜單項用于給用戶以提示信息。為其添加消息響應(yīng)函數(shù)及代碼如下:void cmy24dlg:onabout() / todo: add y

35、our command handler code herecaboutdlg dlg;dlg.domodal();至此,整個軟件設(shè)計過程完成。接下來進入調(diào)試過程,對所編寫的代碼進行調(diào)試。若無誤,即可進入運行階段。否則繼續(xù)重復(fù)上述步驟。結(jié)論1 根據(jù)設(shè)計要求,所編寫的軟件實現(xiàn)了全部的功能,完成了設(shè)計任務(wù)。測試結(jié)果附于后。2 該設(shè)計并沒有充分發(fā)揮vc+的優(yōu)勢,面向?qū)ο蟪绦蛟O(shè)計思想貫徹不夠徹底。3 程序所采用的對表達式進行處理的算法不夠完善(因而也稱不上是一個好的算法,但是從原理上講是沒有問題的。對此,我參考了各種版本的數(shù)據(jù)結(jié)構(gòu)教材(參考書籍附于后)?;诮滩闹袑Α袄枚褩G蟊磉_式的值”的介紹,編寫了

36、此算法。不過還是存在bug,偶爾也會出現(xiàn)判斷失誤現(xiàn)象。關(guān)于這個問題,我請教了本班同學(xué)及高中同學(xué),結(jié)果還是不能得到完善的解決。這是本次設(shè)計最大的遺憾。4 對vc+學(xué)習(xí)不夠深入,未能領(lǐng)會利用mfc進行可視化程序設(shè)計的要旨,因此在調(diào)試程序的過程中出現(xiàn)了好多現(xiàn)象都難以解釋。例如,為列表控件(listcontrol)定義一個變量后,程序不能正常運行,不得已只好改用指針,結(jié)果程序能夠正常運行。對此,我不明白其中的原因。5 作為一個交互性很好的應(yīng)用程序,應(yīng)該為用戶提供更為友好的交互方式,如當游戲者在按下“輸入算式”按鈕后,為方便操作以及省去游戲者頻繁點擊鼠標以獲得編輯框輸入焦點的麻煩,編輯框應(yīng)自動獲得輸入焦

37、點。本設(shè)計中未實現(xiàn)這一功能,因此應(yīng)當改進,這樣可使游戲操作更為方便。6 程序中每次發(fā)出的撲克牌中沒有10,這是為方便程序設(shè)計而有意去掉的。因為算法是利用堆棧來求表達式的值的,而10在進行壓棧操作時是作為兩個字符進行處理的,這為程序設(shè)計帶來不便:因為為處理這一張牌需要耗費更多的系統(tǒng)資源。為方便計,略去10號牌,不過一個完善的游戲是應(yīng)該能處理10的。7 本程序的另一個不完善之處是:當用戶按下“輸入算式”按鈕后,計時器停止,進度條停止前進,此后游戲者可以在任意長的時間內(nèi)思考計算式,然后輸入。對此,應(yīng)用程序無能為力,不能對游戲者的思考時間進行有效控制。在設(shè)計之初,我曾考慮再增加一個進度條對思考時間計時

38、以實現(xiàn)控制,但由于不會合理使用相關(guān)方法,結(jié)果兩個進度條發(fā)生沖突,反而連基本的計時功能也實現(xiàn)不了,無奈只有放棄這一嘗試。總之,通過對24點游戲的設(shè)計,可以熟悉mfc編程,加深對對話框編程的認識和理解,并訓(xùn)練visual c+在數(shù)學(xué)計算方面的知識,以及在按鈕上設(shè)置位圖、設(shè)置定時器的方法和應(yīng)用程序的調(diào)試,同時對面向?qū)ο笈c可視化程序設(shè)計有一定的認識,并提高動手編程的能力。心得體會經(jīng)歷了這次應(yīng)用軟件設(shè)計實踐,我感觸頗深。此前一直錯誤的以為做課程設(shè)計其實是件很簡單的事情,根本不需要興師動眾而且花費那么長的時間,兩三天足矣。在此錯誤認識的引導(dǎo)下,也就沒怎么把它當回事,只打算隨隨便便應(yīng)付一下,完工交差。但是等

39、到真正親歷后才發(fā)現(xiàn)原來自己是多么的愚蠢可笑,自己的想法又是多么的幼稚、荒謬。做的過程并不順利,而其中的種種遭遇更是讓我反省良久。一路堅持下來,其中的艱辛也許只有經(jīng)歷過才能真正體會。不過,經(jīng)過一番實踐后,當看到自己親手做的東西就那么真實的擺在眼前,曾經(jīng)的心血與付出終于有了回報,那份激動與喜悅的心情又豈是三言兩語說得清楚的!“如人飲水,冷暖自知”,現(xiàn)在我是真的體會到了??偟膩碚f,我覺得這次設(shè)計實踐收獲頗豐,于今后的學(xué)業(yè)、步入社會后參加工作乃至做人做事都是一筆不小的財富!通過這次課程設(shè)計,我懂得了實踐的重要性、團隊合作精神的可貴以及做事前的充足準備與做事過程中的堅持和細心謹慎對于高質(zhì)高效地完成一項工

40、作的特殊意義。任何事情都有一個循序漸進的過程,知難而進、勇往直前,只有這樣才有可能領(lǐng)略險峰的無限風(fēng)光。治學(xué)、做人又何嘗不是如此呢? 先說實踐。關(guān)于實踐,前人曾留有十二字箴言:“實踐是檢驗真理的唯一標準”,經(jīng)過這次應(yīng)用軟件設(shè)計,我所理解的實踐已遠不只此。人說“愛過才知情深,醉過方知酒濃”,我以為,只有實踐才會出真知,沒有實踐,任何理論、見解都是蒼白無力的。眼之所見、心之所想大多數(shù)時候并不就是手之所為。在動手嘗試之前,我可以算是一個眼高手低的人。課程設(shè)計的題目下來了,共有三個可供選擇。相較之下我選了做“24點游戲”,本以為這是最簡單的,基本上可以不費多大心力即輕松搞定。因此開始的幾天里也沒怎么刻意

41、著手這件事情。事實卻是,等到我真正做了才發(fā)現(xiàn)隨著問題的不斷出現(xiàn)和為此而查閱許多相關(guān)的資料,花了那么多的時間與精力,做的過程還是如此的困難重重,并且做出來的東西也并非盡善盡美。方知許多事情并非都如人所想,不實踐、不參與是無論如何也不會明白的。實踐之重要正在于此!這段小小的經(jīng)歷使我感觸很深,也教會我在以后的學(xué)習(xí)與工作中不要再眼高手低,任何事情都需親自嘗試后再做定斷。牢記“眼之所見、心之所想非手之所為也!”接下來再說著手前的準備。三國時諸葛亮草船借箭有賴“萬事俱備,只欠東風(fēng)”,而我的設(shè)計能順利進行也必須有充足的準備作為后盾。只可惜在一開始的時候由于并不很重視因此也未意識到這一點,導(dǎo)致做的過程中停停找

42、找、找找停停,嚴重影響了設(shè)計進度和效率,并且這種臨陣磨槍式的做法也使得準備很不充分,往往是急需要用的東西找也找不到,如某控件類的方法如何使用、其原型或者參數(shù)的類型與意義為何等等。這樣一來,自然會遇到重重困難。我想,如果在動手之前已經(jīng)做好了充足準備,必然會少遇到很多麻煩,也不會一度出現(xiàn)舉步維艱的情況。當然了,這次還只是一個小小的設(shè)計,如果換成是某個大型系統(tǒng)的設(shè)計豈不是無法想象?所以這次經(jīng)歷也算是給了我一個教訓(xùn):千萬不要打無準備的仗!早準備方保無虞。說到了準備,也得說說做事過程中的堅持與細心謹慎。很難想象如果沒有堅持到底的勇氣和不懈的努力,當一個人面對困難時能迎難而上并一路堅持走下來。當初我選定這

43、個設(shè)計課題時正是考慮到它簡單、易完成(當然事實并非如此),不過后來做的時候不斷出現(xiàn)新的問題,而且有些還是從理論上無法解釋的,這時我就在想算了吧,這么難搞,還是換別的做。正好其他同學(xué)做的媒體播放器在網(wǎng)上找到了很多原原本本的源代碼,因而做起來就不費吹灰之力。當時幾乎就在一念之間轉(zhuǎn)了方向,好在隨后終于做成功了一部分功能。這點小小的成功讓我體會到了自己動手的樂趣與成功后的喜悅,在此激勵之下,幸而堅持了下來。回味其中的艱辛,盡享成功的喜悅,縱是雛鷹試翼之作,畢竟自己所為,比之其他同學(xué)照搬別人的代碼以完成任務(wù)卻不知到底做了什么、又有什么收獲,不是更有意義嗎?能夠堅持即已成功一半。世上無難事,唯恐少堅持!此

44、外,在做的過程中不可能是一帆風(fēng)順的,必然免不了頻繁出錯。這一方面是由于輸入時的粗心大意造成的,另一方面則是編寫的代碼本身的問題。對于前者,如果能在操作時做到細心謹慎,當然可以避免。即便免不了輸入錯誤,在調(diào)試的過程中也應(yīng)細心謹慎,惟其如此,方可免去許多麻煩,保證軟件設(shè)計的質(zhì)量與效率。由于要不斷的調(diào)試,而vc6.0對于用戶所作的改動會自動保存,因此就可能出現(xiàn)保存了修改后錯誤的結(jié)果,反而將前面做好的調(diào)試無誤的內(nèi)容覆蓋掉的情況。如果沒有時時保持細心謹慎的態(tài)度,及時對調(diào)試無誤的結(jié)果加以保存,將可能遭遇前功盡棄的“滅頂之災(zāi)”。不管怎樣,時時處處細心謹慎,方保順利無虞。我想,無論是治學(xué)還是工作或是為人,這樣的一種態(tài)度都是至關(guān)重要的。由于是初次設(shè)計,僅憑自己一人之力是很難完成的,所以大家或借助于網(wǎng)絡(luò),或借助于參考書籍、期刊資料等。我也不例外,和幾位同學(xué)一起研究設(shè)計方案及具體實現(xiàn)方法,并跑了好幾趟圖書館,查資料,抄筆記,上網(wǎng)搜索資料,終于在大家的通力合作之下完成了這個項目。一起做的過程大家朝著一個共同的目標努力,分工協(xié)作,互相交流,提出不同的想法,不斷完善,不斷進步,一個一個的問題迎刃而解,一個一個的功能不斷做出來。最后,集體的勞動終于換來了豐碩的成果(盡管并不完美)。這次經(jīng)歷使我懂得了團隊合作精神的可貴。不僅如此,我覺得這次合作的過程真的是很愉快,

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論