VC俄羅斯方塊畢業(yè)論文_第1頁
VC俄羅斯方塊畢業(yè)論文_第2頁
VC俄羅斯方塊畢業(yè)論文_第3頁
VC俄羅斯方塊畢業(yè)論文_第4頁
VC俄羅斯方塊畢業(yè)論文_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、VC 俄羅斯方塊畢業(yè)論文專專 業(yè):業(yè):計算機科學與技術ABSTRACT摘要摘要 俄羅斯方塊是大多數(shù)人都熟悉的一款游戲,它玩法簡單,樂趣無窮,一直深受各年齡層的玩家喜愛,經久不衰。而計算機和網絡的發(fā)展給于了它更大的發(fā)展空間。本設計的主要目的是通過使用 VISUAL C+進行設計,詳細介紹了基于 API 的俄羅斯方塊系統(tǒng)的開發(fā)過程。內容包括:Visual C+的特點,系統(tǒng)可行性研究,功能分析,總體設計和詳細設計。通過本文讀者了解整個俄羅斯方塊的開發(fā)過程,同時本次設計也可以作為系統(tǒng)再開發(fā)時的參考。關鍵詞:俄羅斯方塊;游戲;VC ABSTRACTABSTRACTThe Tetris is a game

2、 that most people are familiar with。 Its playing method is simple, full of endless joy, well received by the players of all ages all the time, unfailing. And the development of the computer and network is given on bigger development space of its. This design main purpose is through uses VISUAL C+ to

3、 carry on the design,Introduced in detail based on the API Tetris system performance history. The content includes: Visual C+ characteristic,System feasibility study, functional analysis, system design and detailed design. Through this article reader understood entire the performance history of Tetr

4、is, simultaneously this design also may develops again as the system when the reference.Keywords:Tetris;Game;VC結論3目錄摘要.IABSTRACT.II目錄.31 緒論 .51.1 課題背景 .51.2 VISUAL C+6.0 介紹 .51.3 API 簡介 .61.4 本章小結 .72 可行性研究與需求分析.82.1 可行性研究 .82.2 需求分析 .82.3 本章小節(jié) .93 系統(tǒng)的總體設計.103.1 總體功能分析 .103.2 系統(tǒng)功能分析 .103.3 功能模塊簡介.11

5、3.4 本章小結.114 系統(tǒng)的具體實現(xiàn).124.1 游戲基本邏輯控制.124.2 菜單命令的代碼設計 .214.3 本章小結 .24結論.25參考文獻.26致謝.27結論4前言俄羅斯方塊是一款風靡全球的電視游戲機和掌上游戲機游戲,它曾經造成的轟動與造成的經濟價值可以說是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人 Alex Pajitnov 制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個俄羅斯方塊時代。俄羅斯方塊是大多數(shù)人都熟悉的一款游戲,它玩法簡單,樂趣無窮,一直深受各年齡層的玩家喜愛,經久不衰。而計算機和網絡的發(fā)展給于了它更大的發(fā)展空

6、間,單機版與網絡版俄羅斯方塊游戲也一直深受人們的喜愛, 經調查,俄羅斯方塊在各種版本的游戲領域一直占據(jù)著重要地位,這就使得這款游戲的意義更加重要。本設計的主要目的是通過使用 Visual C+進行設計,詳細介紹了基于 API 的俄羅斯方塊系統(tǒng)的開發(fā)過程。內容包括:Visual C+的特點,系統(tǒng)可行性研究,功能分析,總體設計和詳細設計。 該俄羅斯方塊游戲主要實現(xiàn)以下功能:1. 每四個小方塊可組合成一個方塊群。2從七個方塊群中,隨機取一組,并且告訴玩家下一組方塊是什么。3在游戲框中方塊由上方慢慢落下。4玩家可以按【】 、 【】移動方塊,按【】加速方塊落下的速度,按【】 、空格鍵旋轉方塊,所有的方塊

7、都要在游戲框中。5方塊落下是,當方塊組中由一個到達游戲框最底或是下一格有方塊時即停止移動,凈將方塊移到游戲框底。6如果同一行的 10 格中全部填滿小方塊,即可消除該行,上面的方塊以行為單位,由上一行一行一行往下移。7消除的行數(shù)越多,落下的速度越快。8如果有方塊停住時有方塊未在游戲框內,游戲結束。9游戲能夠在玩的時候給出分數(shù)、速度和級別。結論51 緒論1.1 課題背景作為一款極為經典的游戲,俄羅斯方塊吸引一代代玩家樂此不彼,本例通過使用 VISUAL C+進行設計,大量使用了 API 函數(shù),將書本知識應用到實際程序中,以便于為以后的進一步學習奠定基礎。1.2 VISUAL C+6.0 介紹作為一

8、種 C/C+語言的集成開發(fā)環(huán)境(IDE),產生 VC 的最早的根源其實要追溯到 DOS 時代的 Borland 公司,當初 Borland 公司開發(fā)的 Turbo Pascal 和 Turbo C讓程序員們深刻感受到了把編輯器和編譯器集成在一起的 IDE 是多么的方便,微軟也看到了這一優(yōu)點,于是相繼開發(fā)了 Quick C 和 Microsoft C/C+等多個 DOS 版本的C/C+集成開發(fā)工具。隨著 Windows 的不斷成熟,微軟決定放棄 DOS 下的開發(fā)工作,正式推出了 Windows 下的 Visual C+ 1.0,早期的 VC 功能并不什么強大,使用起來也不方便,1.0 版和 1.

9、5 版都是 16 位編程工具。VC 的革命性改變得益于 Windows 95的推出,從 VC 2.0 開始,微軟又放棄了 16 位編程,以后的 VC 都只用于 32 位編程開發(fā),為了與 MFC 類庫的版本號保持一致,微軟跳過了版本 3,直接推出 VC 4.0,這個版本及修訂版 4.2 的部分界面風格一直被保留到最新的 VC 6.0 中。從 VC4 到VC6,VC 的各種功能不斷增強,MFC 類庫的內容也越來越豐富,現(xiàn)在利用 VC 開發(fā)應用程序已經是一件相當輕松的事情了。現(xiàn)在的 C+ Builder 也是一個非常優(yōu)秀的開發(fā)工具,但是基于下面的幾點原因,使用 VC 更為現(xiàn)實:首先,VC 的核心MF

10、C 類庫已是事實上的業(yè)界標準;其次,VC與 Visual Studio 中的其它可視化開發(fā)工具緊密集成,可用于開發(fā)非常專業(yè)的Windows、Web 和企業(yè)級應用程序;第三,VC 的聯(lián)機幫助已被集成到 MSDN(微軟開發(fā)者網絡)庫中去了,后者包含了微軟大部分產品的技術文檔和支持資料,內容相當豐富,是程序員不可多得的參考資料,現(xiàn)在 MSDN 庫隨著 Visual Studio 6.0 一起發(fā)行,實在是大家的福音。在 Windows 版本系列中,下列特點是始終保持并不斷發(fā)展的:圖形化的窗口界面。多任務方式的運行環(huán)境。虛擬化的設備接口。以虛擬內存為核心的內存管理。網絡功能及應用程序,包括 Micros

11、oft 網絡、通用基礎網絡協(xié)議等。結論6多媒體功能及應用程序,包括圖形、圖像、聲音、動畫和開發(fā)工具等。功能豐富的用戶管理工具和實用軟件。目前 VC 的最新版本是 VC6,屬于微軟可視化開發(fā)套件 Visual Studio 6.0 中的一項重頭戲。VC6 引入了多項出色的新功能,例如智能感應(IntelliSense)技術,程序員在鍵入代碼時,VC6 的編輯器能自動把屬性、參數(shù)信息、數(shù)據(jù)類型信息、代碼信息羅列出來,供程序員選擇并自動完成輸入,這種技術源自于 VB5,現(xiàn)在已被應用到了 VC6、VJ6 和 IE5 中,有了它之后,程序員無需去記憶復雜的語法、參數(shù)和構件屬性,從而提高了編程效率。另一項

12、典型的新技術是即編即調(Edit and Continue),現(xiàn)在程序員可以直接在調試過程中編輯代碼,而不用象以前那樣,需要先退出調試狀態(tài),然后編輯,重新編譯連接,并啟動調試器,再跟蹤到發(fā)生問題的地方。此外,VC6 還具有動態(tài)更新類視圖、延遲加載、支持 IE 4.0 通用控件等等眾多的新特性。作為當今流行的開發(fā)環(huán)境,Visual C+6.0 具有如下特點:(1)Visual C+6.0 提供了開發(fā) Windows 環(huán)境下的應用程序的簡捷、快速和實用的開發(fā)環(huán)境。利用 Visual C+6.0 開發(fā) Windows 應用程序具有很高的效率。(2)Visual C+6.0 提供了 MFC 類庫,開發(fā)

13、者只需要做少量的工作就可以得到功能齊全的 Windows 應用程序。(3)Visual C+6.0 提供了高度集成的工具集,使得在開發(fā)應用程序的全過程中都保證了較高的效率。集成化便于程序開發(fā),開發(fā)者可以在諸如編輯、建立、調試等不同的任務之間快速切換,甚至可以同時進行。(4)圖形化的可視特點使得 Visual C+6.0 簡單易學。1.3 API 簡介微軟 windows 應用程序應用程序接口(Application Programming Interface ,API)是為開發(fā)者在開發(fā) windows 應用程序時,提供給應用程序的接口程序,包括Windows XP,Windows 2000,W

14、indows NT,Winows 95/98,以及 Windows ME.windows API 可以被用在所有的以 windows 為平臺的應用程序下面不管是 32 位的或是 64 位的Windows 系統(tǒng)通常會支持相同的功能函數(shù)。雖然隨著軟件技術的不斷發(fā)展,在 WINDOWS 平臺上出現(xiàn)了很多優(yōu)秀的可視化編程環(huán)境,程序員可以采用“即見即所得”的編程方式來開發(fā)具有精美用戶界面和功能強大的應用程序。但是如果我們要開發(fā)出更靈活、更實用、更具效率的應用程序,必然要涉及到直接使用 API 函數(shù),雖然類庫和控件使應用程序的開發(fā)簡單的多,但它們只提供 WINDOWS 的一般功能,對于比較復雜和特殊的功能

15、來說,使用類庫和控件是非常難以實現(xiàn)的,這時就需要采用 API 函數(shù)來實現(xiàn)。API 函數(shù)是構筑整個Windows 框架的基石,只有充分理解和利用 API 函數(shù),才能深入到 Windows 的內部,充分發(fā)揮各種 32 位平臺的強大功能和靈活性,才能成功地擴展和突破類庫、控件和可視開發(fā)環(huán)境的限制。結論7所有在 Win32 平臺上運行的應用程序都可以調用這些函數(shù)。使用 Win32 API,應用程序可以充分挖掘 Windows 的 32 位操作系統(tǒng)的潛力。 Mircrosoft 的所有 32 位平臺都支持統(tǒng)一的 API,包括函數(shù)、結構、消息、宏及接口。使用 Win32 API 不但可以開發(fā)出在各種平臺上

16、都能成功運行的應用程序,而且也可以充分利用每個平臺特有的功能和屬性。 在具體編程時,程序實現(xiàn)方式的差異依賴于相應平臺的底層功能的不同。最顯著的差異是某些函數(shù)只能在更強大的平臺上實現(xiàn)其功能。例如,安全函數(shù)只能在Windows NT 操作系統(tǒng)下使用。另外一些主要差別就是系統(tǒng)限制,比如值的范圍約束,或函數(shù)可管理的項目個數(shù)等等。根據(jù) Windows API 函數(shù)完成的功能,可將其分為三類:窗口管理函數(shù):實現(xiàn)窗口的創(chuàng)建、移動和修改功能。圖形設備接口(Graphics Device Interface,GDI):實現(xiàn)與設備無關的圖形操作功能。系統(tǒng)服務函數(shù):實現(xiàn)與操作系統(tǒng)有關的各種功能。1.4 本章小結本章

17、介紹了軟件開發(fā)環(huán)境 VISUAL C+的基礎性知識,同時簡要介紹了 WINDOWS API 函數(shù)的一些知識,這些知識有助于接下來整個俄羅斯方塊游戲的開發(fā)與設計。在用 Visual C+開發(fā)面向對象應用程序時,主要有兩種方法:一種是使用 Windows 提供的 API 函數(shù),另一種方法是直接使用 Microsoft 提供的 MFC 類庫。本次設計使用第一種方法。結論82 可行性研究與需求分析 2.1 可行性研究問題定義的可行性分析是軟件生存周期的第一階段??尚行匝芯康哪康氖鞘褂米钌俚拇鷥r在盡可能短的時間內確定問題是否能夠解決??尚行匝芯康膶嵸|是要進行一次系統(tǒng)分析和設計的簡化過程,也就是在較高層上

18、以抽象的方式進行系統(tǒng)分析和設計的過程。一般來講,應該從技術、經濟和操作等方面來研究每種解法的可行性。2.1.1.要求 作為一款極為經典的游戲,俄羅斯方塊吸引一代代玩家樂此不彼,本例通過使用 VISUAL C+進行設計,大量使用了 API 函數(shù),將書本知識應用到實際程序中,以便于為以后的進一步學習奠定基礎。本例要求大量使用 API 函數(shù),熟悉消息映射機制的具體實現(xiàn)。2.1.2 目標 俄羅斯方塊游戲的設計目標完成一個比較簡單的游戲,使之能夠實現(xiàn)俄羅斯方塊游戲的基本功能,成為一個比較完整的游戲框架。該游戲作為一個單機版的游戲界面,基本達到俄羅斯游戲的基本功能。通過練習能進一步學習 API 函數(shù)的使用

19、。2.1.3 可行性研究方法 實行軟件的可行性研究方法主要有:成本效益分析,對估算問題的看法,軟件的作用范圍,軟件的成本估算,速度安排等。2.1.4 決定可行性的主要因素 決定軟件可行性的四個主要方面有:經濟因素,技術因素,法律因素,不同方案。由于該游戲本身的規(guī)模不大,幾乎可以在所有的計算機系統(tǒng)上運行,所以對于硬件和軟件沒有太苛刻的要求,各種游戲平臺,大型電腦、家用游戲機等,甚至連掌上型的小游戲機都可以運行。2.2 需求分析 俄羅斯方塊是一個膾炙人口的游戲,所以我們大家對它都很是熟悉,現(xiàn)在的要求是盡量設計一個合格的俄羅斯方塊游戲。作為一個廣受關注的游戲,現(xiàn)在有大量的關于俄羅斯方塊的資料,我盡量

20、吸取已有的成功的經驗,做到精益求精。結論92.3 本章小節(jié)本章分析了當前開發(fā)本系統(tǒng)的形式,并介紹了對計俄羅斯方塊游戲系統(tǒng)的可行性研究的前提及對該系統(tǒng)的需求分析。結論103 系統(tǒng)的總體設計總體設計過程首先是尋找實現(xiàn)目標系統(tǒng)的各種不同的方案。要進行系統(tǒng)完善的總體功能分析,首先要確定俄羅斯方塊游戲中的不同模塊,鑒于 API 編程的不同,我盡量用比較清晰的思路表達意圖。根據(jù)此系統(tǒng)的功能要求,除了要保持整體設計的統(tǒng)一性,還要突出不同模塊的特點,使整個系統(tǒng)趨于統(tǒng)一。3.1 總體功能分析總體設計過程通常由兩個主要階段組成:系統(tǒng)設計階段和結構設計階段。盡量利用現(xiàn)有的軟硬件環(huán)境,采用 Viusal C+進行俄羅

21、斯方塊的設計,由于 API函數(shù)在 Windows 設計中的重要性,需要大量使用到 API 函數(shù),一定程度上增加了難度。3.2 系統(tǒng)功能分析系統(tǒng)功能分析是在系統(tǒng)開發(fā)的總體任務的基礎工業(yè)上完成的。該俄羅斯方塊游戲主要實現(xiàn)以下功能:1. 從七個方塊群中,隨機取一組,并且告訴玩家下一組方塊是什么。2. 在游戲框中方塊由上方慢慢落下。3. 玩家可以按【】 、 【】移動方塊,按【】加速方塊落下的速度,按【】 、空格鍵旋轉方塊,所有的方塊都要在游戲框中。4. 方塊落下是,當方塊組中由一個到達游戲框最底或是下一格有方塊時即停止移動,凈將方塊移到游戲框底。5. 如果同一行的 10 格中全部填滿小方塊,即可消除該

22、行,上面的方塊以行為單位,由上一行一行一行往下移。6. 消除的行數(shù)越多,落下的速度越快。7. 如果有方塊停住時有方塊未在游戲框內,游戲結束。8. 游戲能夠在玩的時候給出分數(shù)、速度和級別。游戲大致的模塊可以由主菜單實現(xiàn)控制,主菜單的實現(xiàn)見圖 3.1結論11主菜單開始退出開始暫停開始結束開始圖 3.1 控制流程3.3 功能模塊簡介 由于俄羅斯方塊游戲的相對簡單,我們將在下一章中具體實現(xiàn)。3.4 本章小結本章介紹了俄羅斯方塊游戲系統(tǒng)的總體設計方案,詳細說明了系統(tǒng)實現(xiàn)的功能以及整個系統(tǒng)的流程分析,并以功能模塊圖的形式體現(xiàn)出來。 結論124 4 系統(tǒng)的具體實現(xiàn)系統(tǒng)的具體實現(xiàn)4.1 游戲基本邏輯控制使用

23、API 函數(shù)編寫游戲,首先生成一個應用程序框架,游戲的框架采用標準的windows 框架,上面有標題欄、菜單欄,以方便玩家控制游戲,我們先做好這一部分。菜單欄里包括開始、暫停、結束等控制菜單。我們要設計對菜單操作進行響應,并設計相應的控制游戲,這是需要添加對菜單事件的響應方法。然后在一個面板上構建游戲的界面,將這個面板嵌入到游戲的大框架中,這樣游戲的界面就有了。在游戲面板構建好之后,應該讓游戲能夠玩起來,這一部分主要是編寫一些算法,用來控制游戲。這里需要增加對鍵盤事件的響應,讓玩家能夠玩游戲。 4.1.1 顯示背景在 Visual C+中,使用 Visual C+自帶的方法可以讀取并顯示位圖文

24、件。使用 API 函數(shù)的畫刷和畫筆函數(shù)創(chuàng)建畫刷和畫筆句柄,然后創(chuàng)建一個矩形區(qū)域作為俄羅斯方塊游戲的執(zhí)行區(qū)域(選擇黑色背景和紅色方塊,以便于區(qū)分) 。主要使用到的 API 函數(shù)有:GetDC(HWND) 獲取設備句柄int ReleaseDC(HWND,HDC)由 GetDC()獲取的設備環(huán)境必須用 ReleaseDC()函數(shù)釋放SelectObject(HDC,HWND)應用程序將使用句柄 HWND 所指的設備進行繪圖,直到選入另外的設備為止。使用時一般需要在函數(shù)前進行強制類型轉換,設定為 CPEN、CBRUSH 等。BitBlt(int,int,int,int,CDC,int,int,DWO

25、RD)CDC:BitBlt 執(zhí)行的操作為將源 DC 中位圖復制到目的 DC 中。其中前四個參數(shù)為目的區(qū)域的坐標(x,y)及長度和寬度(Width, nHeight) ,第五個參數(shù)是源 DC 指針,接下來的參數(shù)是源 DC 中的起始坐標,最后一個參數(shù)為光柵操作的類型。BOOL Rectangle(HDC hdc,int x1,int y1,int x2,int y2)使用當前畫筆繪制一個舉行區(qū)域,并使用當前畫刷進行填充。4.1.2 方塊的顯示與控制俄羅斯方塊游戲中的基本方塊有 7 種,可以通過編寫一個結構來存儲和顯示這些方塊。具體代碼如下:typedef struct struct_fPoint

26、/點坐標結論13 float x; float y;FPOINT,*PFPOINT;typedef struct struct_Object /方塊結構 int type; FPOINT center; FPOINT pos4;OBJECT,*POBJECT;各種形式的方塊組組合如下:/實現(xiàn)方塊組 pObj-pos0.x=sx;pObj-pos0.y=0;pObj-pos1.x=sx+1;pObj-pos1.y=0;pObj-pos2.x=sx;pObj-pos2.y=1;pObj-pos3.x=sx+1;pObj-pos3.y=1;pObj-center.x=0.5;pObj-center.

27、y=0.5;/實現(xiàn)方塊組pObj-pos0.x=sx;pObj-pos0.y=0;pObj-pos1.x=sx;pObj-pos1.y=1;pObj-pos2.x=sx+1;pObj-pos2.y=1;pObj-pos3.x=sx+1;pObj-pos3.y=2;pObj-center.x=sx+1;結論14pObj-center.y=1;/實現(xiàn)方塊組pObj-pos0.x=sx+1;pObj-pos0.y=0;pObj-pos1.x=sx;pObj-pos1.y=1;pObj-pos2.x=sx+1;pObj-pos2.y=1;pObj-pos3.x=sx;pObj-pos3.y=2;pOb

28、j-center.x=sx;pObj-center.y=1;/實現(xiàn)方塊組 pObj-pos0.x=sx;pObj-pos0.y=0;pObj-pos1.x=sx+1;pObj-pos1.y=0;pObj-pos2.x=sx+1;pObj-pos2.y=1;pObj-pos3.x=sx+1;pObj-pos3.y=2;pObj-center.x=sx+1;pObj-center.y=1;/實現(xiàn)方塊組 pObj-pos0.x=sx+1;pObj-pos0.y=0;pObj-pos1.x=sx;pObj-pos1.y=0;pObj-pos2.x=sx;結論15pObj-pos2.y=1;pObj-p

29、os3.x=sx;pObj-pos3.y=2;pObj-center.x=sx;pObj-center.y=1;/實現(xiàn)方塊組 pObj-pos0.x=sx;pObj-pos0.y=0;pObj-pos1.x=sx;pObj-pos1.y=1;pObj-pos2.x=sx;pObj-pos2.y=2;pObj-pos3.x=sx+1;pObj-pos3.y=1;pObj-center.x=sx;pObj-center.y=1;/實現(xiàn)方塊組 pObj-pos0.x=sx;pObj-pos0.y=0;pObj-pos1.x=sx;pObj-pos1.y=1;pObj-pos2.x=sx;pObj-p

30、os2.y=2;pObj-pos3.x=sx;pObj-pos3.y=3;pObj-center.x=sx;pObj-center.y=2;4.1.2.1 創(chuàng)建方塊首先用隨機函數(shù)定義七種不同的方塊組合,然后通過分支語句 switch 決定出現(xiàn)的方塊組的具體形式。關鍵代碼如下:結論16void CreateObj(POBJECT pObj)srand(:GetTickCount();pObj-type=rand()%7;switch(pObj-type)使用的 API 函數(shù)如下:WINBASEAPI DWORD WINAPI GetTickCount(VOID);GetTickCount 返回(

31、retrieve)從操作系統(tǒng)啟動到現(xiàn)在所經過(elapsed)的秒數(shù),該函數(shù)在 winbase.h 頭文件中定義,winbase.h 已被包含進 windows.h 頭文件中,所以要使用 GetTickCount 只需包含 windows.h 就可以了。void srand(int a) void srand(int a)功能是初始化隨機產生器,從而產生比較分散的偽隨機數(shù),即 rand()函數(shù)的初始值,即使把種子的值改成 a。 從這你可以看到通過 sand()函數(shù),我們是可以產生可以預見的隨機序列;如何我們想產生不可預見的隨機序列,我們利用 srand(unsign)(time(NULL)是一

32、種方法,因為每一次運行程序的時間是不同的int rand(void); 該函數(shù)包含在頭文件 stdlib.h 中,調用時隨機產生一個 0 到 RAND_MAX 之間平均分布的整數(shù),RAND_MAX 是一個常量(定義為:#define RAND_MAX 0 x7fff) 。4.1.2.2 產生新的方塊 在判斷可以產生下一組方塊的時候,程序將產生下一組方塊,關鍵代碼如下:void GetNextObj()BOOL isDead=FALSE; /假設未結束for(int i=0;i4;i+)if(Ev(int) CurObj.posi.x(int)CurObj.posi.y)isDead=TRUE;

33、結論17if(isDead) /游戲結束EndGame();CreateObj(&NextObj);使用的 API 函數(shù)有:void *memcpy( void *dest, const void *src, size_t count );該函數(shù)包含在頭文件 memory.h 或 string.h,該函數(shù)返回源地址的指針。三個參數(shù)中, dest 表示新緩沖區(qū)地址,src 表示源緩沖區(qū)地址,count 表示源緩沖區(qū)大小,該函數(shù)拷貝 count 指定的源緩沖區(qū)的字節(jié)到目的緩沖區(qū).如果源和目的地址重復,該函數(shù)不能保證重復的區(qū)域里最初的源地址的字節(jié)在覆蓋前被拷貝.4.1.2.3 在右上角顯示下

34、一個產生的方塊該段代碼的主要作用是幫助玩家判斷下一個出現(xiàn)的方塊組合,以便在游戲處理上作出更有力的判斷。主要的設計思想是設定模式,得到下個方塊組的產生信息,調用不同的設備完成設備初始化,然后在右上角實現(xiàn)要求。關鍵代碼如下:void DrawNext()SetBkMode(hdc,TRANSPARENT);HPEN hNull = CreatePen(PS_NULL,1,0);HPEN hOldPen = (HPEN)SelectObject(hdc,hNull);HBRUSH hGrayBrush = (HBRUSH)GetStockObject(GRAY_BRUSH) ;HBRUSH hOld

35、Brush = (HBRUSH)SelectObject(hdc,hGrayBrush);SetTextColor(hdc,RGB(255,0,0);TextOut(hdc,xStart,10,下一個,6);for(int i=0;i=MAXY) /可以消去 for( int n=0;n4;n+) Ev(int)CurObj.posn.x(int)CurObj.posn.y=1; SetCruObjZero(); DelDieLine(); GetNextObj(); DrawSence(); DrawNext(); DrawInfo(); return; for(i=0;i4;i+) /如果

36、可以降落 CurObj.posi.x=tempi.x;CurObj.posi.y=tempi.y; CurObj.center.y+=1; DrawSence(); return;結論194.1.2.5 方塊移動的算法關鍵代碼如下:void Move(int step) for(i=0;i4;i+) CurObj.posi.x=tempi.x;CurObj.posi.y=tempi.y; CurObj.center.x+=step; DrawSence(); return;4.1.2.6 實現(xiàn)方塊翻轉 方塊翻轉是俄羅斯方塊游戲中最為關鍵的一步,我們首先設定一個臨時變量,如果下落的方塊組是 O

37、型,可以不用翻轉。如果不是 O 型,可以對方塊組的坐標進行技術處理。當然如果方塊在游戲區(qū)域邊緣無法實現(xiàn)翻轉的情況也應該考慮到。翻轉算法中最關鍵的因素是以方塊組為基準旋轉,計算新的位置。代碼如下:void Flip()for(i=0;i4;i+) cx=CurObj.posi.x-CurObj.center.x;cy=CurObj.center.y-CurObj.posi.y;tempi.x=CurObj.center.x+cy;tempi.y=CurObj.center.y+cx;if(Ev int (tempi.x) int(tempi.y) )/Can not Flip return;if

38、(tempi.x=MAXX) return;if(tempi.y=MAXY) return;結論20 for(i=0;i4;i+) CurObj.posi.x=tempi.x;CurObj.posi.y=tempi.y; DrawSence(); return;4.1.2.7 方塊消去首先判斷方塊能否進行消去,然后使用消去算法將能消去一行或數(shù)行方塊消去,同時刷新工作區(qū)。這個方法的算法是這樣的:先遍歷每一行,對每一行都進行檢查是不是已經填滿了方塊,如果已經填滿了方塊,則上面的方塊都整體往下移動一格。關鍵代碼如下:void DelDieLine() int isDead=1; /判斷消去的條件 i

39、nt DieCount=0; for(int i=0;i=0;i-) isDead=1;for(int j=0;j=NextScore) /對于高手提高速度 speed+; if(speed=15) speed=0; dtime=timespeed; DrawInfo(); NextScore+=10000; Count+; int DestLine; for(i=DieCount-1;i=0;i-) for(DestLine = DieLinei;DestLine0;DestLine-) for(int j=0;jMAXX;j+) EvjDestLine=EvjDestLine-1; 4.2

40、 菜單命令的代碼設計4.2.1 開始游戲只要在方法中先定義一個線程,然后讓這個線程開始運行就可以了。當然還應該注意重新給一些變量賦值,如游戲的分數(shù)、游戲的級別、方塊下落的速度等。所有的組件準備好后,開始進行游戲環(huán)境的初始化工作,讓玩家可以隨時開始游戲。開始菜單的執(zhí)行界面如下圖:結論22初始化的代碼如下:void BeginGame() .for(int i=0;iMAXX;i+) for(int j=0;jMAXY-level;j+) Evij=0;for(i=0;iMAXX;i+) for(int j=MAXY-level;j=0;i-) for(int j=0;jMAXX;j+) Evji=1; for(j=0;j19;j+) DrawSence(); for(i=0;iMAXY;i+)結論24 for(int j=0;jMAXX;j+) Evji=0; for(j=0;j19;j+) DrawSence(); 4.3 本章小結本章介紹了俄羅斯方塊的具體設計與實現(xiàn),詳細的闡明了本系統(tǒng)的設計思想,描述了設

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論