版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《面向對象程序設計》</p><p><b> 課程設計</b></p><p> 題 目: 吃豆子游戲程序 </p><p> 院 系: 數學與計算科學學院 </p&
2、gt;<p> 專 業(yè): 信息與計算科學 </p><p> 指導老師: </p><p> 日 期: 2014 年 12 月 30 日</p><p><b&g
3、t; 心得體會:</b></p><p> 通過這次課程設計,我從對MFC的陌生到能熟練運用基本的函數,了解其編程的具體實現方法,我對于面象對向編程有了更深刻的認識,通過四個人的團隊合作,我從主持諧調各方面工作,如聽取各方面意見,看成員整理好的資料,到擔任代碼編寫,學會了團隊合作的重要性,團隊合作在寫大的程序時比單個人完成有很大的優(yōu)點。我會繼續(xù)在面向對象編程上下功夫,因為學無止境。</p&g
4、t;<p><b> 摘 要</b></p><p> MFC是Windows編程的面向對象化,是對Windows函數的簡單封裝,使用MFC編程可以在短時間內編寫一個Windows程序,而不必寫大量Windows代碼,所以我使用MFC編寫了一個吃豆子程序,該程序實現了一個能過使用方向鍵控制消除屏幕上存在的豆子的功能,當用戶按鍵盤向上、下、左、右鍵或每格一秒鐘,嘴的狀態(tài)發(fā)生
5、改變,或是從一個方向張開向另一個方向,或是由張開變成閉合狀態(tài),從而實現嘴一張一合前進,當嘴所經過位置有豆子,豆子被消除而不再出現,所有豆子被“吃”完時,程序彈出對話框“You win ,Exit?”,用戶點確定后可退出程序。實現方法:嘴的張開與閉合分別用MFC的Pie和Ellipse函數實現,豆子被存儲在一個標記數組中,豆子被吃時數組相應元素標記為零。在OnDraw()函數中畫出每個豆子和嘴的原始位置,在響應鍵盤上下左右方向虛擬鍵VK_
6、UP、VK_DOWN、VK_LEFT、VK_RIGTH的函數中控制豆子移動和嘴的方向,程序開始時在響應WM_CREATE消息的函數中設置一個TIMER,方向鍵消息和TIMER消息統(tǒng)一由一個判斷函數處理從而實現自動前進時的沿當前方向前進。</p><p> 關鍵字:程序設計 豆子 MFC </p><p><b> Abstract</b></p>&
7、lt;p> MFC is a Windows-based object-oriented programming, it is a simple package of Windows 'function , using the MFC programming can make us write a Windows program in a short time, without having to write a lot
8、 of Windows code, so I use MFC written a eat-beans program ,in this program we can use the arrow keys to control the mouth to move to eliminating the beans on the screen, when the user presses the keyboard up, down, left
9、, right, or each time one second goes by, the state of the mouth changed,</p><p> Key words: programming Eat-beans MFC</p><p><b> 目 錄</b></p><p> 引言…………………………………
10、…………………………</p><p><b> CRC分析過程陳述</b></p><p><b> 程序介紹與展示</b></p><p> 程序測試……………….</p><p><b> 結果分析與總結</b></p><p><b&
11、gt; 參考文獻</b></p><p><b> 引言</b></p><p> 在本次課程設計中,課題組主要是想通過吃豆子游戲的開發(fā),讓自身在軟件開發(fā)的知識水平提升一個檔次,特別是對軟件開發(fā)形成一種概念,同時加強培養(yǎng)團隊合作意識。這個課設的要求是要課題組用MFC編寫一個吃豆子的小游戲,這個游戲是用方向鍵控制一個”小怪獸”移動并吃掉界面上的所有的“
12、小豆子”,</p><p> 隨后經歷了一個星期的分析與討論后,課題組正式進入課題系統(tǒng)實質性的開發(fā)階段。課題組把程序開發(fā)的過程分為程序分析、程序設計、程序實現和程序測試四個階段,在程序分析中,對程序進行了可行性分析、需求分析以及功能分析,在結束這階段的工作后轉入系統(tǒng)設計階段;在系統(tǒng)設計中,主要是明確整個程序的界面模塊、算法實現、以及極限問題等;系統(tǒng)的實現,歷經一個半月,主要是實現系統(tǒng)設計中的所有模塊功能;最后利
13、用了一周的時間對程序中的各個模塊進行了測試,最終完成系統(tǒng)的測試;</p><p> 在完成開發(fā)工作后,課題組的任務立刻轉向課設論文的寫作,課題組各成員課設論文的寫作內容原則上就是其在設計開發(fā)中所承擔的主要任務,最后總結成了本篇論本。 </p><p><b> CRC分析過程陳述</b></p><p> 其中dispose()
14、函數用得最多。OnMoveleft,OnMoveright都調用dispose()函數來處理消息。</p><p> 按鍵向上,向下,向左,向右,消息響應函數:</p><p> 嘴的圖形是一個圓形與一個扇形交替顯示,圓形表示嘴閉合的情況,扇形表示嘴張開的形狀;繪制圓形和扇形的函數為CDC類的成員函數Ellipse和Pie;</p><p> 豆子可以存儲在一
15、個數組中,數組的數據是每個豆子圓心的坐標;在OnDraw()函數中畫出每個豆子和嘴的原始位置,鍵盤上下左右方向鍵的虛擬鍵碼分別為VK_UP、VK_DOWN、VK_LEFT、VK_RIGTH,在程序開始時的WM_CREATE的響應函數中設置一個TIMER,在CView的派生類中對方向鍵和TIMER消息用統(tǒng)一函數處理,dispose中處理為:若是TIMER消息則嘴前進方向與當前方向一致再處理前進,若是方向消息則嘴前進方向為方向鍵所指方向。&
16、lt;/p><p><b> 1.3 功能說明</b></p><p><b> UML類圖</b></p><p><b> 數據、分析</b></p><p> 此程序的設計按面向對象的方法進行,系統(tǒng)具有良好的界面;必要的交互信息;簡約美觀的效果。使用人員能快捷簡單地進
17、行操作。本游戲實現了一個能過使用方向鍵控制消除屏幕上存在的物體(即所謂嘴)來到達另一個地方來消除另一地方存在的物體即所謂豆子,嘴有張合狀態(tài),張開時可以有四個方向的張開,類似一個大嘴巴。閉合時就是一個圓形。嘴若是接受方向消息時,方向消息與當前方向不一致,則嘴在轉向過后保持開的狀態(tài)。當所有豆子被吃完后,彈出對對話框顯示:“You win,Exit?”,用戶寫確定后可退</p><p><b> 背景畫法實
18、現</b></p><p> 先實現畫一條線段的函數</p><p> void CEatBeanView::Draw_Segment(int pax,int pay,int pbx,int pby)</p><p><b> {</b></p><p> CDC *pDC = GetDC();&l
19、t;/p><p> pDC->MoveTo(b1[pax][pay]);</p><p> pDC->LineTo(b1[pbx][pby]);</p><p><b> },</b></p><p> 再畫橫向和縱向的各從1到length+1和width+1的線段,從而實現畫背景網絡:</p>
20、;<p><b> 豆子畫法實現</b></p><p><b> 嘴張開實現</b></p><p> 嘴張開有四個方向,要實現可以使用CDC類的Pie函數畫一個張開角度為2700的扇形。</p><p> void CEatBeanView::Draw_Mouth_Open(int x, int
21、y)</p><p><b> {</b></p><p> CDC*pDC = GetDC();</p><p><b> CBrush*p;</b></p><p> p = (CBrush*)pDC->SelectStockObject(LTGRAY_BRUSH);</p&
22、gt;<p> switch(Current_Direction)/*查 看 當 前 嘴 的 方 向 */</p><p><b> {</b></p><p> case 'u':/*方 向 向 上 的 情 況 */</p><p> pDC->Pie(b[x], b[y], b[x+1], b[y
23、+1],</p><p> b[x+1], b[y+1], b[x], b[y+1]);break;</p><p> case 'l':/*方 向 向 左 的 情 況 */</p><p> pDC->Pie(b[x], b[y], b[x+1], b[y+1],</p><p> b[x], b[y+1],
24、b[x], b[y]);break;</p><p> case 'd':/*方 向 向 下 的 情 況 */</p><p> pDC->Pie(b[x], b[y], b[x+1], b[y+1],</p><p> b[x], b[y], b[x+1], b[y]);break;</p><p> case
25、 'r':/*方 向 向 右 的 情 況 */</p><p> pDC->Pie(b[x], b[y], b[x+1], b[y+1],</p><p> b[x+1], b[y], b[x+1], b[y+1]);break;</p><p><b> }</b></p><p><
26、b> }</b></p><p><b> 畫嘴巴的實現</b></p><p> 畫嘴巴的關閉可以用Ellipse函數.</p><p> void CEatBeanView::Draw_Mouth_Closing(int x, int y)</p><p><b> {</
27、b></p><p> CDC*pDC = GetDC();</p><p> CBrush *p;</p><p> p = (CBrush*)pDC->SelectStockObject(LTGRAY_BRUSH);</p><p> pDC->Ellipse(b[x],b[y],b[x+1],b[y+1]);&
28、lt;/p><p><b> }</b></p><p><b> 畫豆子的實現</b></p><p><b> 畫一個豆子的實現:</b></p><p> void CEatBeanView::Draw_One_Bean(int x, int y)</p>
29、<p><b> {</b></p><p> CDC*pDC = GetDC();</p><p> CBrush *p;</p><p> p = (CBrush*)pDC->SelectStockObject(LTGRAY_BRUSH);</p><p> pDC->Ellips
30、e( b[x],b[y], b[x+1], b[y+1]);</p><p><b> }</b></p><p><b> 畫所有豆子:</b></p><p> void CEatBeanView::Draw_All_Beans()</p><p><b> {</b&g
31、t;</p><p> for (i = 1; i < length + 1; i++)</p><p> for (j = 1; j < width + 1; j++)</p><p> if (Beans_Array[i][j])</p><p> Draw_One_Bean(i, j);</p><
32、;p><b> }</b></p><p> 算法描述:當標記數組的(I,j)元素為非零值時,調用畫一個豆子的函數Draw_One_Bean畫坐標(i,j)處的豆子。</p><p><b> 核心算法:</b></p><p> 將嘴的當前方向聲明為數據成員,再聲明一個方向消息,響應方向鍵的函數只負責修改當
33、前方向,若是方向鍵響應函數則將消息方向賦值為該方向鍵對應方向,如下:</p><p> void CEatBeanView::OnMoveup()</p><p><b> {</b></p><p> Direction_Message = 'u';</p><p> dispose();<
34、;/p><p><b> }</b></p><p> void CEatBeanView::OnMovedown()</p><p><b> {</b></p><p> Direction_Message = 'd';</p><p> dispo
35、se();</p><p><b> }</b></p><p> void CEatBeanView::OnMoveleft()</p><p><b> {</b></p><p> Direction_Message = 'l';</p><p>
36、; dispose();</p><p><b> }</b></p><p> void CEatBeanView::OnMoveright()</p><p><b> {</b></p><p> Direction_Message = 'r';</p>
37、<p> dispose();</p><p><b> }</b></p><p> 若是處理定時器消息,即處理每隔一段時間嘴向前一次時,不用改當前方向,因為方向沒有發(fā)生變化,只是調用dispose根據當前方向的值處理消息: </p><p> afx_msg LRESULT CEatBeanView::OnTimeto
38、go(WPARAM wParam, LPARAM lParam)</p><p><b> {</b></p><p> dispose();</p><p><b> return 0;</b></p><p><b> }</b></p><p&
39、gt; 其中在dispose中判斷消息方向是否是當前方向,若是,將方向消息轉化成位移: </p><p> switch(Direction_Message)/*將 方 向 信 息 轉 換 為 位 移 信 息 */</p><p><b> {</b></p><p><b> case'u':</b&g
40、t;</p><p> Mouth_Displacement.x = 0;Mouth_Displacement.y = 1;break;</p><p><b> case'l':</b></p><p> Mouth_Displacement.x = -1;Mouth_Displacement.y = 0;break;&
41、lt;/p><p><b> case'd':</b></p><p> Mouth_Displacement.x = 0;Mouth_Displacement.y = -1;break;</p><p><b> case'r':</b></p><p> Mo
42、uth_Displacement.x = 1;Mouth_Displacement.y = 0;break;</p><p><b> } </b></p><p> 若將嘴可能的下一位置用該位移和當前坐標賦值:</p><p> pre_position.x = Mouth_Position.x+ Mouth_Displacement
43、.x;</p><p> pre_position.y = Mouth_Position.y+ Mouth_Displacement.y;</p><p> 判斷該下一點位置是否越界:</p><p> if (pre_position.x >= 1 && pre_position.x <= length&&<
44、;/p><p> pre_position.y >= 1 && pre_position.y <= width)</p><p> 是則判斷下一點是否有豆子, </p><p> if(Beans_Array[pre_position.x][pre_position.y]==1) </p><p><b
45、> nbeans--;</b></p><p> 將下一點的豆子所在標記數組元素標記置零, </p><p> Beans_Array[pre_position.x][pre_position.y] = 0; </p><p> 設置下一點到達區(qū)域:</p><p> pre_rect.bottom = b[pre
46、_position.y];</p><p> pre_rect.top = b[pre_position.y+1];</p><p> pre_rect.left = b[pre_position.x];</p><p> pre_rect.right = b[pre_position.x+1]; </p><p> 再設置嘴位置為下
47、一點預到達位置(因確定不越界):</p><p> Mouth_Position = pre_position; </p><p> 當方向消息不是當前消息就僅改變嘴方向,并令嘴一直開著,這樣使得嘴轉向后不會由開變成關。 </p><p> Current_Direction = Direction_Message;/*僅 改 變 方 向 */</p&
48、gt;<p> if (!MouthOpen)</p><p> MouthOpen = 1.0;</p><p> 方向判斷處理好后可以刷新之前嘴所在區(qū)域</p><p> InvalidateRect(current_rect, 1);,</p><p><b> 再將嘴顯示出來. </b>&
49、lt;/p><p> Draw_Mouth();</p><p> 最后判斷豆子個數是否為零,是則殺死計時器,顯示對話框提示。</p><p> if(nbeans==0)</p><p><b> {</b></p><p> KillTimer(1);</p><p&
50、gt; MessageShowBoxAndExit();</p><p><b> }</b></p><p><b> 程序結果的演示</b></p><p> 5.1測試的研究與選擇</p><p> 測試過程中要判斷測試是否成功,要分析程序界面的變化和計算數據的結果是否正確以及各功能
51、鍵是否能正常使用。</p><p><b> 5.2 測試環(huán)境</b></p><p><b> 測試環(huán)境如下: </b></p><p> 測試系統(tǒng): Windows 8.1</p><p> 測試工具: Visual Studio 2010 </p><p>
52、 5.3 實例測試結果</p><p> 2010如圖,改宏定義</p><p> 將長寬分別認置為8,5,運行</p><p><b> 如圖</b></p><p> 嘴方向為向上,按向下鍵,得</p><p> 不按鍵盤,則嘴也一直前進</p><p>
53、如上圖,嘴自動前進時一直在所示位置一張一合,說明數組沒有越界。</p><p> 此時按鍵盤向右鍵,豆子轉向右,轉向功能實現:</p><p><b> 吃豆子如下:</b></p><p><b> 吃完豆子如下:</b></p><p> 參考文獻(單獨一頁)</p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設計-教學游戲
- c++課程設計--c++程序設計語言
- c++課程設計拼圖游戲
- c++課程設計-- c++面向對象程序設計
- c++課程設計報告---猴子吃桃問題
- c++課程設計報告--坦克游戲
- c++課程設計報告--猜數游戲
- 吃豆子游戲.zip
- c++剪刀石頭布游戲課程設計
- c++剪刀石頭布游戲課程設計
- 猜單詞游戲c++課程設計報告
- c++程序設計課程設計報告
- 《c++程序設計課程設計——復數類》
- 《c++語言程序設計》課程設計報告
- 《程序設計語言(c++)》課程設計
- c++課程設計--設計菜單選擇程序
- c++猜單詞課程設計--——猜單詞游戲
- 基于c++的教師排課程序課程設計
- c程序課程設計報告(掃雷游戲)
- 銀行活期儲蓄程序課程設計c++
評論
0/150
提交評論