2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《面向?qū)ο蟪绦蛟O(shè)計》</p><p><b>  課程設(shè)計</b></p><p>  題 目: 吃豆子游戲程序 </p><p>  院 系: 數(shù)學(xué)與計算科學(xué)學(xué)院 </p&

2、gt;<p>  專 業(yè): 信息與計算科學(xué) </p><p>  指導(dǎo)老師: </p><p>  日 期: 2014 年 12 月 30 日</p><p><b&g

3、t;  心得體會:</b></p><p>  通過這次課程設(shè)計,我從對MFC的陌生到能熟練運用基本的函數(shù),了解其編程的具體實現(xiàn)方法,我對于面象對向編程有了更深刻的認(rèn)識,通過四個人的團(tuán)隊合作,我從主持諧調(diào)各方面工作,如聽取各方面意見,看成員整理好的資料,到擔(dān)任代碼編寫,學(xué)會了團(tuán)隊合作的重要性,團(tuán)隊合作在寫大的程序時比單個人完成有很大的優(yōu)點。我會繼續(xù)在面向?qū)ο缶幊躺舷鹿Ψ?,因為學(xué)無止境。</p&g

4、t;<p><b>  摘 要</b></p><p>  MFC是Windows編程的面向?qū)ο蠡?是對Windows函數(shù)的簡單封裝,使用MFC編程可以在短時間內(nèi)編寫一個Windows程序,而不必寫大量Windows代碼,所以我使用MFC編寫了一個吃豆子程序,該程序?qū)崿F(xiàn)了一個能過使用方向鍵控制消除屏幕上存在的豆子的功能,當(dāng)用戶按鍵盤向上、下、左、右鍵或每格一秒鐘,嘴的狀態(tài)發(fā)生

5、改變,或是從一個方向張開向另一個方向,或是由張開變成閉合狀態(tài),從而實現(xiàn)嘴一張一合前進(jìn),當(dāng)嘴所經(jīng)過位置有豆子,豆子被消除而不再出現(xiàn),所有豆子被“吃”完時,程序彈出對話框“You win ,Exit?”,用戶點確定后可退出程序。實現(xiàn)方法:嘴的張開與閉合分別用MFC的Pie和Ellipse函數(shù)實現(xiàn),豆子被存儲在一個標(biāo)記數(shù)組中,豆子被吃時數(shù)組相應(yīng)元素標(biāo)記為零。在OnDraw()函數(shù)中畫出每個豆子和嘴的原始位置,在響應(yīng)鍵盤上下左右方向虛擬鍵VK_

6、UP、VK_DOWN、VK_LEFT、VK_RIGTH的函數(shù)中控制豆子移動和嘴的方向,程序開始時在響應(yīng)WM_CREATE消息的函數(shù)中設(shè)置一個TIMER,方向鍵消息和TIMER消息統(tǒng)一由一個判斷函數(shù)處理從而實現(xiàn)自動前進(jìn)時的沿當(dāng)前方向前進(jìn)。</p><p>  關(guān)鍵字:程序設(shè)計 豆子 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>  結(jié)果分析與總結(jié)</b></p><p><b&

11、gt;  參考文獻(xiàn)</b></p><p><b>  引言</b></p><p>  在本次課程設(shè)計中,課題組主要是想通過吃豆子游戲的開發(fā),讓自身在軟件開發(fā)的知識水平提升一個檔次,特別是對軟件開發(fā)形成一種概念,同時加強(qiáng)培養(yǎng)團(tuán)隊合作意識。這個課設(shè)的要求是要課題組用MFC編寫一個吃豆子的小游戲,這個游戲是用方向鍵控制一個”小怪獸”移動并吃掉界面上的所有的“

12、小豆子”,</p><p>  隨后經(jīng)歷了一個星期的分析與討論后,課題組正式進(jìn)入課題系統(tǒng)實質(zhì)性的開發(fā)階段。課題組把程序開發(fā)的過程分為程序分析、程序設(shè)計、程序?qū)崿F(xiàn)和程序測試四個階段,在程序分析中,對程序進(jìn)行了可行性分析、需求分析以及功能分析,在結(jié)束這階段的工作后轉(zhuǎn)入系統(tǒng)設(shè)計階段;在系統(tǒng)設(shè)計中,主要是明確整個程序的界面模塊、算法實現(xiàn)、以及極限問題等;系統(tǒng)的實現(xiàn),歷經(jīng)一個半月,主要是實現(xiàn)系統(tǒng)設(shè)計中的所有模塊功能;最后利

13、用了一周的時間對程序中的各個模塊進(jìn)行了測試,最終完成系統(tǒng)的測試;</p><p>  在完成開發(fā)工作后,課題組的任務(wù)立刻轉(zhuǎn)向課設(shè)論文的寫作,課題組各成員課設(shè)論文的寫作內(nèi)容原則上就是其在設(shè)計開發(fā)中所承擔(dān)的主要任務(wù),最后總結(jié)成了本篇論本。 </p><p><b>  CRC分析過程陳述</b></p><p>  其中dispose()

14、函數(shù)用得最多。OnMoveleft,OnMoveright都調(diào)用dispose()函數(shù)來處理消息。</p><p>  按鍵向上,向下,向左,向右,消息響應(yīng)函數(shù):</p><p>  嘴的圖形是一個圓形與一個扇形交替顯示,圓形表示嘴閉合的情況,扇形表示嘴張開的形狀;繪制圓形和扇形的函數(shù)為CDC類的成員函數(shù)Ellipse和Pie;</p><p>  豆子可以存儲在一

15、個數(shù)組中,數(shù)組的數(shù)據(jù)是每個豆子圓心的坐標(biāo);在OnDraw()函數(shù)中畫出每個豆子和嘴的原始位置,鍵盤上下左右方向鍵的虛擬鍵碼分別為VK_UP、VK_DOWN、VK_LEFT、VK_RIGTH,在程序開始時的WM_CREATE的響應(yīng)函數(shù)中設(shè)置一個TIMER,在CView的派生類中對方向鍵和TIMER消息用統(tǒng)一函數(shù)處理,dispose中處理為:若是TIMER消息則嘴前進(jìn)方向與當(dāng)前方向一致再處理前進(jìn),若是方向消息則嘴前進(jìn)方向為方向鍵所指方向。&

16、lt;/p><p><b>  1.3 功能說明</b></p><p><b>  UML類圖</b></p><p><b>  數(shù)據(jù)、分析</b></p><p>  此程序的設(shè)計按面向?qū)ο蟮姆椒ㄟM(jìn)行,系統(tǒng)具有良好的界面;必要的交互信息;簡約美觀的效果。使用人員能快捷簡單地進(jìn)

17、行操作。本游戲?qū)崿F(xiàn)了一個能過使用方向鍵控制消除屏幕上存在的物體(即所謂嘴)來到達(dá)另一個地方來消除另一地方存在的物體即所謂豆子,嘴有張合狀態(tài),張開時可以有四個方向的張開,類似一個大嘴巴。閉合時就是一個圓形。嘴若是接受方向消息時,方向消息與當(dāng)前方向不一致,則嘴在轉(zhuǎn)向過后保持開的狀態(tài)。當(dāng)所有豆子被吃完后,彈出對對話框顯示:“You win,Exit?”,用戶寫確定后可退</p><p><b>  背景畫法實

18、現(xiàn)</b></p><p>  先實現(xiàn)畫一條線段的函數(shù)</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的線段,從而實現(xiàn)畫背景網(wǎng)絡(luò):</p>

20、;<p><b>  豆子畫法實現(xiàn)</b></p><p><b>  嘴張開實現(xiàn)</b></p><p>  嘴張開有四個方向,要實現(xiàn)可以使用CDC類的Pie函數(shù)畫一個張開角度為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)/*查 看 當(dāng) 前 嘴 的 方 向 */</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>  畫嘴巴的實現(xiàn)</b></p><p>  畫嘴巴的關(guān)閉可以用Ellipse函數(shù).</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>  畫豆子的實現(xiàn)</b></p><p><b>  畫一個豆子的實現(xiàn):</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>  算法描述:當(dāng)標(biāo)記數(shù)組的(I,j)元素為非零值時,調(diào)用畫一個豆子的函數(shù)Draw_One_Bean畫坐標(biāo)(i,j)處的豆子。</p><p><b>  核心算法:</b></p><p>  將嘴的當(dāng)前方向聲明為數(shù)據(jù)成員,再聲明一個方向消息,響應(yīng)方向鍵的函數(shù)只負(fù)責(zé)修改當(dāng)

33、前方向,若是方向鍵響應(yīng)函數(shù)則將消息方向賦值為該方向鍵對應(yīng)方向,如下:</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>  若是處理定時器消息,即處理每隔一段時間嘴向前一次時,不用改當(dāng)前方向,因為方向沒有發(fā)生變化,只是調(diào)用dispose根據(jù)當(dāng)前方向的值處理消息: </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中判斷消息方向是否是當(dāng)前方向,若是,將方向消息轉(zhuǎn)化成位移: </p><p>  switch(Direction_Message)/*將 方 向 信 息 轉(zhuǎn) 換 為 位 移 信 息 */</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>  若將嘴可能的下一位置用該位移和當(dāng)前坐標(biāo)賦值:</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>  將下一點的豆子所在標(biāo)記數(shù)組元素標(biāo)記置零, </p><p>  Beans_Array[pre_position.x][pre_position.y] = 0; </p><p>  設(shè)置下一點到達(dá)區(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>  再設(shè)置嘴位置為下

47、一點預(yù)到達(dá)位置(因確定不越界):</p><p>  Mouth_Position = pre_position; </p><p>  當(dāng)方向消息不是當(dāng)前消息就僅改變嘴方向,并令嘴一直開著,這樣使得嘴轉(zhuǎn)向后不會由開變成關(guān)。 </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>  最后判斷豆子個數(shù)是否為零,是則殺死計時器,顯示對話框提示。</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>  程序結(jié)果的演示</b></p><p>  5.1測試的研究與選擇</p><p>  測試過程中要判斷測試是否成功,要分析程序界面的變化和計算數(shù)據(jù)的結(jié)果是否正確以及各功能

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 實例測試結(jié)果</p><p>  2010如圖,改宏定義</p><p>  將長寬分別認(rèn)置為8,5,運行</p><p><b>  如圖</b></p><p>  嘴方向為向上,按向下鍵,得</p><p>  不按鍵盤,則嘴也一直前進(jìn)</p><p>  

53、如上圖,嘴自動前進(jìn)時一直在所示位置一張一合,說明數(shù)組沒有越界。</p><p>  此時按鍵盤向右鍵,豆子轉(zhuǎn)向右,轉(zhuǎn)向功能實現(xiàn):</p><p><b>  吃豆子如下:</b></p><p><b>  吃完豆子如下:</b></p><p>  參考文獻(xiàn)(單獨一頁)</p>&l

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論