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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  計(jì)算機(jī)科學(xué)與技術(shù)學(xué)部</p><p><b>  面向?qū)ο笳n程設(shè)計(jì)</b></p><p>  題 目 俄 羅 斯 方 塊 </p><p>  學(xué) 部 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  班 級(jí) 計(jì) 科 1003班

2、</p><p>  指 導(dǎo) 教 師 </p><p>  姓 名 </p><p>  學(xué) 號(hào) </p><p><b>  2011年6月</b></p

3、><p><b>  摘 要</b></p><p>  俄羅斯方塊上手極其簡(jiǎn)單,但是要熟練地掌握其中的操作與擺放技巧,難度卻不低。作為家喻戶曉老少皆宜的大眾游戲,其普及程度可以說(shuō)是史上任何一款游戲都無(wú)法相比的。</p><p>  該俄羅斯方塊程序采用了面向?qū)ο缶幊陶Z(yǔ)言,我們運(yùn)用了很少有關(guān)計(jì)算機(jī)程序知識(shí),完成游戲的需求來(lái)實(shí)了游戲的一些簡(jiǎn)單的功能,

4、如不同樣式的俄羅斯方塊的隨機(jī)產(chǎn)生、俄羅斯方塊的鍵盤(pán)操作移動(dòng)功能、方塊滿行消行功能、方塊到頂游戲結(jié)束功能等。該課程設(shè)計(jì)中詳細(xì)闡述了程序的設(shè)計(jì)目標(biāo)、總體架構(gòu)及程序的詳細(xì)設(shè)計(jì)。</p><p>  俄羅斯方塊這款游戲,要通過(guò)設(shè)計(jì)者對(duì)界面的調(diào)色設(shè)置適當(dāng),方塊下落也要設(shè)置合理,因些我們這款游戲置了良好的用戶界面設(shè)計(jì),實(shí)現(xiàn)方塊下落時(shí),可通過(guò)鍵盤(pán)方向鍵(上、下、左、右鍵)對(duì)該方塊進(jìn)行向上(變行),向下(加速)、向左、向右移動(dòng)。

5、隨機(jī)給出不同的形狀(長(zhǎng)條形、Z字形、田字形、7字形等)下落填充給定的區(qū)域,若填滿一條便消掉,記分,當(dāng)達(dá)到一定的分?jǐn)?shù)時(shí),過(guò)關(guān),一共設(shè)置十關(guān),每關(guān)方塊下落的速度不同,游戲中先結(jié)束的一方為本局輸家,十關(guān)過(guò)后,勝出局?jǐn)?shù)多的為贏家,并且用戶通過(guò)界面可以看到下一個(gè)下落的方塊和下下一個(gè)下落的方塊,這樣給用戶降低了難度。從而讓廣大朋友越來(lái)越喜愛(ài)這款游戲。</p><p>  用戶啟動(dòng)游戲后,即進(jìn)入游戲主畫(huà)面,用戶按下[start

6、]按鈕后,就可以開(kāi)始玩游戲了,當(dāng)用戶想暫停時(shí),再次按一下[stop]按鈕,游戲就暫停了,并給予提示,在暫停的情況下再按[stop]按鈕,游戲繼續(xù)運(yùn)行。任何時(shí)候按[end]按鈕,游戲就會(huì)結(jié)束,并且繼續(xù)開(kāi)始游戲。</p><p>  由于設(shè)計(jì)者水平有限,不當(dāng)之處在所難免,如有好的建議懇請(qǐng)讀者提出并加以指正。</p><p>  關(guān)鍵詞:俄羅斯方塊;交互動(dòng)態(tài)更新;計(jì)時(shí)器;</p>

7、<p><b>  課程設(shè)計(jì)任務(wù)分配表</b></p><p><b>  表1</b></p><p><b>  表2</b></p><p>  相關(guān)編程知識(shí)的課程設(shè)計(jì)</p><p>  關(guān)鍵變量定義及作用:</p><p>  int

8、 m_GameEnd=1;//游戲是否結(jié)束</p><p>  int Level=1;//游戲過(guò)了幾關(guān)了</p><p>  int Score=0;//玩游戲中你所得到的分?jǐn)?shù)</p><p>  char m_Game_Pouse=TRUE;//游戲是否暫停</p><p>  char m_xialuo=true;//初始下落變量<

9、;/p><p>  int m_Sudu=200;//初始計(jì)時(shí)器時(shí)間間隔</p><p>  實(shí)現(xiàn)程序相關(guān)知識(shí)的引用:</p><p>  CBrush brush(crseg);//畫(huà)刷的應(yīng)用</p><p>  SetTimer(1,m_Sudu,NULL);// 安裝計(jì)時(shí)器</p><p>  BackGrounds

10、et(pDC);//描繪游戲背景</p><p>  m_NextImage(pDC,m_OldNextpoint,m_NextShape);//畫(huà)出下一個(gè)方塊</p><p>  m_NextImage(pDC,m_Nextpoint,m_Next2Shape);//畫(huà)出下下一個(gè)方塊</p><p>  m_DrawImage(pDC,m_pcurpos,m_Cu

11、rShape);//畫(huà)出當(dāng)前操作的方塊</p><p>  pDC -> TextOut(310, 120,lis);//畫(huà)一條豎線</p><p>  pDC->MoveTo(300,0);//移到某一個(gè)點(diǎn)</p><p>  pDC->LineTo(300,500);//畫(huà)出剛才MoveTo函數(shù)指向的那一個(gè)點(diǎn)的直線</p><

12、;p>  COLORREF wins=RGB(0,0,0);//背景顏色的設(shè)置</p><p>  CPen pen(PS_INSIDEFRAME,1,line);//畫(huà)筆的操作</p><p>  CancelRangle(pDC);//判斷是否可以消格,是否升級(jí)。</p><p><b>  目 錄</b></p>&

13、lt;p>  第1章 前 言1</p><p><b>  1.1簡(jiǎn)介說(shuō)明1</b></p><p>  1.1.1 研究背景1</p><p>  1.1.2 游戲適合對(duì)象及注意事項(xiàng)1</p><p>  1.2 設(shè)計(jì)的目的及工作原理1</p><p>  1.2.1工作原理

14、1</p><p>  1.2.2設(shè)計(jì)的目的1</p><p>  1.3 設(shè)計(jì)內(nèi)容2</p><p>  第2章 游戲功能分析4</p><p>  2.1 游戲總體功能分析4</p><p>  2.1.1描繪俄羅斯方塊功能和方塊預(yù)覽功能4</p><p>  2.1.2方塊自由

15、下落及判斷功能和描繪背景方塊堆積狀況的功能6</p><p>  2.1.3按鍵操作響應(yīng)功能和消行加分升級(jí)功能8</p><p>  2.1.4背景設(shè)置和游戲控制功能9</p><p>  第3章 系統(tǒng)測(cè)試11</p><p>  3.1 程序運(yùn)行測(cè)試11</p><p>  3.1.1程序主界面圖11&

16、lt;/p><p>  3.1.2 游戲開(kāi)始的界面11</p><p>  3.1.3游戲暫停的界面12</p><p>  3.1.4 游戲停止的界面12</p><p>  3.1.5用戶過(guò)了通關(guān)后運(yùn)行的界面:13</p><p>  3.1.6方塊到頂不能運(yùn)行造成游戲結(jié)束的界面13</p>&

17、lt;p>  3.1.7 方塊進(jìn)行變形14</p><p>  3.2 程序流程圖14</p><p>  3.2.1游戲開(kāi)始時(shí)流程圖15</p><p>  3.2.2消格加分升級(jí)模塊運(yùn)行流程圖16</p><p><b>  第4章 總結(jié)17</b></p><p><b

18、>  參考文獻(xiàn)19</b></p><p><b>  第1章 前 言</b></p><p><b>  1.1簡(jiǎn)介說(shuō)明</b></p><p>  1.1.1 研究背景</p><p>  隨著社會(huì)的發(fā)展,人們智慧的需要,現(xiàn)在益智游戲也越來(lái)越多。為了滿足廣人們的需要,我們研

19、發(fā)了一款新的俄羅斯方塊。俄羅斯方塊是最經(jīng)典的益智休閑游戲之一,這個(gè)超級(jí)俄羅斯方塊是一個(gè)演化版本,不同的地方就在于游戲中的方塊不是慢慢落下來(lái),而是可以在空間內(nèi)任意擺放,雖然是小小的變化,在玩法技巧上確大有不同,而且難度也沒(méi)有因此降低,玩起來(lái)別有另一番樂(lè)趣。</p><p>  1.1.2 游戲適合對(duì)象及注意事項(xiàng)</p><p>  適合于那些青少年、兒童及老人玩耍,對(duì)于那些成年人來(lái)說(shuō),這個(gè)游

20、戲太小兒科了,青少年和兒童玩??梢栽鲩L(zhǎng)他們的智力,老人玩??梢允顾麄冞h(yuǎn)離老人憂郁癥及一些老人易得的病癥。但值得注意的是,請(qǐng)選擇本游戲的廣大玩家,請(qǐng)不要對(duì)本游戲著迷,要適當(dāng)?shù)淖⒁庑菹?,?duì)本游戲上癮有害健康。 </p><p>  1.2 設(shè)計(jì)的目的及工作原理</p><p><b>  1.2.1工作原理</b></p><p>  點(diǎn)擊“sta

21、rt”用戶就可以看到隨機(jī)而形成的方塊會(huì)根據(jù)設(shè)計(jì)速度,用戶可以通過(guò)對(duì)方塊進(jìn)行控制,同是可以按“end”按鈕停止,按“stop”按鈕,可以進(jìn)行暫?;蜷_(kāi)始,并且同時(shí)當(dāng)分值達(dá)到設(shè)置的分?jǐn)?shù)就可以進(jìn)入到下一關(guān),如果方塊鋪滿整個(gè)界面,游戲結(jié)束。</p><p>  1.2.2設(shè)計(jì)的目的</p><p>  為了人們休閑娛樂(lè)的需要,并且人們更加注重那些游戲是否可以益智,并且在人煩惱的時(shí)候可以幫助人解除疲勞

22、,這樣給了人們一個(gè)比較好的放松環(huán)境。從而我們從這次課程設(shè)計(jì)使得課堂教學(xué)與實(shí)驗(yàn)實(shí)踐之間關(guān)系更為密切,讓我們認(rèn)識(shí)到必須重視實(shí)踐環(huán)節(jié),多讀程序,多編寫(xiě)程序,多上機(jī)實(shí)踐.進(jìn)一步培養(yǎng)結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深對(duì)高級(jí)語(yǔ)言要素和控制結(jié)構(gòu)的理解,針對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定的工作量的程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序風(fēng)格。</p><p><b>  1.3 設(shè)計(jì)內(nèi)容</b>&

23、lt;/p><p>  俄羅斯方塊中具體實(shí)現(xiàn)的功能包括:顯示當(dāng)前方塊模塊、方塊預(yù)覽模塊、游戲背景設(shè)置模塊、消格計(jì)分升級(jí)模塊、計(jì)時(shí)器模塊、按鍵模塊和工具及菜單模塊,其中所有功能集成十個(gè)主要的函數(shù)。</p><p>  顯示當(dāng)前方塊模塊的主要函數(shù):m_DrawImage,</p><p>  方塊預(yù)覽模塊的主要函數(shù): m_NextImage,</p>&

24、lt;p>  游戲背景設(shè)置模塊的主要函數(shù):BackGroundset,</p><p>  消格計(jì)分升級(jí)模塊的主要函數(shù):OnTimer、OnInitialUpdate,</p><p>  按鍵模塊的主要函數(shù): OnKeyDown、OnKeyUp,</p><p>  工具及菜單模塊的主要函數(shù): OnGameEnd、OnGamePouse、OnG

25、ameStart及OnAppAbout。</p><p>  當(dāng)用戶啟動(dòng)該程序則會(huì)通過(guò)使用VC++文件操作函數(shù)調(diào)用就立即生成一個(gè)重繪線程,該線程每隔1s繪制一次屏幕。當(dāng)然,重繪時(shí)有一些優(yōu)化措施,并不是屏幕上所有的像素都需要重繪,而是有所選擇,比如游戲畫(huà)布上那些已經(jīng)固定下來(lái)的下墜物(下墜物一共有7種,由4個(gè)小磚塊組成,每種下墜物顏色固定,可以上下左右旋轉(zhuǎn))就不需重繪。游戲畫(huà)布是一個(gè)CommandListene可以接

26、受用戶鍵盤(pán)命令,控制下墜物的左移,右移,下移,旋轉(zhuǎn)動(dòng)作。整個(gè)游戲的流程控制體現(xiàn)在游戲畫(huà)布函數(shù)的BackGroundset方法里。BackGroundset根據(jù)當(dāng)前的游戲狀態(tài),繪制出當(dāng)時(shí)的游戲畫(huà)面。繪制出游戲背景,單擊開(kāi)始按鈕通過(guò)調(diào)用OnGameStart后通過(guò)m_DrawImage并且繪制出一個(gè)方塊往下掉,如果到底后,即滿足條件就會(huì)結(jié)束往下掉式,則把下墜物固定下來(lái),同時(shí)檢查游戲畫(huà)布上下墜物當(dāng)前行下面的所有行,看是否需要進(jìn)行行刪除動(dòng)作,如

27、果需要行刪除,則清除游戲地圖上被刪行的數(shù)據(jù),再把被刪行繪制成背景色。然后初始化一個(gè)新的下墜物,繪制這個(gè)新的下墜物。就這樣慢慢的累計(jì)通過(guò)m_NextImage函數(shù)來(lái)顯示下一個(gè)掉下來(lái)什么方塊,如果全部填滿則通過(guò)</p><p>  當(dāng)你要進(jìn)行方塊向左、向右、向下及變形時(shí)通過(guò)調(diào)用OnKeyDown、OnKeyUp這兩個(gè)函數(shù)來(lái)達(dá)到所要的效果。OnKeyDown函數(shù)采用的是switch語(yǔ)句來(lái)判斷從鍵盤(pán)上按下的是上、下、左、

28、右鍵,如果按下的是“上”鍵表示對(duì)該方塊進(jìn)行變形,并且在變形的過(guò)程中,當(dāng)靠近邊界地區(qū)時(shí),要進(jìn)行判斷,如果是長(zhǎng)條時(shí),則要在離邊界處的第三個(gè)地方才可以進(jìn)行變形,其他的方塊,可以在離邊界處的第二個(gè)處進(jìn)行變行;按下的是“下”鍵表示對(duì)該方塊加速往下掉;按下的是“左”鍵表示對(duì)該方塊是往左邊移;但不能移不游戲界面,按下的是“右”鍵表示是對(duì)該方塊進(jìn)行右移,達(dá)到你想要的效果。然而OnKeyUp函數(shù)是與OnKeyDown函數(shù)相反,對(duì)鍵盤(pán)所輸入的數(shù)進(jìn)行釋放。&

29、lt;/p><p>  在中途要暫??赏∣nGamePouse來(lái)實(shí)現(xiàn),首先判斷該游已經(jīng)開(kāi)始沒(méi),如果開(kāi)始了,就對(duì)暫停有效,否則不運(yùn)行,暫停是BackGroundset執(zhí)行的時(shí)候無(wú)需真正執(zhí)行重繪動(dòng)作,并對(duì)當(dāng)前方塊不再下落懸掛起來(lái),并且給出提示對(duì)話框,提醒該游戲已暫停,使整個(gè)畫(huà)面處于不運(yùn)行狀態(tài),直到再按一下“stop”鍵時(shí),整個(gè)游戲界面又開(kāi)始重新運(yùn)行。</p><p>  要結(jié)束游戲通過(guò)調(diào)用OnGa

30、meEnd來(lái)完成,歡迎畫(huà)面和OnGameEnd畫(huà)面的繪制相當(dāng)簡(jiǎn)單??煞謨煞N情況:一種是全部方塊全部堆滿時(shí),讓BackGroundset執(zhí)行的時(shí)候無(wú)需真正執(zhí)行重繪動(dòng)作。對(duì)于游戲處于運(yùn)行狀態(tài)的畫(huà)面的繪制,則需要在下墜物的當(dāng)前位置,繪制下墜物。在繪制下墜物之前,判斷下墜物是否還能下墜,如果能下墜的話,就讓它下落一格,再進(jìn)行繪制,如果下墜物已無(wú)法下墜,則判斷游戲是否處于“結(jié)束”狀態(tài),如果是處于“結(jié)束”狀態(tài)的話,則設(shè)置游戲狀態(tài)為“結(jié)束”狀態(tài),這樣

31、畫(huà)布在下一次重繪時(shí)就繪出“結(jié)束”的畫(huà)面.如果游戲不是處于“結(jié)束”狀態(tài);另外一種是用戶自已不想玩游戲,通過(guò)“end”按鈕來(lái)完成,當(dāng)你下此按扭時(shí),系統(tǒng)的BackGroundset函數(shù)直接為你初始化背景,回到剛開(kāi)始啟運(yùn)游戲的狀態(tài),當(dāng)你按下“start”按鈕時(shí),游戲進(jìn)入玩耍狀態(tài)。</p><p>  如果有一些對(duì)游戲不懂的問(wèn)題可通過(guò)幫助來(lái)解除你的疑惑該按扭通過(guò)調(diào)用OnAppAbout函數(shù),解決你要解決的問(wèn)題,就這樣就完成

32、了你對(duì)游戲的操作。</p><p>  第2章 游戲功能分析</p><p>  2.1 游戲總體功能分析</p><p><b>  功能需求:</b></p><p>  描繪俄羅斯方塊功能、描繪背景方塊堆積狀況的功能、方塊預(yù)覽功能、消行加分升級(jí)功能、按鍵操作響應(yīng)功能、游戲控制功能,方塊自由下落及判斷功能;<

33、/p><p><b>  游戲代碼模版設(shè)計(jì):</b></p><p>  該游戲主要是通過(guò)十個(gè)主要的函數(shù)來(lái)實(shí)現(xiàn)系統(tǒng)的所有功能,這十個(gè)函數(shù)的功能包括顯示當(dāng)前方塊模塊、方塊預(yù)覽模塊、游戲背景設(shè)置模塊、消格計(jì)分升級(jí)模塊、計(jì)時(shí)器模塊、按鍵模塊和工具及菜單模塊。該程序所有的函數(shù)都是用面向?qū)ο笳Z(yǔ)言實(shí)現(xiàn)的</p><p>  2.1.1描繪俄羅斯方塊功能和方塊預(yù)

34、覽功能</p><p>  描繪俄羅斯方塊功能對(duì)應(yīng)的是顯示當(dāng)前方塊模塊</p><p>  每一個(gè)俄羅斯方塊由四個(gè)小正方形組成的</p><p>  而每一個(gè)小正方形是用畫(huà)刷畫(huà)出來(lái)的,以下代碼就是定義畫(huà)刷的功能:</p><p>  GetClientRect(FC);</p><p>  COLORREF crseg

35、=RGB(0,250,0);//定義畫(huà)刷的顏色是嫩綠色</p><p>  CBrush brush(crseg);</p><p>  CBrush *oldbrush=pDC->SelectObject(&brush);</p><p>  只要知道小方塊的一個(gè)坐標(biāo)點(diǎn)和他的邊長(zhǎng)(本程序中用size表示,以增強(qiáng)代碼可讀性),就能將小方塊通過(guò)畫(huà)刷把它畫(huà)

36、出來(lái)。要畫(huà)出俄羅斯方塊,就要確定每個(gè)小正方形的一個(gè)坐標(biāo),那么每個(gè)方塊就要確定4個(gè)坐標(biāo),一共8個(gè)數(shù)據(jù),在此程序中,用了一個(gè)數(shù)據(jù)類型為CPoint的一位數(shù)組PointArray[4]來(lái)保存這4個(gè)坐標(biāo),方塊類型一共有7中,一共19種不同的形狀如下圖:</p><p>  為了便于實(shí)現(xiàn)方塊類型的變換,在此程序中用到如下圖的計(jì)算每種方塊的4個(gè)坐標(biāo)的公式:</p><p>  PointArray[0

37、].x=point.x+Shape[shape][0]*size;</p><p>  PointArray[0].y=point.y+Shape[shape][1]*size; </p><p>  PointArray[1].x=point.x+Shape[shape][2]*size;</p><p>  PointArray[1].y=point.y

38、+Shape[shape][3]*size+size;</p><p>  PointArray[2].x=point.x+Shape[shape][4]*size+size;</p><p>  PointArray[2].y=point.y+Shape[shape][5]*size; </p><p>  PointArray[3].x=point

39、.x+Shape[shape][6]*size+size;</p><p>  PointArray[3].y=point.y+Shape[shape][7]*size+size;</p><p>  注:這段代碼是void CTextView::m_DrawImage(CDC *pDC ,CPoint point, int shape)中的</p><p>  以

40、上代碼中的Shape二維數(shù)組,它的數(shù)據(jù)類型為int ,大小為Shape[19][8];</p><p>  通過(guò)改變Shape數(shù)組的一維下標(biāo),實(shí)現(xiàn)方塊形狀的改變。</p><p>  Point的數(shù)據(jù)類型是CPoint,用來(lái)確定方塊顯示在背景的位置,在調(diào)用函數(shù)時(shí),通過(guò)改變實(shí)參,可在游戲區(qū)右邊實(shí)現(xiàn)方塊預(yù)覽功能。</p><p>  通過(guò)逆推,計(jì)算將Shape[19][

41、8]在視圖類的構(gòu)造函數(shù)中初始化如下:</p><p>  Shape1[19][8]={{0,0,0,0,0,0,0,0},{0,0,0,0,-1,2,-1,2},{0,0,-1,-1,0,0,1,-1},</p><p>  {0,0,0,0,0,2,0,0},{2,0,0,0,0,0,0,0},{0,2,0,0,0,0,0,0},{0,0,2,0,0,0,0,0},</p>

42、<p>  {0,0,0,0,-1,2,0,1},{0,0,0,0,0,0,1,-1},{0,0,1,1,0,0,0,0},{-1,1,0,0,0,0,0,0},</p><p>  {2,0,1,1,0,0,0,0},{0,0,2,-1,0,0,1,0},{0,0,0,0,-1,-1,0,0},{0,0,2,-1,0,0,-1,-2},</p><p>  {0,0,0,0

43、,-1,2,0,0},{0,0,0,0,0,0,-2,-1},{0,0,1,-2,0,0,0,0},{0,0,0,0,-2,1,0,0} };//初始化方塊形狀數(shù)組</p><p>  預(yù)覽區(qū)如何顯示下一塊及下下一塊方快呢?,此程序就是用通過(guò)多次賦值,是數(shù)據(jù)后移:</p><p>  _OldNextShape=m_NextShape;</p><p>  m_Cu

44、rShape=m_NextShape;</p><p>  m_NextShape=m_Next2Shape;</p><p>  m_Next2Shape=rand()%19;</p><p>  再通過(guò)2次調(diào)用m_NextImage(CDC *pDC, CPoint point, int shape)來(lái)實(shí)現(xiàn)預(yù)覽功能:</p><p>  

45、OnDraw(CDC* pDC)</p><p> ?。鸰NextImage(pDC,m_OldNextpoint,m_NextShape);//畫(huà)出下一個(gè)方塊</p><p>  m_NextImage(pDC,m_Nextpoint,m_Next2Shape);//畫(huà)出下下一個(gè)方塊}</p><p>  2.1.2方塊自由下落及判斷功能和描繪背景方塊堆積狀況的功

46、能</p><p>  方塊自由下落及判斷功能對(duì)應(yīng)的是計(jì)時(shí)器模塊(OnTimer(UINT nIDEvent)函數(shù))</p><p><b>  其核心代碼如下:</b></p><p>  for(i=0;i<4;i++)</p><p>  {//判斷是否觸底,及當(dāng)前方塊下是否已經(jīng)有方塊</p>

47、<p>  if(PointArray[i].y==24*size || Map[PointArray[i].x/size][PointArray[i].y/size+1]==1)</p><p>  {for( j=0;j<4;j++)</p><p>  {Map[PointArray[j].x/size][PointArray[j].y/size]=1;</p&

48、gt;<p>  if(Map[PointArray[j].x/size][1]==1)</p><p>  {m_GameEnd=1;Level=1;</p><p>  Score=0;m_Sudu=200;</p><p><b>  break;</b></p><p><b>  }

49、</b></p><p>  m_touchBottom=1;//用來(lái)表示觸底</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(m_GameEn

50、d==0&&m_touchBottom==1)//觸底時(shí)且游戲沒(méi)結(jié)束進(jìn)行變量更新操作</p><p><b>  {</b></p><p>  m_pcurpos.x=120;m_pcurpos.y=0;</p><p>  m_OldNextShape=m_NextShape;</p><p>  m

51、_CurShape=m_NextShape;</p><p>  m_NextShape=m_Next2Shape;</p><p>  m_Next2Shape=rand()%19;</p><p>  m_touchBottom=0;//賦值操作完畢后,讓m_touchBottom恢復(fù)初始值,重新判斷</p><p><b> 

52、 }</b></p><p>  if(i>=4&&m_Game_Pouse)</p><p>  {m_pcurpos.y+=size; }//通過(guò)對(duì)當(dāng)前方塊的縱坐標(biāo)做累加操作實(shí)現(xiàn)方塊下落</p><p>  Invalidate(FALSE);更新數(shù)據(jù)</p><p>  需要說(shuō)明的是:游戲區(qū)域是25行1

53、5列;(怎么在游戲區(qū)描繪已下降的俄羅斯方塊呢?)在程序定義了一個(gè)數(shù)組int Map[15][25]用來(lái)記錄游戲區(qū)方塊分布的狀況</p><p><b>  初始值都為0。</b></p><p>  通過(guò)循環(huán),判斷,描繪背景方塊堆積狀況,代碼如下:</p><p>  for(i=0;i<15;i++)//畫(huà)方格圖Map[27][41]&

54、lt;/p><p><b>  {</b></p><p>  for( j=0;j<25;j++)</p><p><b>  {</b></p><p>  if(Map[i][j]==1)</p><p>  pDC->Rectangle(i*size,j*si

55、ze,(i+1)*size,(j+1)*size);</p><p>  } 注:代碼在m_DrawImage函數(shù)中</p><p><b>  }</b></p><p>  2.1.3按鍵操作響應(yīng)功能和消行加分升級(jí)功能</p><p>  按鍵響應(yīng)功能包括:方塊的左移、右移、變形、下降加快。</p>

56、<p>  它對(duì)應(yīng)的是按鍵模塊。</p><p>  移動(dòng)也就是使方塊每個(gè)坐標(biāo)按需求一致變動(dòng),但要判讀是否出界,被已有方塊阻擋,舉向左移的代碼如下:</p><p>  for( i=0;i<4;i++)</p><p>  {if(PointArray[i].x<=0||Map[PointArray[i].x/size-1][Poi

57、ntArray[i].y/size]==1)</p><p><b>  a1=1;}</b></p><p><b>  if(a1==0)</b></p><p>  m_pcurpos.x-=size;</p><p>  else m_pcurpos.x=m_pcurpos.x; &l

58、t;/p><p>  右移類同,下移加速就更簡(jiǎn)單了。</p><p>  變形:是通過(guò)改變正在傳遞的m_CurShape的值,前面講到過(guò)方塊有7種類型,為了實(shí)現(xiàn)變形,將每種類型的不同形狀放在數(shù)組相鄰的位置(這是本程序的有一大亮點(diǎn))在變形的同時(shí),要判斷能不能變形。</p><p>  橫豎狀變化實(shí)現(xiàn)代碼如下:</p><p>  if(m_CurS

59、hape>=1&&m_CurShape<=2)</p><p><b>  {</b></p><p>  for(i=0;i<4;i++)</p><p>  {if(PointArray[i].x>240)</p><p><b>  j=1;}</b>&

60、lt;/p><p><b>  if(!j)</b></p><p><b>  {</b></p><p>  if(m_CurShape==2)</p><p>  m_CurShape=1;//形狀變?yōu)闄M</p><p>  elsem_CurShape+=1;}<

61、;/p><p><b>  }</b></p><p>  至于消行加分升級(jí)功能,他對(duì)應(yīng)與消格計(jì)分升級(jí)模塊</p><p>  消行的核心代碼如下:</p><p>  CPen pen(PS_INSIDEFRAME,2,RGB(0,0,0));</p><p>  CBrush brush1(RG

62、B(0,0,0));//創(chuàng)建背景色筆刷</p><p>  CBrush *oldbrush1=pDC->SelectObject(&brush1); </p><p>  pDC->SelectObject(&pen);</p><p><b>  int k;</b></p><p>  

63、for(k=i;k>=1;k--)</p><p><b>  {</b></p><p>  for(int m=0;m<15;m++)</p><p><b>  {</b></p><p>  Map[m][k]=0;</p><p>  Map[m][k]

64、=Map[m][k-1];//下移堆積的方塊i</p><p>  pDC->Rectangle(m*size,k*size,m*size+size,k*size+size);</p><p>  } </p><p><b>  }</b></p><p>  2.1

65、.4背景設(shè)置和游戲控制功能</p><p>  此游戲背景很簡(jiǎn)單,在此就不多說(shuō)了</p><p>  游戲背景設(shè)置模塊首先獲得當(dāng)前窗口大小,然后繪制區(qū)域大小,線、畫(huà)刷和筆,通過(guò)PDC指針來(lái)指向繪制區(qū)域大小、輸出文本、顏色背景、繪制豎線得到當(dāng)前的背景界面。</p><p>  游戲控制功能對(duì)應(yīng)于工具及菜單模塊</p><p>  工具及菜單模塊

66、主要通過(guò)四個(gè)函數(shù)來(lái)實(shí)現(xiàn)的:</p><p>  OnGameEnd 函數(shù)首先進(jìn)行該游戲是否暫停,如果沒(méi)有,則直接結(jié)束該游戲,如果暫停,則會(huì)出現(xiàn)一個(gè)對(duì)話框,進(jìn)行提示,關(guān)閉該對(duì)話框就可以結(jié)束游戲了。OnGamePouse 函數(shù)是對(duì)該游戲暫停,當(dāng)你按下Stop按扭時(shí),該游戲進(jìn)行暫停,如果已經(jīng)暫停了,再按一次就可以開(kāi)始游戲了。</p><p>  OnGameStart 函數(shù)是對(duì)該游戲進(jìn)行

67、開(kāi)始,首先進(jìn)行判斷是否暫停,如果沒(méi)有暫停,游戲又進(jìn)行判斷是否結(jié)束,如果是表示已結(jié)束,又進(jìn)行賦值,對(duì)游戲進(jìn)行初始狀態(tài);如果暫停,進(jìn)行恢復(fù)開(kāi)始,并繼續(xù)執(zhí)行游戲。</p><p>  OnAppAbout 函數(shù)是由于讀者剛開(kāi)始對(duì)游戲的不了解,該函數(shù)主要是幫助讀者解決疑難問(wèn)題的。</p><p><b>  第3章 系統(tǒng)測(cè)試</b></p><p>

68、;  3.1 程序運(yùn)行測(cè)試</p><p>  3.1.1程序主界面圖</p><p>  當(dāng)用戶運(yùn)行程序運(yùn)行時(shí)將會(huì)運(yùn)行如下界面:</p><p>  圖3.1 游戲運(yùn)行的主界面</p><p>  3.1.2 游戲開(kāi)始的界面</p><p>  當(dāng)單擊“開(kāi)始”按扭,顯示如下界面:</p><p&g

69、t;<b>  圖3.2 游戲開(kāi)始</b></p><p>  3.1.3游戲暫停的界面</p><p>  當(dāng)單擊“暫停”按扭,顯示如下界面: </p><p>  圖3.3按下“暫?!?lt;/p><p>  3.1.4 游戲停止的界面</p><p>  當(dāng)單擊“停止”按扭,顯示如下界面:<

70、;/p><p>  圖3.4 在運(yùn)行中 圖3.5 按下“停止”按鈕</p><p>  3.1.5用戶過(guò)了通關(guān)后運(yùn)行的界面:</p><p>  當(dāng)比較聰明的用戶通過(guò)自已各個(gè)方面的能力玩過(guò)通關(guān)的界面:</p><p><b>  圖3.6過(guò)通關(guān)</b></p><p> 

71、 3.1.6方塊到頂不能運(yùn)行造成游戲結(jié)束的界面</p><p>  因用戶操作失誤造成方塊到頂造成游戲結(jié)束的界面:</p><p>  圖3.7 到頂結(jié)束游戲 圖3.8 重新開(kāi)始游戲</p><p>  3.1.7 方塊進(jìn)行變形</p><p>  拼湊的需要用戶需將方塊任意變形的界面:</p>&l

72、t;p>  圖3.9變形之前 圖3.10變形之后</p><p><b>  3.2 程序流程圖</b></p><p>  3.2.1游戲開(kāi)始時(shí)流程圖</p><p>  m_GameEnd=1程序運(yùn)行:</p><p>  圖3.11整個(gè)程序的運(yùn)行過(guò)程</p>

73、<p>  3.2.2消格加分升級(jí)模塊運(yùn)行流程圖</p><p>  圖3.12 消格加分升級(jí)流程圖</p><p><b>  第4章 總結(jié)</b></p><p>  這本次課程設(shè)計(jì)剛開(kāi)始時(shí),遇到的問(wèn)題一大堆,開(kāi)始我還想自己憑空開(kāi)發(fā)一個(gè)俄羅斯方塊游戲,幾個(gè)星期下來(lái)沒(méi)有一點(diǎn)進(jìn)展,我還是一頭霧水,后來(lái)我想同學(xué)說(shuō)起了此事,同學(xué)對(duì)我說(shuō)

74、了一句關(guān)鍵的話,像北極星一樣給我們指明了課程設(shè)計(jì)的方向,他的這句話就是:“你以為你神啊,不看別人的代碼,怎么知道這東西怎么來(lái)的,先要看別人是怎么做出來(lái)的,然后才知道怎么去做”。這話雖然有點(diǎn)長(zhǎng),但一針見(jiàn)血,讓我如夢(mèng)初醒,很快,在余下的一個(gè)星期,我從網(wǎng)上下載了很多資料,剛開(kāi)始,看別人的代碼,很難受,而且,不知所云,一天下來(lái),感覺(jué)沒(méi)什么收獲,但第二天,我還在繼續(xù)看,終于,量變產(chǎn)生質(zhì)變,我看懂了別人的核心代碼,當(dāng)晚11:00,我開(kāi)始著手編自己的

75、代碼,從此一發(fā)不可收拾,在后來(lái)陸陸續(xù)續(xù)遇到很多問(wèn)題,通過(guò)與合作伙伴以及同班同學(xué)討論,使代碼一步步完善?;仡櫰鸫舜螁纹瑱C(jī)課程設(shè)計(jì),至今我仍感慨頗多,的確,從選題到定稿,從理論到實(shí)踐,在整整兩星期的日子里,可以說(shuō)得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是</p><p>

76、;  雖然這只是一個(gè)簡(jiǎn)單游戲程序,這個(gè)課程設(shè)計(jì)讓深入了解了面向?qū)ο蟪绦虻幕玖鞒?,從而也更加深入了面向?qū)ο蟪绦虻膶W(xué)習(xí),在這次課程設(shè)計(jì)中遇上了很多問(wèn)題,例如:畫(huà)筆、畫(huà)刷及DDX/DDV技術(shù)的失誤操作,通過(guò)這一次實(shí)踐,更加讓我明白動(dòng)手是多么的重要,不要一味聽(tīng)老師講的那些知識(shí),那一點(diǎn)點(diǎn)知識(shí)永遠(yuǎn)不能滿足我們實(shí)踐的需要,要通過(guò)平時(shí)的自學(xué)和知識(shí)的積累,這樣才能讓自已寫(xiě)起程序來(lái)非常的熟練,非常的快。</p><p>  在這次

77、課程設(shè)計(jì)中,我發(fā)現(xiàn)團(tuán)隊(duì)力量是很重要的,一個(gè)人的力量永遠(yuǎn)是不夠的,當(dāng)你走向社會(huì),一個(gè)好的團(tuán)隊(duì)對(duì)你來(lái)說(shuō)非常重要,這個(gè)團(tuán)隊(duì)決定你的生命的寬度。在這次程序課程設(shè)計(jì)雖然我們發(fā)生了很多不快的回憶,我的隊(duì)友在我不自覺(jué)的時(shí)侯監(jiān)督我做事,雖然當(dāng)時(shí)有點(diǎn)反抗,但是現(xiàn)在想起來(lái),感覺(jué)很搞笑。非常感謝我的隊(duì)友,讓我懂得如何去完成任務(wù)。同時(shí)也要感謝老師給我們的指導(dǎo),讓我們學(xué)會(huì)怎么獨(dú)立去完成代碼,怎么看懂別人的代碼和完善代碼。</p><p>

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論