版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、VC 俄羅斯方塊畢業(yè)論文專專 業(yè):業(yè):計算機(jī)科學(xué)與技術(shù)ABSTRACT摘要摘要 俄羅斯方塊是大多數(shù)人都熟悉的一款游戲,它玩法簡單,樂趣無窮,一直深受各年齡層的玩家喜愛,經(jīng)久不衰。而計算機(jī)和網(wǎng)絡(luò)的發(fā)展給于了它更大的發(fā)展空間。本設(shè)計的主要目的是通過使用 VISUAL C+進(jìn)行設(shè)計,詳細(xì)介紹了基于 API 的俄羅斯方塊系統(tǒng)的開發(fā)過程。內(nèi)容包括:Visual C+的特點(diǎn),系統(tǒng)可行性研究,功能分析,總體設(shè)計和詳細(xì)設(shè)計。通過本文讀者了解整個俄羅斯方塊的開發(fā)過程,同時本次設(shè)計也可以作為系統(tǒng)再開發(fā)時的參考。關(guān)鍵詞:俄羅斯方塊;游戲;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結(jié)論3目錄摘要.IABSTRACT.II目錄.31 緒論 .51.1 課題背景 .51.2 VISUAL C+6.0 介紹 .51.3 API 簡介 .61.4 本章小結(jié) .72 可行性研究與需求分析.82.1 可行性研究 .82.2 需求分析 .82.3 本章小節(jié) .93 系統(tǒng)的總體設(shè)計.103.1 總體功能分析 .103.2 系統(tǒng)功能分析 .103.3 功能模塊簡介.11
5、3.4 本章小結(jié).114 系統(tǒng)的具體實(shí)現(xiàn).124.1 游戲基本邏輯控制.124.2 菜單命令的代碼設(shè)計 .214.3 本章小結(jié) .24結(jié)論.25參考文獻(xiàn).26致謝.27結(jié)論4前言俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,它曾經(jīng)造成的轟動與造成的經(jīng)濟(jì)價值可以說是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人 Alex Pajitnov 制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個俄羅斯方塊時代。俄羅斯方塊是大多數(shù)人都熟悉的一款游戲,它玩法簡單,樂趣無窮,一直深受各年齡層的玩家喜愛,經(jīng)久不衰。而計算機(jī)和網(wǎng)絡(luò)的發(fā)展給于了它更大的發(fā)展空
6、間,單機(jī)版與網(wǎng)絡(luò)版俄羅斯方塊游戲也一直深受人們的喜愛, 經(jīng)調(diào)查,俄羅斯方塊在各種版本的游戲領(lǐng)域一直占據(jù)著重要地位,這就使得這款游戲的意義更加重要。本設(shè)計的主要目的是通過使用 Visual C+進(jìn)行設(shè)計,詳細(xì)介紹了基于 API 的俄羅斯方塊系統(tǒng)的開發(fā)過程。內(nèi)容包括:Visual C+的特點(diǎn),系統(tǒng)可行性研究,功能分析,總體設(shè)計和詳細(xì)設(shè)計。 該俄羅斯方塊游戲主要實(shí)現(xiàn)以下功能:1. 每四個小方塊可組合成一個方塊群。2從七個方塊群中,隨機(jī)取一組,并且告訴玩家下一組方塊是什么。3在游戲框中方塊由上方慢慢落下。4玩家可以按【】 、 【】移動方塊,按【】加速方塊落下的速度,按【】 、空格鍵旋轉(zhuǎn)方塊,所有的方塊
7、都要在游戲框中。5方塊落下是,當(dāng)方塊組中由一個到達(dá)游戲框最底或是下一格有方塊時即停止移動,凈將方塊移到游戲框底。6如果同一行的 10 格中全部填滿小方塊,即可消除該行,上面的方塊以行為單位,由上一行一行一行往下移。7消除的行數(shù)越多,落下的速度越快。8如果有方塊停住時有方塊未在游戲框內(nèi),游戲結(jié)束。9游戲能夠在玩的時候給出分?jǐn)?shù)、速度和級別。結(jié)論51 緒論1.1 課題背景作為一款極為經(jīng)典的游戲,俄羅斯方塊吸引一代代玩家樂此不彼,本例通過使用 VISUAL C+進(jìn)行設(shè)計,大量使用了 API 函數(shù),將書本知識應(yīng)用到實(shí)際程序中,以便于為以后的進(jìn)一步學(xué)習(xí)奠定基礎(chǔ)。1.2 VISUAL C+6.0 介紹作為一
8、種 C/C+語言的集成開發(fā)環(huán)境(IDE),產(chǎn)生 VC 的最早的根源其實(shí)要追溯到 DOS 時代的 Borland 公司,當(dāng)初 Borland 公司開發(fā)的 Turbo Pascal 和 Turbo C讓程序員們深刻感受到了把編輯器和編譯器集成在一起的 IDE 是多么的方便,微軟也看到了這一優(yōu)點(diǎn),于是相繼開發(fā)了 Quick C 和 Microsoft C/C+等多個 DOS 版本的C/C+集成開發(fā)工具。隨著 Windows 的不斷成熟,微軟決定放棄 DOS 下的開發(fā)工作,正式推出了 Windows 下的 Visual C+ 1.0,早期的 VC 功能并不什么強(qiáng)大,使用起來也不方便,1.0 版和 1.
9、5 版都是 16 位編程工具。VC 的革命性改變得益于 Windows 95的推出,從 VC 2.0 開始,微軟又放棄了 16 位編程,以后的 VC 都只用于 32 位編程開發(fā),為了與 MFC 類庫的版本號保持一致,微軟跳過了版本 3,直接推出 VC 4.0,這個版本及修訂版 4.2 的部分界面風(fēng)格一直被保留到最新的 VC 6.0 中。從 VC4 到VC6,VC 的各種功能不斷增強(qiáng),MFC 類庫的內(nèi)容也越來越豐富,現(xiàn)在利用 VC 開發(fā)應(yīng)用程序已經(jīng)是一件相當(dāng)輕松的事情了?,F(xiàn)在的 C+ Builder 也是一個非常優(yōu)秀的開發(fā)工具,但是基于下面的幾點(diǎn)原因,使用 VC 更為現(xiàn)實(shí):首先,VC 的核心MF
10、C 類庫已是事實(shí)上的業(yè)界標(biāo)準(zhǔn);其次,VC與 Visual Studio 中的其它可視化開發(fā)工具緊密集成,可用于開發(fā)非常專業(yè)的Windows、Web 和企業(yè)級應(yīng)用程序;第三,VC 的聯(lián)機(jī)幫助已被集成到 MSDN(微軟開發(fā)者網(wǎng)絡(luò))庫中去了,后者包含了微軟大部分產(chǎn)品的技術(shù)文檔和支持資料,內(nèi)容相當(dāng)豐富,是程序員不可多得的參考資料,現(xiàn)在 MSDN 庫隨著 Visual Studio 6.0 一起發(fā)行,實(shí)在是大家的福音。在 Windows 版本系列中,下列特點(diǎn)是始終保持并不斷發(fā)展的:圖形化的窗口界面。多任務(wù)方式的運(yùn)行環(huán)境。虛擬化的設(shè)備接口。以虛擬內(nèi)存為核心的內(nèi)存管理。網(wǎng)絡(luò)功能及應(yīng)用程序,包括 Micros
11、oft 網(wǎng)絡(luò)、通用基礎(chǔ)網(wǎng)絡(luò)協(xié)議等。結(jié)論6多媒體功能及應(yīng)用程序,包括圖形、圖像、聲音、動畫和開發(fā)工具等。功能豐富的用戶管理工具和實(shí)用軟件。目前 VC 的最新版本是 VC6,屬于微軟可視化開發(fā)套件 Visual Studio 6.0 中的一項重頭戲。VC6 引入了多項出色的新功能,例如智能感應(yīng)(IntelliSense)技術(shù),程序員在鍵入代碼時,VC6 的編輯器能自動把屬性、參數(shù)信息、數(shù)據(jù)類型信息、代碼信息羅列出來,供程序員選擇并自動完成輸入,這種技術(shù)源自于 VB5,現(xiàn)在已被應(yīng)用到了 VC6、VJ6 和 IE5 中,有了它之后,程序員無需去記憶復(fù)雜的語法、參數(shù)和構(gòu)件屬性,從而提高了編程效率。另一項
12、典型的新技術(shù)是即編即調(diào)(Edit and Continue),現(xiàn)在程序員可以直接在調(diào)試過程中編輯代碼,而不用象以前那樣,需要先退出調(diào)試狀態(tài),然后編輯,重新編譯連接,并啟動調(diào)試器,再跟蹤到發(fā)生問題的地方。此外,VC6 還具有動態(tài)更新類視圖、延遲加載、支持 IE 4.0 通用控件等等眾多的新特性。作為當(dāng)今流行的開發(fā)環(huán)境,Visual C+6.0 具有如下特點(diǎn):(1)Visual C+6.0 提供了開發(fā) Windows 環(huán)境下的應(yīng)用程序的簡捷、快速和實(shí)用的開發(fā)環(huán)境。利用 Visual C+6.0 開發(fā) Windows 應(yīng)用程序具有很高的效率。(2)Visual C+6.0 提供了 MFC 類庫,開發(fā)
13、者只需要做少量的工作就可以得到功能齊全的 Windows 應(yīng)用程序。(3)Visual C+6.0 提供了高度集成的工具集,使得在開發(fā)應(yīng)用程序的全過程中都保證了較高的效率。集成化便于程序開發(fā),開發(fā)者可以在諸如編輯、建立、調(diào)試等不同的任務(wù)之間快速切換,甚至可以同時進(jìn)行。(4)圖形化的可視特點(diǎn)使得 Visual C+6.0 簡單易學(xué)。1.3 API 簡介微軟 windows 應(yīng)用程序應(yīng)用程序接口(Application Programming Interface ,API)是為開發(fā)者在開發(fā) windows 應(yīng)用程序時,提供給應(yīng)用程序的接口程序,包括Windows XP,Windows 2000,W
14、indows NT,Winows 95/98,以及 Windows ME.windows API 可以被用在所有的以 windows 為平臺的應(yīng)用程序下面不管是 32 位的或是 64 位的Windows 系統(tǒng)通常會支持相同的功能函數(shù)。雖然隨著軟件技術(shù)的不斷發(fā)展,在 WINDOWS 平臺上出現(xiàn)了很多優(yōu)秀的可視化編程環(huán)境,程序員可以采用“即見即所得”的編程方式來開發(fā)具有精美用戶界面和功能強(qiáng)大的應(yīng)用程序。但是如果我們要開發(fā)出更靈活、更實(shí)用、更具效率的應(yīng)用程序,必然要涉及到直接使用 API 函數(shù),雖然類庫和控件使應(yīng)用程序的開發(fā)簡單的多,但它們只提供 WINDOWS 的一般功能,對于比較復(fù)雜和特殊的功能
15、來說,使用類庫和控件是非常難以實(shí)現(xiàn)的,這時就需要采用 API 函數(shù)來實(shí)現(xiàn)。API 函數(shù)是構(gòu)筑整個Windows 框架的基石,只有充分理解和利用 API 函數(shù),才能深入到 Windows 的內(nèi)部,充分發(fā)揮各種 32 位平臺的強(qiáng)大功能和靈活性,才能成功地擴(kuò)展和突破類庫、控件和可視開發(fā)環(huán)境的限制。結(jié)論7所有在 Win32 平臺上運(yùn)行的應(yīng)用程序都可以調(diào)用這些函數(shù)。使用 Win32 API,應(yīng)用程序可以充分挖掘 Windows 的 32 位操作系統(tǒng)的潛力。 Mircrosoft 的所有 32 位平臺都支持統(tǒng)一的 API,包括函數(shù)、結(jié)構(gòu)、消息、宏及接口。使用 Win32 API 不但可以開發(fā)出在各種平臺上
16、都能成功運(yùn)行的應(yīng)用程序,而且也可以充分利用每個平臺特有的功能和屬性。 在具體編程時,程序?qū)崿F(xiàn)方式的差異依賴于相應(yīng)平臺的底層功能的不同。最顯著的差異是某些函數(shù)只能在更強(qiáng)大的平臺上實(shí)現(xiàn)其功能。例如,安全函數(shù)只能在Windows NT 操作系統(tǒng)下使用。另外一些主要差別就是系統(tǒng)限制,比如值的范圍約束,或函數(shù)可管理的項目個數(shù)等等。根據(jù) Windows API 函數(shù)完成的功能,可將其分為三類:窗口管理函數(shù):實(shí)現(xiàn)窗口的創(chuàng)建、移動和修改功能。圖形設(shè)備接口(Graphics Device Interface,GDI):實(shí)現(xiàn)與設(shè)備無關(guān)的圖形操作功能。系統(tǒng)服務(wù)函數(shù):實(shí)現(xiàn)與操作系統(tǒng)有關(guān)的各種功能。1.4 本章小結(jié)本章
17、介紹了軟件開發(fā)環(huán)境 VISUAL C+的基礎(chǔ)性知識,同時簡要介紹了 WINDOWS API 函數(shù)的一些知識,這些知識有助于接下來整個俄羅斯方塊游戲的開發(fā)與設(shè)計。在用 Visual C+開發(fā)面向?qū)ο髴?yīng)用程序時,主要有兩種方法:一種是使用 Windows 提供的 API 函數(shù),另一種方法是直接使用 Microsoft 提供的 MFC 類庫。本次設(shè)計使用第一種方法。結(jié)論82 可行性研究與需求分析 2.1 可行性研究問題定義的可行性分析是軟件生存周期的第一階段??尚行匝芯康哪康氖鞘褂米钌俚拇鷥r在盡可能短的時間內(nèi)確定問題是否能夠解決??尚行匝芯康膶?shí)質(zhì)是要進(jìn)行一次系統(tǒng)分析和設(shè)計的簡化過程,也就是在較高層上
18、以抽象的方式進(jìn)行系統(tǒng)分析和設(shè)計的過程。一般來講,應(yīng)該從技術(shù)、經(jīng)濟(jì)和操作等方面來研究每種解法的可行性。2.1.1.要求 作為一款極為經(jīng)典的游戲,俄羅斯方塊吸引一代代玩家樂此不彼,本例通過使用 VISUAL C+進(jìn)行設(shè)計,大量使用了 API 函數(shù),將書本知識應(yīng)用到實(shí)際程序中,以便于為以后的進(jìn)一步學(xué)習(xí)奠定基礎(chǔ)。本例要求大量使用 API 函數(shù),熟悉消息映射機(jī)制的具體實(shí)現(xiàn)。2.1.2 目標(biāo) 俄羅斯方塊游戲的設(shè)計目標(biāo)完成一個比較簡單的游戲,使之能夠?qū)崿F(xiàn)俄羅斯方塊游戲的基本功能,成為一個比較完整的游戲框架。該游戲作為一個單機(jī)版的游戲界面,基本達(dá)到俄羅斯游戲的基本功能。通過練習(xí)能進(jìn)一步學(xué)習(xí) API 函數(shù)的使用
19、。2.1.3 可行性研究方法 實(shí)行軟件的可行性研究方法主要有:成本效益分析,對估算問題的看法,軟件的作用范圍,軟件的成本估算,速度安排等。2.1.4 決定可行性的主要因素 決定軟件可行性的四個主要方面有:經(jīng)濟(jì)因素,技術(shù)因素,法律因素,不同方案。由于該游戲本身的規(guī)模不大,幾乎可以在所有的計算機(jī)系統(tǒng)上運(yùn)行,所以對于硬件和軟件沒有太苛刻的要求,各種游戲平臺,大型電腦、家用游戲機(jī)等,甚至連掌上型的小游戲機(jī)都可以運(yùn)行。2.2 需求分析 俄羅斯方塊是一個膾炙人口的游戲,所以我們大家對它都很是熟悉,現(xiàn)在的要求是盡量設(shè)計一個合格的俄羅斯方塊游戲。作為一個廣受關(guān)注的游戲,現(xiàn)在有大量的關(guān)于俄羅斯方塊的資料,我盡量
20、吸取已有的成功的經(jīng)驗(yàn),做到精益求精。結(jié)論92.3 本章小節(jié)本章分析了當(dāng)前開發(fā)本系統(tǒng)的形式,并介紹了對計俄羅斯方塊游戲系統(tǒng)的可行性研究的前提及對該系統(tǒng)的需求分析。結(jié)論103 系統(tǒng)的總體設(shè)計總體設(shè)計過程首先是尋找實(shí)現(xiàn)目標(biāo)系統(tǒng)的各種不同的方案。要進(jìn)行系統(tǒng)完善的總體功能分析,首先要確定俄羅斯方塊游戲中的不同模塊,鑒于 API 編程的不同,我盡量用比較清晰的思路表達(dá)意圖。根據(jù)此系統(tǒng)的功能要求,除了要保持整體設(shè)計的統(tǒng)一性,還要突出不同模塊的特點(diǎn),使整個系統(tǒng)趨于統(tǒng)一。3.1 總體功能分析總體設(shè)計過程通常由兩個主要階段組成:系統(tǒng)設(shè)計階段和結(jié)構(gòu)設(shè)計階段。盡量利用現(xiàn)有的軟硬件環(huán)境,采用 Viusal C+進(jìn)行俄羅
21、斯方塊的設(shè)計,由于 API函數(shù)在 Windows 設(shè)計中的重要性,需要大量使用到 API 函數(shù),一定程度上增加了難度。3.2 系統(tǒng)功能分析系統(tǒng)功能分析是在系統(tǒng)開發(fā)的總體任務(wù)的基礎(chǔ)工業(yè)上完成的。該俄羅斯方塊游戲主要實(shí)現(xiàn)以下功能:1. 從七個方塊群中,隨機(jī)取一組,并且告訴玩家下一組方塊是什么。2. 在游戲框中方塊由上方慢慢落下。3. 玩家可以按【】 、 【】移動方塊,按【】加速方塊落下的速度,按【】 、空格鍵旋轉(zhuǎn)方塊,所有的方塊都要在游戲框中。4. 方塊落下是,當(dāng)方塊組中由一個到達(dá)游戲框最底或是下一格有方塊時即停止移動,凈將方塊移到游戲框底。5. 如果同一行的 10 格中全部填滿小方塊,即可消除該
22、行,上面的方塊以行為單位,由上一行一行一行往下移。6. 消除的行數(shù)越多,落下的速度越快。7. 如果有方塊停住時有方塊未在游戲框內(nèi),游戲結(jié)束。8. 游戲能夠在玩的時候給出分?jǐn)?shù)、速度和級別。游戲大致的模塊可以由主菜單實(shí)現(xiàn)控制,主菜單的實(shí)現(xiàn)見圖 3.1結(jié)論11主菜單開始退出開始暫停開始結(jié)束開始圖 3.1 控制流程3.3 功能模塊簡介 由于俄羅斯方塊游戲的相對簡單,我們將在下一章中具體實(shí)現(xiàn)。3.4 本章小結(jié)本章介紹了俄羅斯方塊游戲系統(tǒng)的總體設(shè)計方案,詳細(xì)說明了系統(tǒng)實(shí)現(xiàn)的功能以及整個系統(tǒng)的流程分析,并以功能模塊圖的形式體現(xiàn)出來。 結(jié)論124 4 系統(tǒng)的具體實(shí)現(xiàn)系統(tǒng)的具體實(shí)現(xiàn)4.1 游戲基本邏輯控制使用
23、API 函數(shù)編寫游戲,首先生成一個應(yīng)用程序框架,游戲的框架采用標(biāo)準(zhǔn)的windows 框架,上面有標(biāo)題欄、菜單欄,以方便玩家控制游戲,我們先做好這一部分。菜單欄里包括開始、暫停、結(jié)束等控制菜單。我們要設(shè)計對菜單操作進(jìn)行響應(yīng),并設(shè)計相應(yīng)的控制游戲,這是需要添加對菜單事件的響應(yīng)方法。然后在一個面板上構(gòu)建游戲的界面,將這個面板嵌入到游戲的大框架中,這樣游戲的界面就有了。在游戲面板構(gòu)建好之后,應(yīng)該讓游戲能夠玩起來,這一部分主要是編寫一些算法,用來控制游戲。這里需要增加對鍵盤事件的響應(yīng),讓玩家能夠玩游戲。 4.1.1 顯示背景在 Visual C+中,使用 Visual C+自帶的方法可以讀取并顯示位圖文
24、件。使用 API 函數(shù)的畫刷和畫筆函數(shù)創(chuàng)建畫刷和畫筆句柄,然后創(chuàng)建一個矩形區(qū)域作為俄羅斯方塊游戲的執(zhí)行區(qū)域(選擇黑色背景和紅色方塊,以便于區(qū)分) 。主要使用到的 API 函數(shù)有:GetDC(HWND) 獲取設(shè)備句柄int ReleaseDC(HWND,HDC)由 GetDC()獲取的設(shè)備環(huán)境必須用 ReleaseDC()函數(shù)釋放SelectObject(HDC,HWND)應(yīng)用程序?qū)⑹褂镁浔?HWND 所指的設(shè)備進(jìn)行繪圖,直到選入另外的設(shè)備為止。使用時一般需要在函數(shù)前進(jìn)行強(qiáng)制類型轉(zhuǎn)換,設(shè)定為 CPEN、CBRUSH 等。BitBlt(int,int,int,int,CDC,int,int,DWO
25、RD)CDC:BitBlt 執(zhí)行的操作為將源 DC 中位圖復(fù)制到目的 DC 中。其中前四個參數(shù)為目的區(qū)域的坐標(biāo)(x,y)及長度和寬度(Width, nHeight) ,第五個參數(shù)是源 DC 指針,接下來的參數(shù)是源 DC 中的起始坐標(biāo),最后一個參數(shù)為光柵操作的類型。BOOL Rectangle(HDC hdc,int x1,int y1,int x2,int y2)使用當(dāng)前畫筆繪制一個舉行區(qū)域,并使用當(dāng)前畫刷進(jìn)行填充。4.1.2 方塊的顯示與控制俄羅斯方塊游戲中的基本方塊有 7 種,可以通過編寫一個結(jié)構(gòu)來存儲和顯示這些方塊。具體代碼如下:typedef struct struct_fPoint
26、/點(diǎn)坐標(biāo)結(jié)論13 float x; float y;FPOINT,*PFPOINT;typedef struct struct_Object /方塊結(jié)構(gòu) int type; FPOINT center; FPOINT pos4;OBJECT,*POBJECT;各種形式的方塊組組合如下:/實(shí)現(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;/實(shí)現(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;結(jié)論14pObj-center.y=1;/實(shí)現(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;/實(shí)現(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;/實(shí)現(xiàn)方塊組 pObj-pos0.x=sx+1;pObj-pos0.y=0;pObj-pos1.x=sx;pObj-pos1.y=0;pObj-pos2.x=sx;結(jié)論15pObj-pos2.y=1;pObj-p
29、os3.x=sx;pObj-pos3.y=2;pObj-center.x=sx;pObj-center.y=1;/實(shí)現(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;/實(shí)現(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)建方塊首先用隨機(jī)函數(shù)定義七種不同的方塊組合,然后通過分支語句 switch 決定出現(xiàn)的方塊組的具體形式。關(guān)鍵代碼如下:結(jié)論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)在所經(jīng)過(elapsed)的秒數(shù),該函數(shù)在 winbase.h 頭文件中定義,winbase.h 已被包含進(jìn) windows.h 頭文件中,所以要使用 GetTickCount 只需包含 windows.h 就可以了。void srand(int a) void srand(int a)功能是初始化隨機(jī)產(chǎn)生器,從而產(chǎn)生比較分散的偽隨機(jī)數(shù),即 rand()函數(shù)的初始值,即使把種子的值改成 a。 從這你可以看到通過 sand()函數(shù),我們是可以產(chǎn)生可以預(yù)見的隨機(jī)序列;如何我們想產(chǎn)生不可預(yù)見的隨機(jī)序列,我們利用 srand(unsign)(time(NULL)是一
32、種方法,因?yàn)槊恳淮芜\(yùn)行程序的時間是不同的int rand(void); 該函數(shù)包含在頭文件 stdlib.h 中,調(diào)用時隨機(jī)產(chǎn)生一個 0 到 RAND_MAX 之間平均分布的整數(shù),RAND_MAX 是一個常量(定義為:#define RAND_MAX 0 x7fff) 。4.1.2.2 產(chǎn)生新的方塊 在判斷可以產(chǎn)生下一組方塊的時候,程序?qū)a(chǎn)生下一組方塊,關(guān)鍵代碼如下:void GetNextObj()BOOL isDead=FALSE; /假設(shè)未結(jié)束for(int i=0;i4;i+)if(Ev(int) CurObj.posi.x(int)CurObj.posi.y)isDead=TRUE;
33、結(jié)論17if(isDead) /游戲結(jié)束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ū).如果源和目的地址重復(fù),該函數(shù)不能保證重復(fù)的區(qū)域里最初的源地址的字節(jié)在覆蓋前被拷貝.4.1.2.3 在右上角顯示下
34、一個產(chǎn)生的方塊該段代碼的主要作用是幫助玩家判斷下一個出現(xiàn)的方塊組合,以便在游戲處理上作出更有力的判斷。主要的設(shè)計思想是設(shè)定模式,得到下個方塊組的產(chǎn)生信息,調(diào)用不同的設(shè)備完成設(shè)備初始化,然后在右上角實(shí)現(xiàn)要求。關(guā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;結(jié)論194.1.2.5 方塊移動的算法關(guān)鍵代碼如下: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 實(shí)現(xiàn)方塊翻轉(zhuǎn) 方塊翻轉(zhuǎn)是俄羅斯方塊游戲中最為關(guān)鍵的一步,我們首先設(shè)定一個臨時變量,如果下落的方塊組是 O
37、型,可以不用翻轉(zhuǎn)。如果不是 O 型,可以對方塊組的坐標(biāo)進(jìn)行技術(shù)處理。當(dāng)然如果方塊在游戲區(qū)域邊緣無法實(shí)現(xiàn)翻轉(zhuǎn)的情況也應(yīng)該考慮到。翻轉(zhuǎn)算法中最關(guān)鍵的因素是以方塊組為基準(zhǔn)旋轉(zhuǎ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;結(jié)論20 for(i=0;i4;i+) CurObj.posi.x=tempi.x;CurObj.posi.y=tempi.y; DrawSence(); return;4.1.2.7 方塊消去首先判斷方塊能否進(jìn)行消去,然后使用消去算法將能消去一行或數(shù)行方塊消去,同時刷新工作區(qū)。這個方法的算法是這樣的:先遍歷每一行,對每一行都進(jìn)行檢查是不是已經(jīng)填滿了方塊,如果已經(jīng)填滿了方塊,則上面的方塊都整體往下移動一格。關(guān)鍵代碼如下: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、 菜單命令的代碼設(shè)計4.2.1 開始游戲只要在方法中先定義一個線程,然后讓這個線程開始運(yùn)行就可以了。當(dāng)然還應(yīng)該注意重新給一些變量賦值,如游戲的分?jǐn)?shù)、游戲的級別、方塊下落的速度等。所有的組件準(zhǔn)備好后,開始進(jìn)行游戲環(huán)境的初始化工作,讓玩家可以隨時開始游戲。開始菜單的執(zhí)行界面如下圖:結(jié)論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+)結(jié)論24 for(int j=0;jMAXX;j+) Evji=0; for(j=0;j19;j+) DrawSence(); 4.3 本章小結(jié)本章介紹了俄羅斯方塊的具體設(shè)計與實(shí)現(xiàn),詳細(xì)的闡明了本系統(tǒng)的設(shè)計思想,描述了設(shè)
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《學(xué)前教育概述》課件
- 單位管理制度集合大合集【人力資源管理篇】十篇
- 單位管理制度分享匯編【員工管理篇】十篇
- 單位管理制度分享大全【人員管理篇】
- 單位管理制度范例選集【員工管理】
- 單位管理制度范例合集【人力資源管理篇】十篇
- 單位管理制度呈現(xiàn)合集【員工管理篇】
- 單位管理制度呈現(xiàn)大合集【人事管理】十篇
- 《微點(diǎn)精析》考向19 文化常識 高考語文一輪復(fù)習(xí)考點(diǎn)微專題訓(xùn)練(原卷+解析)
- 第4單元 民族團(tuán)結(jié)與祖國統(tǒng)一(B卷·能力提升練)(解析版)
- 教練技術(shù)CP理論P(yáng)PT課件
- 機(jī)械工程學(xué)報標(biāo)準(zhǔn)格式
- 濕法脫硫用水水質(zhì)要求
- 東南大學(xué)文科揭榜掛帥重大平臺績效考核表
- 城管局個人工作總結(jié)
- 鉑銠合金漏板.
- (完整版)建筑力學(xué)(習(xí)題答案)
- 少年宮籃球活動教案
- 國有建設(shè)企業(yè)《大宗材料及設(shè)備采購招標(biāo)管理辦法》
- 民間秘術(shù)絕招大全
- (完整版)展廳展館博物館美術(shù)館設(shè)計標(biāo)招標(biāo)評分細(xì)則及打分表
評論
0/150
提交評論