版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、西北農(nóng)林科技大學(xué)信息工程學(xué)院c+面向?qū)ο髮?shí)習(xí)報(bào)告題 目:數(shù)獨(dú)游戲的設(shè)計(jì)與實(shí)現(xiàn) 學(xué) 號(hào)姓 名專業(yè)班級(jí)計(jì)算機(jī)科學(xué)與技術(shù)103班指導(dǎo)教師實(shí)踐日期2012年2月20日3月2日目 錄一、綜合訓(xùn)練目的與要求4(1)綜合訓(xùn)練目的:4(2)綜合訓(xùn)練要求:4二、綜合訓(xùn)練任務(wù)4(1)采用面向?qū)ο蟮乃枷朐O(shè)計(jì)設(shè)計(jì)一個(gè)csudoku類用于求解數(shù)獨(dú),進(jìn)而完成數(shù)獨(dú)游戲的設(shè)計(jì)與實(shí)現(xiàn);4(2)編譯并調(diào)試程序,不斷的發(fā)現(xiàn)問(wèn)題,并且解決問(wèn)題,使數(shù)獨(dú)的各種功能都能夠完全實(shí)現(xiàn),最后使程序盡量少一些缺陷。4三、總體設(shè)計(jì)4四、詳細(xì)設(shè)計(jì)說(shuō)明5(1)主對(duì)話框中的各個(gè)功能的詳細(xì)介紹:5進(jìn)入游戲5游戲說(shuō)明5版本信息5作者簡(jiǎn)介5退出系統(tǒng)6(2)游戲
2、對(duì)話框的各個(gè)功能的詳細(xì)介紹:6游戲區(qū)6函數(shù)實(shí)現(xiàn):7主要算法講解:7(3)界面美化的具體實(shí)現(xiàn)過(guò)程:12各個(gè)對(duì)話框的背景12主對(duì)話框和作者簡(jiǎn)介中的照片13五、調(diào)試與測(cè)試14(1)游戲的功能及界面展示:14(2)游戲測(cè)試:18(3)遇到的問(wèn)題及解決方法:19、問(wèn)題:19、問(wèn)題21六、實(shí)習(xí)日志23(1)2月20日2月21日:23(2)2月22日2月24日:23(3)2月27日:23(4)2月28日2月29日:23(5)2月31日2月32日:23七、實(shí)習(xí)總結(jié)24八、附錄:核心代碼清單25(1)主對(duì)話框的建立以及各個(gè)子對(duì)話框的建立代碼實(shí)現(xiàn)過(guò)程:25(2)新游戲功能的代碼實(shí)現(xiàn)過(guò)程:30(3)自動(dòng)求解的代碼實(shí)
3、現(xiàn)過(guò)程:34(4)確認(rèn)完成的代碼實(shí)現(xiàn)過(guò)程:36(5)顯示與回顯的代碼實(shí)現(xiàn)過(guò)程:39一、綜合訓(xùn)練目的與要求(1)綜合訓(xùn)練目的: 能夠熟練運(yùn)用microsoft visual c+ 6.0編譯和調(diào)試程序;通過(guò)此次實(shí)習(xí),在對(duì)上一學(xué)期c+知識(shí)鞏固提高的同時(shí),也要對(duì)以前為學(xué)好或是未學(xué)到的c+知識(shí)加以學(xué)習(xí)并且熟練運(yùn)用; 在以前mfc編程的基礎(chǔ)上,進(jìn)一步的學(xué)習(xí)和了解mfc的知識(shí),尤其是對(duì)界面的設(shè)計(jì),以及各類消息函數(shù)的了解,從而為程序的界面設(shè)計(jì)和功能實(shí)現(xiàn)鋪好道路,降低難度。(2)綜合訓(xùn)練要求: 在實(shí)習(xí)期間,每天要按時(shí)到達(dá)實(shí)習(xí)地點(diǎn),盡量不遲到或是早退,并且到了之后應(yīng)該盡快進(jìn)入狀態(tài),抓緊時(shí)間;在兩周的實(shí)習(xí)之中,自
4、己應(yīng)該做好安排和計(jì)劃,知道在每個(gè)時(shí)間段應(yīng)該做些什么,最重要的是一定要在每個(gè)時(shí)間段內(nèi),提前或是按時(shí)完成自己規(guī)定的任務(wù),以便為以后的任務(wù)留下充足時(shí)間;在設(shè)計(jì)界面與編程階段要有耐心,細(xì)心,認(rèn)真完成每一模塊的制作,并且細(xì)心的發(fā)現(xiàn)問(wèn)題,解決問(wèn)題,最后完成設(shè)計(jì),做出令自己滿意的成果。二、綜合訓(xùn)練任務(wù)(1)采用面向?qū)ο蟮乃枷朐O(shè)計(jì)設(shè)計(jì)一個(gè)csudoku類用于求解數(shù)獨(dú),進(jìn)而完成數(shù)獨(dú)游戲的設(shè)計(jì)與實(shí)現(xiàn); (2)編譯并調(diào)試程序,不斷的發(fā)現(xiàn)問(wèn)題,并且解決問(wèn)題,使數(shù)獨(dú)的各種功能都能夠完全實(shí)現(xiàn),最后使程序盡量少一些缺陷。三、總體設(shè)計(jì)(1)數(shù)獨(dú)游戲采用了一種小型系統(tǒng)的設(shè)計(jì)方法,所有的程序都依附在了兩個(gè)對(duì)話框中,一個(gè)是用戶界面
5、對(duì)話框,即主對(duì)話框,另一個(gè)是游戲界面對(duì)話框;(2)在主對(duì)話框中,有進(jìn)入游戲、游戲說(shuō)明,版本信息,作者簡(jiǎn)介,以及退出系統(tǒng)等五個(gè)按鈕,每個(gè)按鈕中都各自有相對(duì)應(yīng)的消息響應(yīng)函數(shù)和功能;(3)在游戲界面中,分為游戲區(qū)和功能區(qū),游戲區(qū)即是一個(gè)大的九宮格,功能區(qū)主要集中了數(shù)獨(dú)游戲最精華的部分,有難易選擇、新游戲、自動(dòng)求解、確認(rèn)完成,退出游戲等主要功能。四、詳細(xì)設(shè)計(jì)說(shuō)明(1)主對(duì)話框中的各個(gè)功能的詳細(xì)介紹:進(jìn)入游戲含義:即是主對(duì)話框與游戲?qū)υ捒蛳嗷マD(zhuǎn)換的接口;函數(shù)實(shí)現(xiàn):void clianxidlg:onentrance() / todo: add your control notification hand
6、ler code heregamedialog dgs;dgs.domodal();游戲說(shuō)明含義:主要是介紹數(shù)獨(dú)游戲的起源、游戲規(guī)則以及游戲技巧,以方初學(xué)用戶快速的掌握和了解游戲,體驗(yàn)到數(shù)獨(dú)的精妙之處;函數(shù)實(shí)現(xiàn):void clianxidlg:ongamerule() / todo: add your control notification handler code heregameinstruction gps;gps.domodal();版本信息含義:初略的說(shuō)明游戲的名稱,完成時(shí)間,以及制作的版次函數(shù)實(shí)現(xiàn):void clianxidlg:oncopyright() / todo: add
7、 your control notification handler code herecaboutdlg cps;cps.domodal();作者簡(jiǎn)介內(nèi)容:介紹了作者的相關(guān)信息,并附上了一幅自制的照片,已滿足一下自己小小的虛榮心吧!函數(shù)實(shí)現(xiàn):void clianxidlg:onauthor() / todo: add your control notification handler code here authordlg lps; lps.domodal(); /messagebox( 要提示的內(nèi)容 , 消息標(biāo)題 ,mb_iconinformation|mb_yesno); /messag
8、ebox profile退出系統(tǒng)特色:與普通的退出功能不一樣的是在點(diǎn)擊了此按鈕后會(huì)自動(dòng)彈出一個(gè)詢問(wèn)對(duì)話框,這樣可以有效的防止用戶誤操作而退出了系統(tǒng)函數(shù)實(shí)現(xiàn):void clianxidlg:oncancel() / todo: add extra cleanup here if( messagebox( 您確定要退出系統(tǒng)嗎 ? , 溫馨提示,mb_iconquestion|mb_yesno) = idyes) cdialog : oncancel(); /*if (afxmessagebox(您確定要退出系統(tǒng)嗎?,mb_yesno|mb_iconquestion) = idyes) cdialo
9、g:oncancel( ); */this is the second way to do information/cdialog:oncancel();(2)游戲?qū)υ捒虻母鱾€(gè)功能的詳細(xì)介紹:游戲區(qū)含義及內(nèi)容:游戲區(qū)是用戶與計(jì)算機(jī)交互的最直接,也是最頻繁的地方,設(shè)計(jì)時(shí)采用了9*9個(gè)可編輯文本框按id順序依次的排列成了一個(gè)正方形。并且游戲的難易程度設(shè)定了四個(gè)級(jí)別:簡(jiǎn)單、中等、困難、用戶自定義,以方便不同水平的用戶都能夠找到能夠挑戰(zhàn)一下的游戲。在程序內(nèi)部是采用了一個(gè)a99的二位數(shù)組與81個(gè)可編輯文本相對(duì)應(yīng)而進(jìn)行操作。當(dāng)用戶點(diǎn)擊新游戲時(shí),系統(tǒng)會(huì)用已設(shè)定好的算法從8個(gè)文件中隨機(jī)的選擇一個(gè)讀取到a99這
10、個(gè)數(shù)組中,然后通過(guò)顯示函數(shù)將a99中的每一個(gè)數(shù)付給81個(gè)文本框中,并且顯示給用戶。如果數(shù)組付給文本框的數(shù)是0的話,那么所對(duì)應(yīng)的文本框就不進(jìn)行顯示,并且將文本框設(shè)為可編輯狀態(tài);反之這將文本框設(shè)為不可編輯狀態(tài);這樣就可以方便用戶填寫(xiě)數(shù)的同時(shí)也能夠避免用戶由于誤操作而將系統(tǒng)自動(dòng)生成的非零數(shù)修改,造成程序運(yùn)行出錯(cuò)。當(dāng)用戶填寫(xiě)數(shù)獨(dú)完成,點(diǎn)擊確認(rèn)完成之后,首先,在確認(rèn)完成的消息響應(yīng)函數(shù)中,系統(tǒng)會(huì)調(diào)用回顯函數(shù),將用戶在文本框中所填寫(xiě)的數(shù)據(jù)按照對(duì)應(yīng)順序付給數(shù)組aij,從而方便系統(tǒng)接收到用戶填寫(xiě)的數(shù)據(jù)。之后系統(tǒng)會(huì)調(diào)用已經(jīng)編寫(xiě)好的判斷函數(shù),對(duì)大九宮格(即a99)中的每一行、每一列,每一個(gè)小九宮格進(jìn)行判斷。從而向用
11、戶輸出相應(yīng)的信息,提示用戶解答的是否正確。在數(shù)獨(dú)設(shè)計(jì)時(shí)的一個(gè)新的特色就是,新增加了一項(xiàng)“自動(dòng)求解”的功能。有了這項(xiàng)功能以后,一方面當(dāng)用戶在某一局游戲苦思良久也未能解出時(shí),可以隨時(shí)的提供正確答案未用戶答疑解惑,另一方面也能夠體現(xiàn)計(jì)算機(jī)厲害之處,體現(xiàn)出科技助人的力量。在退出游戲時(shí)也采用了與主窗口類似的做法,對(duì)用戶的操作進(jìn)行確認(rèn),避免用戶的誤操作。函數(shù)實(shí)現(xiàn):詳見(jiàn)核心代碼清單;主要算法講解:1、算法名稱:判斷用戶所填寫(xiě)的數(shù)是否符合數(shù)獨(dú)游戲的規(guī)則;算法函數(shù):int gamedialog:judge(int value1,int row,int col)應(yīng)用算法的按鈕:確認(rèn)完成算法思路:當(dāng)用戶填寫(xiě)完所有的
12、空格時(shí)后,點(diǎn)擊確認(rèn)完成后我們就需要對(duì)用戶填寫(xiě)的所有數(shù)進(jìn)行判斷;判斷時(shí)不是所有數(shù)一起判斷的,而是一個(gè)一個(gè)的進(jìn)行判斷;例如:用戶填了7(5.,3)這個(gè)數(shù),首先我們要對(duì)第五行進(jìn)行檢測(cè),將第五行的出7本身外的所有數(shù)都與7做比較,如果有相等的,則返回false;同理對(duì)第三列的所有數(shù)也用此法進(jìn)行判斷,返回相應(yīng)值;之后將7(5,3)的橫眾坐標(biāo)都與3求余,之后我們會(huì)發(fā)現(xiàn)在大的九宮格中,前三行的橫坐標(biāo)都為0,中間三行的橫坐標(biāo)都為1,最后三行的橫坐標(biāo)都為2;前三列的縱坐標(biāo)都為0,中間三行的縱坐標(biāo)都為1,最后三列的縱坐標(biāo)都為2;所以我們就可以通過(guò)這種方法確定出7(5,3)所在的小九宮格的位置了,之后在小九宮格中用小
13、九宮格中除7本身外的所有數(shù)與7做比較,如果有相等的就返回false,沒(méi)有相等的就返回true;最后我們就可以通過(guò)函數(shù)的返回值判定用戶所填寫(xiě)的數(shù)字7是否符合數(shù)獨(dú)游戲的規(guī)則了;同理我們就可里利用這種方法對(duì)用戶填寫(xiě)的所有數(shù)字進(jìn)行逐一的判斷了。由于每次生成游戲時(shí)的空格數(shù)是不固定的,所以沒(méi)次用judge()函數(shù)進(jìn)行判斷后返回的true或false的個(gè)數(shù)也是不固定的,所以我們可以對(duì)整個(gè)大的九宮格整體做判斷,這樣雖然有的判斷是不必要的,但是如果用戶填對(duì)所有的空,判斷后就會(huì)有81個(gè)true返回,這樣我們就可以通過(guò)看是否有81個(gè)true 來(lái)判斷用戶是否完全填對(duì)了;這就是我所設(shè)計(jì)的數(shù)獨(dú)算法了,下面介紹一下算法的主
14、要實(shí)現(xiàn)代碼,方便理解算法;算法實(shí)現(xiàn):int gamedialog:judge(int value1,int row,int col)int down_row,down_col,up_row,up_col;for(down_row=0;down_rowrow;up_row-) /判斷方格向下的格子if(value1=aup_rowcol) return 0;for(down_col=0;down_colcol;up_col-) /判斷方格向右的格子if(value1=arowup_col) return 0;int a_row=row/3,b_row=row%3,a_col=col/3,b_co
15、l=col%3;/用于記錄當(dāng)前格子所在的小九宮格的位置int mini_row,mini_col;switch(a_row)case 0:/這個(gè)大九宮格在最上三行switch(a_col)case 0:/這個(gè)大九宮格在最前三列for(mini_row=0;mini_row3;mini_row+)for(mini_col=0;mini_col3;mini_col+)if(amini_rowmini_col!=arowcol)if(value1=amini_rowmini_col) return 0;break;case 1:/這個(gè)大九宮格在中間三列for(mini_row=0;mini_row3
16、;mini_row+)for(mini_col=3;mini_col6;mini_col+)if(amini_rowmini_col!=arowcol)if(value1=amini_rowmini_col) return 0;break;case 2:/這個(gè)大九宮格在最后三列for(mini_row=0;mini_row3;mini_row+)for(mini_col=6;mini_col9;mini_col+)if(amini_rowmini_col!=arowcol)if(value1=amini_rowmini_col) return 0;break;break;case 1:/這個(gè)大
17、九宮格在中間三行switch(a_col)case 0:/這個(gè)大九宮格在最前三列for(mini_row=3;mini_row6;mini_row+)for(mini_col=0;mini_col3;mini_col+)if(amini_rowmini_col!=arowcol)if(value1=amini_rowmini_col) return 0;break;case 1:/這個(gè)大九宮格在中間三列for(mini_row=3;mini_row6;mini_row+)for(mini_col=3;mini_col6;mini_col+)if(amini_rowmini_col!=arowc
18、ol)if(value1=amini_rowmini_col) return 0;break;case 2:/這個(gè)大九宮格在最后三列for(mini_row=3;mini_row6;mini_row+)for(mini_col=6;mini_col9;mini_col+)if(amini_rowmini_col!=arowcol)if(value1=amini_rowmini_col) return 0;break;break;case 2:/這個(gè)大九宮格在最下三行switch(a_col)case 0:/這個(gè)大九宮格在最前三列for(mini_row=6;mini_row9;mini_row
19、+)for(mini_col=0;mini_col3;mini_col+)if(amini_rowmini_col!=arowcol)if(value1=amini_rowmini_col) return 0;break;case 1:/這個(gè)大九宮格在中間三列for(mini_row=6;mini_row9;mini_row+)for(mini_col=3;mini_col6;mini_col+)if(amini_rowmini_col!=arowcol)if(value1=amini_rowmini_col) return 0;break;case 2:/這個(gè)大九宮格在最后三列for(min
20、i_row=6;mini_row9;mini_row+)for(mini_col=6;mini_col9;mini_col+)if(amini_rowmini_col!=arowcol)if(value1=amini_rowmini_col) return 0;break;break;return 1;2、算法名稱:自動(dòng)求解;算法函數(shù):void gamedialog:onautoslove()應(yīng)用算法的按鈕:自動(dòng)求解算法思路:由于數(shù)獨(dú)是一個(gè)9*9的九宮格,而在每一個(gè)小格子里又可以填入1到9的這樣九個(gè)數(shù)字,再加上不填數(shù)字是的0,那么就是十個(gè)數(shù)字,即是一個(gè)容量為十的小數(shù)組;所以我們可以在游戲?qū)υ捒?/p>
21、的類中定義一個(gè)三位數(shù)組b9910用來(lái)記錄和標(biāo)記每一個(gè)小格子內(nèi)輸?shù)淖兓?。?dāng)用戶按下自動(dòng)求解按鈕后,首先我們將每個(gè)小格子數(shù)組中的第九位先設(shè)為一個(gè)數(shù),不妨設(shè)為9;之后對(duì)每個(gè)單元格進(jìn)行判斷,如果單元個(gè)中的數(shù)大于零并且小于九的話,先將格子的第九為設(shè)為零,(即已經(jīng)檢查過(guò)了),之后在用標(biāo)記函數(shù)del( )(此函數(shù)的具體實(shí)現(xiàn)過(guò)程在核心代碼清單中會(huì)給出具體的實(shí)現(xiàn)過(guò)程,在此暫且先給出自動(dòng)求解函數(shù)的算法和實(shí)現(xiàn)過(guò)程)對(duì)此單元格進(jìn)行檢測(cè)標(biāo)記;之后再對(duì)空格進(jìn)行填值,并進(jìn)行檢測(cè),填好空格。并且在在整個(gè)函數(shù)中設(shè)置一個(gè)變量count賦初值為零,判斷非零格與有零格的同時(shí)都讓count+,如果count加到了81,則說(shuō)明所有的空格
22、都已經(jīng)填完整了;為了防止填空時(shí)出錯(cuò),不妨將以上的過(guò)程多重復(fù)幾次。這就是自動(dòng)求解算法的大致思想和核心步驟了。下面介紹自動(dòng)求解功能的具體實(shí)現(xiàn)代碼;算法實(shí)現(xiàn):void gamedialog:onautoslove() / todo: add your control notification handler code herecount=0;for(i=0;i9;i+)for(j=0;j9;j+)bij9=9;/該位為標(biāo)志位int p = 0,q = 0;while(1)for(i=0;i9;i+)for(j=0;j9;j+)if(bij9!=0&aij0)bij9=0;count+;del(i,j
23、);/檢測(cè)和標(biāo)志函數(shù),用于判斷是否有與aij重復(fù)的數(shù)else if(bij9=1)bij9=0;for(m=0;m8)messagebox(對(duì)不起,您設(shè)定的數(shù)獨(dú)有錯(cuò)誤,請(qǐng)檢查后再進(jìn)行此操作!);break;if(count=81)break;show();/顯示自動(dòng)求解后的數(shù)到81個(gè)文本框中;(3)界面美化的具體實(shí)現(xiàn)過(guò)程:各個(gè)對(duì)話框的背景背景說(shuō)明: 在每個(gè)對(duì)話框中,背景色都采用了深綠色,這樣一方面給人一種清爽舒適的感覺(jué),另一方面可以使81個(gè)文本框中的數(shù)字顯得格外醒目、清楚,為用戶的操作提供了方便;實(shí)現(xiàn)方法: 在主對(duì)話框中的xxx.cpp文件的bool clianxiapp:initinstan
24、ce()函數(shù)中加入setdialogbkcolor(rgb(0,92,0),rgb(222,74,29);即可;主對(duì)話框和作者簡(jiǎn)介中的照片照片說(shuō)明:主對(duì)話框中采用了一張24位的位圖數(shù)獨(dú)照片,作者簡(jiǎn)介中采用了是一張24位真彩色的作者照片;插入照片實(shí)現(xiàn)方法:分別在主對(duì)話框和作者簡(jiǎn)介對(duì)話框中的void clianxidlg:onpaint()和 void author : onpaint( )函數(shù)的else 中去掉原來(lái)的cdialog:onpaint();然后再加入 cpaintdc dc(this); crect rect; getclientrect(&rect); cdc dcmem; dcm
25、em.createcompatibledc(&dc); cbitmap bmpbackground; bmpbackground.loadbitmap(idb_bitmap4); /idb_bitmap是你自己的圖對(duì)應(yīng)的id bitmap bitmap; bmpbackground.getbitmap(&bitmap); cbitmap *pbmpold=dcmem.selectobject(&bmpbackground); dc.stretchblt(0,0,rect.width()*2/3,rect.height(),&dcmem,0,0, bitmap.bmwidth*4/5,bitma
26、p.bmheight,srccopy); 即可插入自己想要插入的照片了。五、調(diào)試與測(cè)試(1)游戲的功能及界面展示:主界面:圖5.1 游戲的主界面圖游戲說(shuō)明:圖5.2 游戲的說(shuō)明圖版本信息:作者簡(jiǎn)介:圖5.3 作者簡(jiǎn)介退出系統(tǒng):圖5.4 退出系統(tǒng)提示游戲界面:圖5.5 游戲主界面圖自動(dòng)求解功能:圖5.6 自動(dòng)求解功能確認(rèn)完成功能:圖5.7 確認(rèn)完成(2)游戲測(cè)試:圖5.8 游戲測(cè)試 1圖5.9 游戲測(cè)試2(3)遇到的問(wèn)題及解決方法:、問(wèn)題:.在進(jìn)入游戲界面后,如果直接點(diǎn)擊新游戲,則會(huì)出現(xiàn)錯(cuò)誤,如圖 所示:圖6.1 問(wèn)題1解決方法:在新游戲函數(shù)中,將簡(jiǎn)單這一檔設(shè)為默認(rèn)的難以選擇檔,并且設(shè)置一個(gè)標(biāo)志
27、flag = false;在點(diǎn)擊一次新游戲后就將flag = true。這樣就可以解決這個(gè)問(wèn)題了;代碼如下:int iradio, level; srand (unsigned int)time(null); level = rand()%2; if(!flag)(cbutton*)getdlgitem(idc_radio1)-setcheck(1); flag = true;、問(wèn)題當(dāng)用戶填寫(xiě)完成點(diǎn)了確認(rèn)完成之后,由于沒(méi)有將文本框中的數(shù)按順序賦值給數(shù)組a,所以即使用戶正確的填寫(xiě)完成了所有的空后,程序仍然會(huì)顯示出錯(cuò)誤的提示信息。如圖 :圖6.2 問(wèn)題2解決方案:使用一個(gè)回顯函數(shù)reshow(),
28、并在此函數(shù)中使用aij =getdlgitemint(idc_editx);將文本中的每一個(gè)數(shù)都再反過(guò)來(lái)付給數(shù)組即可以了;其中reshow()函數(shù)的具體實(shí)現(xiàn)詳見(jiàn)核心代碼清單。正確的如下圖:圖6.3 問(wèn)題2得以解決六、實(shí)習(xí)日志(1)2月20日2月21日:通過(guò)網(wǎng)絡(luò)和各類書(shū)籍了解有關(guān)數(shù)獨(dú)的相關(guān)知識(shí),熟悉數(shù)獨(dú)的游戲規(guī)則以及主要算法;(2)2月22日2月24日:下載有關(guān)mfc的相關(guān)資料,并且在盡量在最短的時(shí)間內(nèi)學(xué)會(huì)一些基本知識(shí),例如如何生成對(duì)話框,為按鈕添加消息函數(shù)等;(3)2月27日:在vc6.0中設(shè)計(jì)出游戲所需要的各種對(duì)話框,以及相應(yīng)按鈕,并且為按鈕添加消息響應(yīng)函數(shù);(4)2月28日2月29日:為各
29、種消息相應(yīng)函數(shù)實(shí)現(xiàn)其功能,重點(diǎn)是實(shí)現(xiàn)數(shù)獨(dú)的求解算法和判定算法;(5)2月31日2月32日:完成實(shí)施計(jì)劃書(shū)和課程論文以及ppt的制作,并且為課程答辯做好相關(guān)的準(zhǔn)備。七、實(shí)習(xí)總結(jié)經(jīng)過(guò)一學(xué)期的學(xué)習(xí)和這幾天的實(shí)習(xí),學(xué)生覺(jué)得收獲頗豐。雖然要在很短的時(shí)間里學(xué)完很厚的一本書(shū),上課也很快,但老師教學(xué)很有方法,通過(guò)課前提問(wèn)督促大家預(yù)習(xí)、復(fù)習(xí),所以感覺(jué)c+還算學(xué)懂了。在這里先對(duì)這一學(xué)期學(xué)習(xí)c+的學(xué)習(xí)方法,學(xué)習(xí)習(xí)慣.等做一總結(jié),或許對(duì)將來(lái)的學(xué)習(xí)會(huì)很有用處。其實(shí)這學(xué)習(xí)方法和學(xué)習(xí)習(xí)慣是一回事,好的學(xué)習(xí)習(xí)慣就是最好的學(xué)習(xí)方法,好的學(xué)習(xí)方法一定包括有好的學(xué)習(xí)習(xí)慣。我以前只有課前預(yù)習(xí)的習(xí)慣,這學(xué)期在老師課前提問(wèn)的督促下我才養(yǎng)
30、成了復(fù)習(xí)的習(xí)慣。而且復(fù)習(xí)還不能只復(fù)習(xí)一遍,課后課前都必須復(fù)習(xí)一遍,課后不復(fù)習(xí)很快就忘了,即便是課后復(fù)習(xí)了但到了下次課時(shí)也忘得差不多了,所以課前又得復(fù)習(xí)一遍,這樣才能記住,上課才能回答上老師提的問(wèn)題。這樣一開(kāi)始就打下了比較好的基礎(chǔ),有了好的基礎(chǔ)才不會(huì)影響后面的學(xué)習(xí),而且還能取得事半功倍的效果,這樣就會(huì)越學(xué)越簡(jiǎn)單,越學(xué)越輕松,越學(xué)越想學(xué)。從對(duì)c+的學(xué)習(xí)我知道了對(duì)任何新科目的學(xué)習(xí)就要在剛開(kāi)始時(shí)多下功夫,首先要把基礎(chǔ)打好,這樣后面的才能學(xué)懂。一般情況下前面的部分會(huì)比后面的簡(jiǎn)單,前面的都沒(méi)學(xué)好或沒(méi)學(xué)懂,那后面的就不用說(shuō)了。平時(shí)上機(jī)練習(xí)只要用到循環(huán)都用的是for循環(huán),基本沒(méi)用過(guò)while和do-while
31、,不能說(shuō)對(duì)這兩個(gè)循環(huán)不熟悉,就是因?yàn)閺膩?lái)沒(méi)調(diào)試過(guò),就不知道從一開(kāi)始記的就是錯(cuò)的,而且越記越熟悉,復(fù)習(xí)了很多次都沒(méi)發(fā)現(xiàn)錯(cuò)誤,所以理所因當(dāng)?shù)冒阉?dāng)成了“真理”。這次期末考試中遇到了一個(gè)找語(yǔ)法錯(cuò)誤的題,其中就有while和do-while結(jié)構(gòu),我就沒(méi)把它找出來(lái),因?yàn)槲沂紫染桶颜_答案排除了。我的收獲就是學(xué)習(xí)c+就沒(méi)有什么是真理,只有編譯系統(tǒng)才是真理,只要編譯系統(tǒng)不認(rèn)可理論再正確也無(wú)濟(jì)于事。這一點(diǎn)在這次c+實(shí)習(xí)中體現(xiàn)得淋漓盡致,后面對(duì)實(shí)習(xí)的總結(jié)中還會(huì)提到,這里便不多說(shuō)了。還有一些收獲來(lái)自這幾天的實(shí)習(xí),對(duì)于實(shí)習(xí)的感覺(jué)很復(fù)雜,可以用“酸甜苦辣”四個(gè)字來(lái)形容。在程序構(gòu)思階段感覺(jué)是酸的,但酸中有甜;構(gòu)思好算法
32、后具體編寫(xiě)程序的過(guò)程和程序最后運(yùn)行的時(shí)候是甜的, 又甜中帶酸;而程序調(diào)試的過(guò)程和反復(fù)數(shù)據(jù)輸入的過(guò)程就是苦的辣的。每次調(diào)試的時(shí)候看著那幾十行不知所云的錯(cuò)誤我真是欲哭無(wú)淚。還有那幾百行的數(shù)據(jù)輸入,輸入一次兩次還能忍受,但要很多次的反復(fù)輸入實(shí)在是讓人枯燥得惡心。還有一點(diǎn)不得不提,這次實(shí)習(xí)其實(shí)程序我很早就編好了,但是遇到一個(gè)莫名其妙的問(wèn)題,讓我調(diào)試幾天都不知道是什么原因。還好老師經(jīng)驗(yàn)豐富,找到哪里出錯(cuò)了。并且在不知道為什么出錯(cuò)的情況下還能把它改正確了,實(shí)在是太厲害了,佩服!佩服!看來(lái)調(diào)試程序還不能光靠理論,經(jīng)驗(yàn)還是很重要的。從這次實(shí)習(xí)中我知道了編程序、調(diào)試程序必須要得有耐心,越是著急越是寫(xiě)不出來(lái)、調(diào)試
33、不出來(lái)。感想就到此為止,其實(shí)呢我感想很多,但現(xiàn)在就先說(shuō)這些吧,希望以后還有機(jī)會(huì)與老師當(dāng)面交流。最后再次感謝老師半年來(lái)的傳授、指導(dǎo)、幫助,學(xué)生銘記在心。八、附錄:核心代碼清單(1)主對(duì)話框的建立以及各個(gè)子對(duì)話框的建立代碼實(shí)現(xiàn)過(guò)程: / lianxidlg.cpp : implementation file/#include stdafx.h#include lianxi.h#include lianxidlg.h#ifdef _debug#define new debug_new#undef this_filestatic char this_file = _file_;#endif#inclu
34、de gamedialog.h#include gameinstruction.h#include authordlg.h/ caboutdlg dialog used for app aboutclass caboutdlg : public cdialogpublic:caboutdlg();/ dialog data/afx_data(caboutdlg)enum idd = idd_aboutbox ;/afx_data/ classwizard generated virtual function overrides/afx_virtual(caboutdlg)protected:v
35、irtual void dodataexchange(cdataexchange* pdx); / ddx/ddv support/afx_virtual/ implementationprotected:/afx_msg(caboutdlg)/afx_msgdeclare_message_map();caboutdlg:caboutdlg() : cdialog(caboutdlg:idd)/afx_data_init(caboutdlg)/afx_data_initvoid caboutdlg:dodataexchange(cdataexchange* pdx)cdialog:dodata
36、exchange(pdx);/afx_data_map(caboutdlg)/afx_data_mapbegin_message_map(caboutdlg, cdialog)/afx_msg_map(caboutdlg)/ no message handlers/afx_msg_mapend_message_map()/ clianxidlg dialogclianxidlg:clianxidlg(cwnd* pparent /*=null*/): cdialog(clianxidlg:idd, pparent)/afx_data_init(clianxidlg)/ note: the cl
37、asswizard will add member initialization here/afx_data_init/ note that loadicon does not require a subsequent destroyicon in win32m_hicon = afxgetapp()-loadicon(idi_icon1);void clianxidlg:dodataexchange(cdataexchange* pdx)cdialog:dodataexchange(pdx);/afx_data_map(clianxidlg)/ note: the classwizard w
38、ill add ddx and ddv calls here/afx_data_mapbegin_message_map(clianxidlg, cdialog)/afx_msg_map(clianxidlg)on_wm_syscommand()on_wm_paint()on_wm_querydragicon()on_bn_clicked(idc_entrance, onentrance)on_bn_clicked(idc_gamerule, ongamerule)on_bn_clicked(idc_copyright, oncopyright)on_bn_clicked(idc_author
39、, onauthor)/afx_msg_mapend_message_map()/ clianxidlg message handlersbool clianxidlg:oninitdialog()cdialog:oninitdialog();/ add about. menu item to system menu./ idm_aboutbox must be in the system command range.assert(idm_aboutbox & 0xfff0) = idm_aboutbox);assert(idm_aboutbox appendmenu(mf_separator
40、);psysmenu-appendmenu(mf_string, idm_aboutbox, straboutmenu);/ set the icon for this dialog. the framework does this automatically/ when the applications main window is not a dialogseticon(m_hicon, true);/ set big iconseticon(m_hicon, false);/ set small icon/ todo: add extra initialization hereretur
41、n true; / return true unless you set the focus to a controlvoid clianxidlg:onsyscommand(uint nid, lparam lparam)if (nid & 0xfff0) = idm_aboutbox)caboutdlg dlgabout;dlgabout.domodal();elsecdialog:onsyscommand(nid, lparam);/ if you add a minimize button to your dialog, you will need the code below/ to
42、 draw the icon. for mfc applications using the document/view model,/ this is automatically done for you by the framework.void clianxidlg:onpaint() if (isiconic()cpaintdc dc(this); / device context for paintingsendmessage(wm_iconerasebkgnd, (wparam) dc.getsafehdc(), 0);/ center icon in client rectang
43、leint cxicon = getsystemmetrics(sm_cxicon);int cyicon = getsystemmetrics(sm_cyicon);crect rect;getclientrect(&rect);int x = (rect.width() - cxicon + 1) / 2;int y = (rect.height() - cyicon + 1) / 2;/ draw the icondc.drawicon(x, y, m_hicon);else/cdialog:onpaint(); cpaintdc dc(this); crect rect; getcli
44、entrect(&rect); cdc dcmem; dcmem.createcompatibledc(&dc); cbitmap bmpbackground; bmpbackground.loadbitmap(idb_bitmap4); /idb_bitmap是你自己的圖對(duì)應(yīng)的id bitmap bitmap; bmpbackground.getbitmap(&bitmap); cbitmap *pbmpold=dcmem.selectobject(&bmpbackground); dc.stretchblt(0,0,rect.width()*2/3,rect.height(),&dcmem
45、,0,0, bitmap.bmwidth*4/5,bitmap.bmheight,srccopy); / the system calls this to obtain the cursor to display while the user drags/ the minimized window.hcursor clianxidlg:onquerydragicon()return (hcursor) m_hicon;void clianxidlg:onentrance() / todo: add your control notification handler code heregamedialog dgs;dgs.domodal();/flg = 0;void clianxidlg:ongamerule() / todo: add your control notification handler code heregameinstruction gps;gps.domodal();void clianxidlg:oncopyright() / todo: add your control notification handler
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度成品油運(yùn)輸綠色環(huán)保承諾合同范本4篇
- 二零二五版跨境電商倉(cāng)儲(chǔ)物流一體化服務(wù)合同6篇
- 全身炎癥反應(yīng)指數(shù)和斑塊特征與急性腦缺血事件嚴(yán)重程度及復(fù)發(fā)的相關(guān)性研究
- 2025年度鋁合金建筑模板設(shè)計(jì)與租賃合同4篇
- 2025年度生態(tài)旅游度假村民宿布草租賃服務(wù)合同4篇
- 二零二五年度充電樁充電站設(shè)計(jì)與施工合同7篇
- 通化廠房施工方案
- 個(gè)人專利許可使用協(xié)議(2024版)3篇
- 2025技術(shù)類合同參考格式
- 二零二五寵物領(lǐng)養(yǎng)登記及咨詢服務(wù)協(xié)議4篇
- 人教版初中語(yǔ)文2022-2024年三年中考真題匯編-學(xué)生版-專題08 古詩(shī)詞名篇名句默寫(xiě)
- 2024-2025學(xué)年人教版(2024)七年級(jí)(上)數(shù)學(xué)寒假作業(yè)(十二)
- 山西粵電能源有限公司招聘筆試沖刺題2025
- 醫(yī)療行業(yè)軟件系統(tǒng)應(yīng)急預(yù)案
- 使用錯(cuò)誤評(píng)估報(bào)告(可用性工程)模版
- 《精密板料矯平機(jī) 第2部分:技術(shù)規(guī)范》
- 2024光伏發(fā)電工程交流匯流箱技術(shù)規(guī)范
- 旅游活動(dòng)碳排放管理評(píng)價(jià)指標(biāo)體系構(gòu)建及實(shí)證研究
- 2022年全國(guó)職業(yè)院校技能大賽-電氣安裝與維修賽項(xiàng)規(guī)程
- 2024年黑龍江省政工師理論知識(shí)考試參考題庫(kù)(含答案)
- 四年級(jí)上冊(cè)脫式計(jì)算300題及答案
評(píng)論
0/150
提交評(píng)論