畢業(yè)設(shè)計(jì)(論文)基于wxWidgets的俄羅斯方塊的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于wxWidgets的俄羅斯方塊的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于wxWidgets的俄羅斯方塊的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于wxWidgets的俄羅斯方塊的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于wxWidgets的俄羅斯方塊的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(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、基于wxwidgets的俄羅斯方塊的設(shè)計(jì)與實(shí)現(xiàn)design and implementation of tetris based on wxwidgets2011年5 月基于c+的俄羅斯方塊的實(shí)現(xiàn)摘要 俄羅斯方塊是非常傳統(tǒng)的游戲,操作簡(jiǎn)單,難度卻不低,廣受娛樂(lè)界歡迎。給人們的生活帶來(lái)了健康愉快的補(bǔ)充,唯美的藝術(shù)享受。本文在基于visual c+實(shí)現(xiàn)的單機(jī)版俄羅斯方塊游戲的基礎(chǔ)上,深入的研究wxwidgets。主要工作如下: 分析了俄羅斯游戲規(guī)則。 系統(tǒng)的介紹了實(shí)現(xiàn)俄羅斯方塊游戲的算法設(shè)計(jì)過(guò)程。 熟悉軟件項(xiàng)目開(kāi)發(fā)的過(guò)程和并掌握其要點(diǎn),學(xué)習(xí)wxwidgets 通過(guò)制作簡(jiǎn)單游戲可以豐富游戲玩家的娛樂(lè)

2、生活 通過(guò)游戲編程來(lái)加深自己對(duì)c+與面向?qū)ο笏枷氲恼J(rèn)識(shí)和理解關(guān)鍵詞:俄羅斯方塊游戲 wxwidgets 設(shè)計(jì) 實(shí)現(xiàn)design and implementation of tetris based on wxwidgetsabstract tetris game is very traditional, simple, but not low. it is widely welcomed by the entertainment industry. brought to peoples lives happy and healthy complement to the art of aesth

3、etic enjoyment.in this paper, based on visual c + + implementation of stand-alone version of tetris game, based on in-depth study of wxwidgets.the main work is as follows: analysis of the russian rules of the game. system introduces an algorithm to achieve tetris game design process. familiar with s

4、oftware development and mastery of the process and its key points, learning wxwidgets rich by making a simple game can be a gamers entertainment programming to deepen their own through the game on c + + and object-oriented knowledge and understanding of ideaskeywords: tetris wxwidgets design achieve

5、d目錄第一章 概述11.1研究背景11.2游戲的意義與內(nèi)涵11.3課題內(nèi)容21.4論文組織結(jié)構(gòu)3第二章 相關(guān)知識(shí)52.1基本工具52.2開(kāi)發(fā)語(yǔ)言52.2.1 c+52.2.2 wxwidgets6第三章 系統(tǒng)分析83.1 需求分析83.2 分析建模93.2.1游戲設(shè)計(jì)分析93.2.2 功能分析93.2.3 注意事項(xiàng)103.2.4 游戲流程10第四章 系統(tǒng)設(shè)計(jì)124.1游戲程序的構(gòu)架設(shè)計(jì)124.2 類(lèi)圖分析124.3游戲程序的模塊設(shè)計(jì)154.3.1 模塊設(shè)計(jì)154.3.2 模塊解析164.3界面設(shè)計(jì)234.4游戲規(guī)則和基本操作24第五章 系統(tǒng)實(shí)現(xiàn)265.1開(kāi)發(fā)環(huán)境265.2系統(tǒng)流程圖285.3算

6、法設(shè)計(jì)285.3.1方塊的存儲(chǔ)285.3.2方塊變形的實(shí)現(xiàn)295.3.3向下移動(dòng)295.4系統(tǒng)展示30第六章 總結(jié)及展望32致謝33參考文獻(xiàn)34第一章 概述1.1研究背景隨著21世紀(jì)信息社會(huì)的到來(lái),計(jì)算機(jī)在人們的工作和生活中的深入,要求我們?cè)絹?lái)越多地與計(jì)算機(jī)打交道,為了使用戶在繁忙的日程工作中得到放松,于是出現(xiàn)了各種各樣的休閑軟件,如聊天工具,游戲等等。于是我著手開(kāi)始設(shè)計(jì)一個(gè)這樣的游戲軟件。由莫斯科數(shù)學(xué)家亞歷克西帕杰諾夫(alexey pajitnov)所設(shè)計(jì)的“俄羅斯方塊”被公認(rèn)為有史以來(lái)最暢銷(xiāo)的游戲,至今魅力不減。俄羅斯方塊游戲可以說(shuō)是隨計(jì)算機(jī)的發(fā)展而發(fā)展,并不斷推陳出新,演變出各種類(lèi)似游

7、戲,深受廣大玩家喜愛(ài)。這個(gè)游戲有的簡(jiǎn)單,有的復(fù)雜,但其根本原理是一樣的:都是對(duì)運(yùn)動(dòng)的方塊進(jìn)行組合,來(lái)訓(xùn)練玩家的反應(yīng)能力。談到游戲軟件,大多數(shù)人都認(rèn)為其神妙莫測(cè),高不可及,而一般游戲軟件也確實(shí)具有很高的技術(shù)難度,隨著開(kāi)發(fā)工具及軟件開(kāi)發(fā)方法學(xué)的不斷發(fā)展,動(dòng)手開(kāi)發(fā)游戲也不是十分困難的。俄羅斯方塊的基本規(guī)則是移動(dòng)、旋轉(zhuǎn)和擺放游戲自動(dòng)輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。由于上手簡(jiǎn)單、老少皆宜,從而家喻戶曉,風(fēng)靡世界。1.2游戲的意義與內(nèi)涵游戲這個(gè)名稱(chēng)一直就存在于每個(gè)人的日常生活中,如猜拳游戲、猜謎游戲、大地游戲、球類(lèi)游戲等,林林總總,不勝枚舉,甚至于有些流行歌曲把人生也比喻為游戲,好

8、比“一場(chǎng)游戲一場(chǎng)夢(mèng)” 。因此,游戲?qū)τ诂F(xiàn)代人的成長(zhǎng)歷程,絕對(duì)是一個(gè)不可或缺的重要角色。 “游戲”,最簡(jiǎn)單的定義,就是一種供人們娛樂(lè)休閑的快樂(lè)元素。從更專(zhuān)業(yè)的角度形容, “游戲”是具有特定行為模式、規(guī)則條件、身心娛樂(lè)及輸贏的一種行為表現(xiàn)。這種行為表現(xiàn)具備以下4個(gè)要素。1、行為模式: “游戲”最簡(jiǎn)單的要素就是游戲有特定的流程模式,這種流程模式貫穿于整個(gè)游戲的行為,用戶必須依照它的模式流程來(lái)執(zhí)行。倘若一種游戲沒(méi)有了特定的行為模式,那么就沒(méi)有執(zhí)行的行為;在沒(méi)有執(zhí)行的行為之后,這個(gè)游戲也玩不下去了。舉個(gè)例子來(lái)說(shuō),如果猜拳游戲沒(méi)有了剪刀、石頭、布等行為模式,那么這還能叫做“猜拳游戲” 嗎?所以不管游戲的流

9、程有多么復(fù)雜還是多么簡(jiǎn)單,一定要有特定的行為模式。2、條件規(guī)則:當(dāng)游戲有了一定的行為模式后,接著就必須制定出一系列的條件規(guī)則。簡(jiǎn)單來(lái)說(shuō),這些游戲的條件規(guī)則就是大家必須去遵守的游戲行為守則,只要是大家一致以為的游戲行為,在游戲中,玩家就必須遵守它,如果不遵守這種游戲行為,那么就失去了公平性。如同一種簡(jiǎn)單的球賽,打球的英文解釋可以用play game來(lái)加以說(shuō)明,按照英文字面上的解釋,它就是執(zhí)行游戲的行為,而球賽必須有一定的條件規(guī)則,并且參與者都要必須去遵守它,不能遵守它就叫作“犯規(guī)”。所以不管是什么游戲,它都會(huì)具備一組規(guī)則條件,在游戲進(jìn)行的時(shí)候才會(huì)有足夠的公平性。3、娛樂(lè)身心:一種游戲所帶來(lái)的娛樂(lè)

10、性,關(guān)鍵就在于為玩家所帶來(lái)的刺激感,這也是游戲的精華所在。簡(jiǎn)單來(lái)說(shuō),不管是很多人玩的游戲,還是一個(gè)人玩的單機(jī)游戲,游戲本身就會(huì)存在它的娛樂(lè)和刺激性,使得玩家們想要去玩它。4、輸贏:其實(shí)針對(duì)游戲而言,輸贏是所有游戲的最終目的。一個(gè)沒(méi)有輸贏的游戲,也就沒(méi)有了它存在的意義,如同我們常常接觸到的猜拳游戲,說(shuō)穿了最終目的就是為了分出勝負(fù)而己。一般而言,游戲又可以分為動(dòng)態(tài)和靜態(tài)兩種形態(tài)。動(dòng)態(tài)的游戲必須配合肢體動(dòng)作,如猜拳游戲;而靜態(tài)游戲則是較偏向思考的行為,如同紙上游戲。然而不管是動(dòng)態(tài)或是靜態(tài)游戲,只要具備上述4項(xiàng)組成要素,都可以將它稱(chēng)為“游戲”。1.3課題內(nèi)容為了使畢業(yè)設(shè)計(jì)如期順利的完成,制定了一個(gè)工作

11、安排,從定題到實(shí)現(xiàn),以及系統(tǒng)的調(diào)試與運(yùn)行。如圖1-1所示。概要設(shè)計(jì)詳細(xì)設(shè)計(jì)功能模塊開(kāi)發(fā)功能模塊測(cè)試系統(tǒng)調(diào)試定題調(diào)查研究資料查詢(xún)開(kāi)發(fā)環(huán)境熟悉研究關(guān)鍵技術(shù)系統(tǒng)試運(yùn)行和修改圖 1-1 課題內(nèi)容工作安排1.4論文組織結(jié)構(gòu)論文組織如下:第一章概述。簡(jiǎn)短的描述了本設(shè)計(jì)研究的背景及意義,并闡述了本設(shè)計(jì)所研究的內(nèi)容。第二章相關(guān)知識(shí)。本章對(duì)此次畢業(yè)設(shè)計(jì)中所用到的知識(shí)進(jìn)行了簡(jiǎn)介。從以下幾個(gè)方面:畢業(yè)設(shè)計(jì)中所使用的工具的簡(jiǎn)介。介紹了開(kāi)發(fā)語(yǔ)言c+,并著重介紹了wxwidgets開(kāi)發(fā)庫(kù)第三章系統(tǒng)分析。描述了對(duì)系統(tǒng)的分析,如需求分析,業(yè)務(wù)流程分析,數(shù)據(jù)流程分析等,通過(guò)用例圖形象描述。第四章系統(tǒng)設(shè)計(jì)。通過(guò)四個(gè)方面講述了設(shè)計(jì)

12、的過(guò)程:結(jié)構(gòu)設(shè)計(jì)、界面設(shè)計(jì)、功能設(shè)計(jì)以及數(shù)據(jù)庫(kù)的設(shè)計(jì),同時(shí)也描述了前后臺(tái)各頁(yè)面之間的關(guān)系。第五章系統(tǒng)實(shí)現(xiàn)。本章講述了系統(tǒng)的實(shí)現(xiàn),說(shuō)明系統(tǒng)實(shí)現(xiàn)所必須的環(huán)境,如何布署,并以截圖的方式將系統(tǒng)運(yùn)行展示出來(lái)。第六章總結(jié)與展望。在本章總結(jié)了此次畢業(yè)設(shè)計(jì)的成果,并對(duì)該課題作進(jìn)一步展望。第二章 相關(guān)知識(shí)2.1基本工具microsoft visual studio .net 2003 visual studio 是微軟公司推出的開(kāi)發(fā)環(huán)境,visual studio 可以用來(lái)創(chuàng)建 windows 平臺(tái)下的 windows 應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序,也可以用來(lái)創(chuàng)建網(wǎng)絡(luò)服務(wù)、智能設(shè)備應(yīng)用程序和 office 插件。2.

13、2開(kāi)發(fā)語(yǔ)言c+、wxwidgets開(kāi)發(fā)庫(kù)(wxwidgets 2.8.8)2.2.1 c+1、簡(jiǎn)介c+是一種靜態(tài)數(shù)據(jù)類(lèi)型檢查的,支持多重編程范式的通用程序設(shè)計(jì)語(yǔ)言。它支持過(guò)程化程序設(shè)計(jì)、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計(jì)、制作圖標(biāo)等等泛型程序設(shè)計(jì)等多種程序設(shè)計(jì)風(fēng)格。c+的設(shè)計(jì)原則:c+設(shè)計(jì)成靜態(tài)類(lèi)型、和c同樣高效且可移植的多用途程序設(shè)計(jì)語(yǔ)言。設(shè)計(jì)成直接的和廣泛的支援多種程序設(shè)計(jì)風(fēng)格(程序化程序設(shè)計(jì)、資料抽象化、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì))。2、語(yǔ)言發(fā)展c+語(yǔ)言發(fā)展大概可以分為三個(gè)階段:第一階段從80年代到1995年。這一階段c+語(yǔ)言基本上是傳統(tǒng)類(lèi)型上的面向?qū)ο笳Z(yǔ)言,并且憑借著接近c(diǎn)語(yǔ)言的效率,在工

14、業(yè)界使用的開(kāi)發(fā)語(yǔ)言中占據(jù)了相當(dāng)大份額;第二階段從1995年到2000年,這一階段由于標(biāo)準(zhǔn)模板庫(kù)(stl)和后來(lái)的boost等程序庫(kù)的出現(xiàn),泛型程序設(shè)計(jì)在c+中占據(jù)了越來(lái)越多的比重性。當(dāng)然,同時(shí)由于java、c#等語(yǔ)言的出現(xiàn)和硬件價(jià)格的大規(guī)模下降,c+受到了一定的沖擊;第三階段從2000年至今,由于以loki、mpl等程序庫(kù)為代表的產(chǎn)生式編程和模板元編程的出現(xiàn),c+出現(xiàn)了發(fā)展歷史上又一個(gè)新的高峰,這些新技術(shù)的出現(xiàn)以及和原有技術(shù)的融合,使c+已經(jīng)成為當(dāng)今主流程序設(shè)計(jì)語(yǔ)言中最復(fù)雜的一員。12.2.2 wxwidgets1、簡(jiǎn)介wxwidgets是一個(gè)開(kāi)源的跨平臺(tái)的c+構(gòu)架庫(kù)(framework),它

15、可以提供gui(圖形用戶界面)和其它工具。目前的2.x版本支持所有版本的windows、帶gtk+或motif的unix和macos。一個(gè)支持os/2的版本正在開(kāi)發(fā)中。wxwidgets的主體是由c+構(gòu)建的,但你并不是必需通過(guò)c+才能使用wxwidgets.wxwidgets擁有許多其它語(yǔ)言的綁定(binding),使你在用其它語(yǔ)言編寫(xiě)程序的時(shí)候也可以使用wxwidgets。22、優(yōu)勢(shì)1)(不得不放在第一位的)就是他無(wú)論對(duì)于個(gè)人還是對(duì)于商業(yè)應(yīng)用都是免費(fèi)的!它的主體框架的授權(quán)協(xié)議支持商業(yè)免費(fèi)應(yīng)用,其外圍功能庫(kù)中很多也是lgpl授權(quán)的,這無(wú)疑對(duì)于我等“0資本”的人來(lái)說(shuō)是天大的好事。不同于gt之類(lèi)的

16、跨平臺(tái)gui庫(kù)。2)他是跨平臺(tái)的gui庫(kù),支持的操作系統(tǒng)很全面,甚至支持pda(說(shuō)不定過(guò)一段時(shí)間他都能夠支持symbian了)。 此跨平臺(tái)非彼跨平臺(tái),它雖然不像java那樣是“全面”的,而僅僅是gui庫(kù),但是gui是計(jì)算機(jī)編程中,最為麻煩、耗費(fèi)時(shí)間、容易出現(xiàn)bug的部分,特別當(dāng)你想要自己的軟件運(yùn)行在多個(gè)操作系統(tǒng)上的時(shí)候,開(kāi)發(fā)和維護(hù)的難度讓人難以想象。其實(shí)c+也是支持“跨平臺(tái)”的,因?yàn)閏+可以在任何平臺(tái)上編譯運(yùn)行,之所以沒(méi)幾個(gè)人說(shuō)他是跨平臺(tái)的,主要問(wèn)題就出在變量長(zhǎng)度和各操作系統(tǒng)的gui(這里的“界面”我指得是很廣義的)上,如果解決了gui的問(wèn)題,基本上就解決了c+的“跨平臺(tái)”問(wèn)題至少不用為每種平

17、臺(tái)都維護(hù)一份源代碼了。3)wxwidgets提供的gui是大量使用宏的,這就意味著它是在盡可能的使用目標(biāo)系統(tǒng)native的gui樣式。你可以訪問(wèn)wxwidgets網(wǎng)站,看看那些開(kāi)發(fā)的軟件的截圖,全是系統(tǒng)native級(jí)別的。如果你開(kāi)發(fā)了一個(gè)xp系統(tǒng)的軟件的話,你的軟件會(huì)仍然以“xp專(zhuān)有的小賤人級(jí)別”的面貌展現(xiàn)在你面前。4)它支持的編譯器也很多,而且borland也曾聲明將在c+builderx2里邊提供對(duì)wxidgets的支持預(yù)覽版都出來(lái)了。其實(shí)我就是看到borland在c+不景氣的時(shí)候,這么看重這個(gè)東東,甚至用它來(lái)做“王牌”,才開(kāi)始注意到他的。當(dāng)然,反過(guò)來(lái),也正是borland的支持,才使他活

18、力大發(fā)的。5)自然,有牛x支持,而且是開(kāi)源的,wxwidgets一直都在快速穩(wěn)健的開(kāi)發(fā)中,其周邊工具也越來(lái)越多。 隨著m$開(kāi)始全力支持他的.net,c+成了“沒(méi)落”的語(yǔ)言,但是不可否認(rèn),c+還是有很多用武之地的,所以根本不可能真正沒(méi)落。沒(méi)有了超牛x的支持,地球人自然開(kāi)始尋求新的發(fā)展方式,wxwidgets這種開(kāi)源免費(fèi),且允許商業(yè)應(yīng)用的好東東,自然會(huì)被人們所重視。3第三章 系統(tǒng)分析俄羅斯方塊這個(gè)游戲,做為一個(gè)玩家,游戲至少要有速度控制模塊,才可以吸引玩家來(lái)玩。本游戲在總設(shè)計(jì)上,加入了游戲的速度模塊、積分模塊等可供玩家操作的模式。對(duì)游戲界面的設(shè)計(jì),采用比較簡(jiǎn)單的設(shè)計(jì)思想。3.1 需求分析俄羅斯方塊

19、是一個(gè)比較簡(jiǎn)單的游戲。它游戲過(guò)程僅需要玩家將不斷下落的各種形狀的方塊移動(dòng)、翻轉(zhuǎn),如果某一行被方塊充滿了,那就將些行消掉;而當(dāng)窗口中無(wú)法再容納下落的方塊時(shí),就宣告游戲的結(jié)束。根據(jù)本人的了解,俄羅斯方塊游戲的需求分析是做為一個(gè)玩家來(lái)講,需要此游戲所據(jù)有的功能。隨機(jī)給出不同的形狀(長(zhǎng)條形、z字形、反z形、田字形、7字形、反7形、t字型)下落填充給定的區(qū)域,若填滿一條便消掉,記分,當(dāng)達(dá)到一定的分?jǐn)?shù)時(shí),過(guò)關(guān),設(shè)置三關(guān),每關(guān)方塊下落的速度不同,若在游戲中各形狀填滿了給定區(qū)域,為輸者。游戲功能要求如下:游戲界面需求:良好的用戶界面,有關(guān)數(shù)顯示和分?jǐn)?shù)顯示。讓方塊在一定的區(qū)域內(nèi)運(yùn)動(dòng)和變形,該區(qū)域用一種顏色表明,

20、既用一種顏色作為背景,最好設(shè)為黑色。還需用另一種顏色把黑色圍起來(lái),寬度適中,要實(shí)現(xiàn)美感。游戲形狀(方塊)需求:良好的方塊形狀設(shè)計(jì),繪制七種常見(jiàn)的基本圖形(長(zhǎng)條形、z字形、反z形、田字形、7字形、反7形、t字型),各個(gè)方塊要能實(shí)現(xiàn)它的變形,可設(shè)為順時(shí)針或逆時(shí)針變形,一般為逆時(shí)針。鍵盤(pán)處理事件:方塊下落時(shí),可通過(guò)鍵盤(pán)方向鍵(上、下、左、右鍵)對(duì)該方塊進(jìn)行向上(變形),向下(加速)、向左、向右移動(dòng)。顯示需求:當(dāng)不同的方塊填滿一行時(shí)可以消行,剩余方塊向下移動(dòng)并統(tǒng)計(jì)分?jǐn)?shù)。當(dāng)達(dá)到一定的分?jǐn)?shù)時(shí)過(guò)關(guān)。設(shè)置三關(guān),每關(guān)方塊下落的速度不同。接口控制:本軟件需求通過(guò)鍵盤(pán)進(jìn)行操作,在windows的操作系統(tǒng)下,利用鍵盤(pán)

21、的上、下、左、右鍵對(duì)方塊進(jìn)行移動(dòng)變形,要使用鍵盤(pán)的接口事件。開(kāi)發(fā)俄羅斯方塊程序中,根據(jù)本人的認(rèn)識(shí)和玩家的需求分析,要解決的技術(shù)難題如下:下落時(shí),如果確定方塊是否可以下落,即是否已經(jīng)落到“地”。當(dāng)玩家移動(dòng)方塊時(shí),如何判斷時(shí)方塊是否可以移動(dòng),即是否由于左右邊界和其他方塊阻擋不能移動(dòng)。當(dāng)玩家翻轉(zhuǎn)方塊時(shí),如果翻轉(zhuǎn)方塊同時(shí)要判斷是否可以翻轉(zhuǎn)。尤其是當(dāng)條狀方塊在接近邊界和其他方塊時(shí)。如何判斷一行已經(jīng)填滿并消掉,上面的一行下落一層。3.2 分析建模3.2.1游戲設(shè)計(jì)分析1、分析對(duì)象從面向?qū)ο蟮挠^念出發(fā),本程序可分為以下幾個(gè)對(duì)象:方塊類(lèi)型數(shù)據(jù)程序運(yùn)算邏輯繪圖顯示平臺(tái)分析對(duì)象的技巧在于它的重復(fù)利用及維護(hù)效率。試

22、想,若要把設(shè)計(jì)出來(lái)的程序在不同的顯示平臺(tái)上執(zhí)行,就要作大幅度的更動(dòng)甚至重寫(xiě),這樣就失去了面向?qū)ο髮傩?,所以在本程序分析時(shí)將不變與易變的因素分別做成對(duì)象,如方塊類(lèi)型數(shù)據(jù)及程序運(yùn)算邏輯就是不變的項(xiàng)目,而繪圖及顯示平臺(tái)會(huì)因?yàn)榄h(huán)境而有所不同屬于易變的項(xiàng)目。42、方塊類(lèi)型數(shù)據(jù)方塊類(lèi)型雖然運(yùn)送不同,但狀態(tài)與行為都是相同的,如下表3-1所示。表3-1方塊的狀態(tài)與行為對(duì) 象 要 素說(shuō) 明狀態(tài)記錄方塊形狀的變量行為方塊根據(jù)x=y;y=2-x進(jìn)行旋轉(zhuǎn)3.2.2 功能分析圖3-1為本游戲的功能分解圖,從玩家的角度分析游戲應(yīng)該有的功能。圖3-1 功能分解圖3.2.3 注意事項(xiàng)游戲在設(shè)計(jì)時(shí)除了將程序切割成多個(gè)對(duì)象外,在

23、游戲的邏輯運(yùn)算上應(yīng)盡可能做到彈性化。所謂彈性就是方塊地圖的長(zhǎng)與寬應(yīng)該可以用參數(shù)來(lái)改變。3.2.4 游戲流程圖3-2為俄羅斯方塊游戲的頂層圖。游戲通過(guò)鍵盤(pán)控制,循環(huán)運(yùn)行。按s鍵關(guān)開(kāi)1.游戲開(kāi)始控制游戲開(kāi)關(guān)2.鍵盤(pán)控制臺(tái)循環(huán)運(yùn)行程 序 運(yùn) 行圖3-2 頂層圖俄羅斯方塊的詳細(xì)流程圖(圖3-3)。否是否是否是游戲開(kāi)始接受按鈕的控制信息1. 檢查滿行2. 刪除滿行3. 重新裝載方塊產(chǎn)生控制方塊下降的執(zhí)行信息移動(dòng)方塊顯示方塊于屏幕中,檢查方塊在屏幕上是否有阻礙發(fā)生方塊移動(dòng)時(shí)是否有阻礙方塊是否無(wú)法下移游戲結(jié)束圖3-3 系統(tǒng)流程圖(詳細(xì))下圖為鍵盤(pán)的按鍵觸發(fā)時(shí)的判斷流程。無(wú)效有效按鍵保持不動(dòng)可動(dòng)2.1檢查按鍵

24、2.2檢查可移動(dòng)性圖3-4 鍵盤(pán)觸發(fā)判斷第四章 系統(tǒng)設(shè)計(jì)4.1游戲程序的構(gòu)架設(shè)計(jì)源文件名: game主窗口:main()方法裝載所有的內(nèi)容。游戲框架:gameframe;游戲面板:gamepanel按鈕:“開(kāi)始”:重新開(kāi)始游戲;“暫?!保簳和S螒颍弧巴V埂保和V拐谶M(jìn)行的游戲;“升高等級(jí)”, “繼續(xù)”:繼續(xù)當(dāng)前的游戲;“加速”使游戲速度減小“減速”,使游戲速度減小。布局:gridlayout(邊界布局)。4.2 類(lèi)圖分析1、類(lèi)圖圖4-1 系統(tǒng)類(lèi)圖2、類(lèi)圖說(shuō)明表4-1 tetrismain類(lèi)類(lèi)名稱(chēng)tetrismain類(lèi)描述俄羅斯方塊主程序類(lèi)。包描述main函數(shù)描述public static vo

25、id main(string args)俄羅斯方塊主程序類(lèi)。表4-2 blockpane類(lèi)類(lèi)名稱(chēng)blockpane類(lèi)描述顯示下兩個(gè)塊類(lèi)。包描述frm函數(shù)描述public blockpane()顯示下2個(gè)方塊的缺省構(gòu)造函數(shù)。public void paint(graphics g)完成下2個(gè)方塊的繪制。表 4-3 gamepane類(lèi)類(lèi)名稱(chēng)gamepane類(lèi)描述游戲面板類(lèi)。練習(xí)使用swing組件、actionlistener、內(nèi)部類(lèi)的使用。包描述frm函數(shù)描述public gamepane()缺省構(gòu)造一個(gè)寬10,高20,每個(gè)格子高度為20的俄羅斯方塊面板。public gamepane(int g

26、ridw,int gridh,int pixelwidth)按照指定的寬度、高度、格子高度構(gòu)造俄羅斯方塊面板。private void registerkey(abstractaction a1,abstractaction a2,abstractaction a3,abstractaction a4,abstractaction a5)注冊(cè)上、下、左、右方向鍵及快速下降的方法。public void removekey()移除注冊(cè)的上、下、左、右方向鍵事件。public void addkey()添加注冊(cè)的上、下、左、右方向鍵事件。public void gamestart()游戲開(kāi)始。pu

27、blic void gamestop()游戲結(jié)束。public void gamepause()暫停游戲。public void gamecontinue()繼續(xù)游戲。private void cleargrids()清空方框。public void paint(graphics g)完成方塊的繪制。public void actionperformed(actionevent e)方塊的下降事件。private void movefailed()當(dāng)方塊到底無(wú)法移動(dòng)時(shí)的處理。private void shownextblock()刷新顯示下2個(gè)圖形。private void changegri

28、ds()無(wú)法移動(dòng)時(shí),把方塊的非0的格子賦給方框。此處的邏輯比較復(fù)雜,考慮清楚再寫(xiě)!思路:循環(huán)將4*4的方塊對(duì)應(yīng)非0的格子顏色賦給方框?qū)?yīng)的格子。難度:方塊和方框如何對(duì)應(yīng)。private string hasfullrow()檢測(cè)新增加方塊后,是否有滿行。private void movedownrows(string str)消除滿行的方塊。private void changescore(int rownum)修改成績(jī)。內(nèi)部類(lèi)private class moveleftlistener extends abstractaction左移事件。內(nèi)部類(lèi)private class moveright

29、listener extends abstractaction右移事件。內(nèi)部類(lèi)private class movedownlistener extends abstractaction下移事件。內(nèi)部類(lèi)private class onemovedownlistener extends abstractaction快速下降事件。內(nèi)部類(lèi)private class changelistener extends abstractaction方塊變換事件。表 4-4 infopane類(lèi)類(lèi)名稱(chēng)infopane類(lèi)描述成績(jī)和下2個(gè)方塊顯示區(qū)。包描述frm函數(shù)描述public infopane()成績(jī)顯示面板構(gòu)造

30、函數(shù)。public void setlevel(int level)設(shè)置當(dāng)前級(jí)數(shù)。public void setlines(int lines)設(shè)置已消行數(shù)。public int setscore(int score)設(shè)置成績(jī)。public blockpane getbpane()獲取該面板。public void clearscore()清空成績(jī)。public int getlevel()獲取當(dāng)前級(jí)數(shù)。類(lèi)名稱(chēng)tetrisframe類(lèi)描述俄羅斯方塊主窗體。包描述frm函數(shù)描述public tetrisframe()俄羅斯方塊裝窗體構(gòu)造函數(shù)。public void actionperformed

31、(actionevent e)按鈕事件。表 4-5 block類(lèi)類(lèi)名稱(chēng)block類(lèi)描述方塊類(lèi)。理解面向?qū)ο蟮乃枷?。包描述data函數(shù)描述public block(int type,int dir,color color,int gridx,int gridy,int pixelwidth)按照指定的類(lèi)型、方向、顏色、坐標(biāo)、格子寬度構(gòu)造一個(gè)方塊。public boolean collide(color grids)返回檢測(cè)方塊和格子的碰撞后的結(jié)果。碰撞有2個(gè)思路:1.分別檢測(cè)左側(cè)、右側(cè)、下部的碰撞,底下注釋的部分已實(shí)現(xiàn)。2.直接檢測(cè)和方塊交集的格子。public boolean moveleft

32、(color grids)方塊的左移。public boolean moveright(color grids)方塊的右移。public boolean movedown(color grids)方塊的下移。public boolean changedir(int dir,color grids)變換方塊。public void panit(graphics2d g)方塊的繪制。public void panitsmall(graphics2d g,int n,int x,int y)小方塊的繪制。getter/setter方法表 4-6 blockcreater類(lèi)類(lèi)名稱(chēng)blockcreate

33、r類(lèi)描述塊產(chǎn)生器。練習(xí)使用單子模式、工廠模式。包描述data函數(shù)描述private blockcreater()塊產(chǎn)生器私有構(gòu)造方法。public static blockcreater getblockcreater()塊產(chǎn)生器,的靜態(tài)方法,也是塊產(chǎn)生工廠。private void addblock()向隊(duì)列中添加塊。public block getnextblock()得到隊(duì)列中的下一個(gè)塊。public block getfirstblock()得到隊(duì)列中的第一個(gè)塊。public block getlastblock()得到隊(duì)列中的最后一個(gè)塊。表 4-7 publicdata類(lèi)類(lèi)名稱(chēng)pub

34、licdata類(lèi)描述成績(jī)、級(jí)數(shù)的判斷級(jí)別包描述data函數(shù)描述public publicdata()設(shè)置升級(jí)、成績(jī)、級(jí)數(shù)的判斷的構(gòu)造函數(shù)。4.3游戲程序的模塊設(shè)計(jì)4.3.1 模塊設(shè)計(jì)gameapp:應(yīng)用程序類(lèi),相當(dāng)與winmain或main,為程序的入口控制類(lèi),負(fù)責(zé)創(chuàng)建應(yīng)用程序?qū)嵗痛翱诰€程。gamefrm:窗口類(lèi),為gui,負(fù)責(zé)將用戶的操作請(qǐng)求提交給游戲引擎(gamecore),同時(shí)將gamecore處理后的數(shù)據(jù)反饋出來(lái)主要是獲取gamecore產(chǎn)生的當(dāng)前游戲狀況圖和同時(shí)信息圖,并將它們貼在窗口上。setwindowshape方法設(shè)置窗口為不規(guī)則現(xiàn)狀;onleftdclick方法處理鼠標(biāo)右鍵

35、雙擊事件;onmousemove方法處理鼠標(biāo)移動(dòng)事件;onleftdown方法處理鼠標(biāo)左鍵按下事件;onleftup方法處理鼠標(biāo)左鍵彈起事件;onpaint方法處理窗口繪圖事件ontimer1timer、ontimer2timer方法為游戲提供時(shí)鐘支持;onkeydown方法處理鍵盤(pán)按鍵事件;gamecell:游戲引擎類(lèi),“俄羅斯方塊”的核心,正是它才體現(xiàn)了“俄羅斯方塊”的特別性。initwall方法初始化游戲的參數(shù)newbrick方法負(fù)責(zé)生成新磚塊updatewall方法負(fù)責(zé)更新游戲顯示數(shù)據(jù)cleanupbrick方法負(fù)責(zé)進(jìn)行磚塊消減可行性判斷和消減磚塊shapebrick方法負(fù)責(zé)進(jìn)行磚塊變

36、形可行性判斷和變形movetoleft方法負(fù)責(zé)進(jìn)行磚塊左移可行性判斷和向左運(yùn)動(dòng)movetoright方法負(fù)責(zé)進(jìn)行磚塊右移可行性判斷和向右運(yùn)動(dòng)movetodown方法負(fù)責(zé)進(jìn)行磚塊下移可行性判斷和向下運(yùn)動(dòng)bool gameovertest方法負(fù)責(zé)檢測(cè)游戲是否終止int getcurrentscore方法獲取當(dāng)前成績(jī)playmusic(int music_type)方法播放聲音wxbitmap getmsgbitmap()方法獲取提示信息的圖像wxbitmap getcurrentwall()方法獲取當(dāng)前墻的圖像。4.3.2 模塊解析1)initwall()方法(圖4-2)圖4-調(diào)用initwall

37、()開(kāi)啟游戲,initwall()是變量初始化,也是游戲的入口判斷是 否按下空格或雙擊顯示開(kāi)啟游戲的方法tip2 initwall()方法initwall()方法是游戲初始化,用雙重循環(huán)把定義游戲地圖的二維數(shù)組showwallyx和truewallyx賦為0,即清空游戲地圖中的所有方塊。也把每行方塊數(shù)初始化,分?jǐn)?shù)初始化,打開(kāi)游戲地圖清屏開(kāi)關(guān),再調(diào)用裝載游戲方塊game_start。2)方塊的裝載(newbrick ()(圖4-3)是否7654321隨機(jī)抽取一個(gè)數(shù)隨機(jī)數(shù)一字形z字形反z形7字形反7形倒t形田字型游戲是否結(jié)束保存當(dāng)前方塊坐標(biāo)顯示方塊于屏幕上游戲結(jié)束調(diào)用destroy()關(guān)數(shù)初始化返

38、回開(kāi)始界面圖4-3方塊的裝載(newbrick ()方塊裝載(newbrick ()方法)定義一個(gè)隨機(jī)變量,然后調(diào)用隨機(jī)函數(shù)(rand=(int)(math.random()*7)+1),所取得的隨機(jī)數(shù)在1到7之間,用這7個(gè)數(shù)字表示7中常見(jiàn)的方塊,并從7種方塊中隨機(jī)抽取圖形。每一種方塊都是由兩個(gè)一維數(shù)組(x,y)表示的,其中一個(gè)用來(lái)保存方塊所在行,另一個(gè)數(shù)組用來(lái)保存方塊所在列,這樣有利于方塊在屏幕上準(zhǔn)確而有活動(dòng)的定位。所有7種圖形都是在三行三列的地圖中研究后給出的坐標(biāo),給出的坐標(biāo)也是方塊在游戲地圖中靠最頂行的坐標(biāo)。這就好象方塊存在于一個(gè)三行三列大小的圖形中而夠成的一張圖片。圖片的運(yùn)動(dòng)也就是方塊

39、的運(yùn)動(dòng),這樣,要實(shí)現(xiàn)方塊的變形,就要在三行三列的圖形中定義一個(gè)最左上角的基點(diǎn),方塊運(yùn)動(dòng),基點(diǎn)也跟著運(yùn)動(dòng)?;c(diǎn)坐標(biāo)在加載方塊是加載,基點(diǎn)的存儲(chǔ)空間在加載每個(gè)方塊數(shù)組的最后定義。這樣使得方塊在游戲地圖中的每一個(gè)地方都可以變形。也不會(huì)因?yàn)樽冃味綁K在游戲地圖中的變動(dòng)很厲害,出現(xiàn)瞬移的現(xiàn)象。圖形坐標(biāo)裝載完后,先判斷在方塊的下一行是否已有方塊,如果有則說(shuō)明方塊以到達(dá)游戲地圖的頂端,游戲?qū)⒔Y(jié)束。沒(méi)有則先把方塊坐標(biāo)保存,這是為了在方塊向下移動(dòng)的時(shí)候在它的后面不會(huì)有虛假的方塊,因?yàn)榉綁K向下運(yùn)動(dòng),記錄的是新一行的方塊坐標(biāo),但舊一行的沒(méi)有消掉,所以要先舊方塊的坐標(biāo)保存起來(lái),搽掉舊方塊再顯示方塊。這樣也會(huì)減少屏幕的

40、閃爍問(wèn)題。3)處理鍵盤(pán)事件(onkeydown())(圖4-4)上左右下是否判斷是否按空格鍵且游戲游戲還沒(méi)開(kāi)始按鍵等待開(kāi)啟游戲開(kāi)關(guān)判斷按鍵圖形變化調(diào)用change()方法1. 判斷可移動(dòng)性2. 可以則移動(dòng)1.判斷可移動(dòng)性2.可以則移動(dòng)1.判斷是否能再向下移2.可以則向下移調(diào)用onpaint()將發(fā)生變化后的方塊顯示在屏幕上用save()保存原有坐標(biāo) 圖4-4 鍵盤(pán)事件功能圖(onkeydown ())onkeydown ()是處理按鍵的事件,剛開(kāi)始運(yùn)行程序時(shí),游戲還沒(méi)有開(kāi)始,這時(shí)除空格鍵(解鍵盤(pán)鎖的鍵)是有用外,其他的鍵都給鎖住,這樣可以避免鍵盤(pán)過(guò)早的控制游戲。在判斷是否在s鍵的語(yǔ)句中還加了對(duì)

41、游戲鎖取反并判斷是否為真的語(yǔ)句,兩個(gè)語(yǔ)句同時(shí)成立時(shí),才會(huì)解開(kāi)游戲鎖,程序開(kāi)始時(shí),游戲還沒(méi)有開(kāi)始,游戲鎖是關(guān)的,但是取反后它就是真的,所以只要按下空格鍵后,兩個(gè)語(yǔ)句都成立。這樣做是為了在游戲開(kāi)始時(shí)再按下s鍵,游戲不會(huì)重新開(kāi)始,即游戲開(kāi)始后,s鍵就沒(méi)有用了。按下空格鍵后,游戲鎖才被解開(kāi),鍵盤(pán)也被解開(kāi)。每當(dāng)有按鍵,也就是方塊要產(chǎn)生變化時(shí),先保存方塊的坐標(biāo),便于清理舊方塊,顯示新方塊。當(dāng)方塊要進(jìn)行上(變形)、下、左、右變化時(shí),先對(duì)方塊將要移動(dòng)到的位置進(jìn)行判斷,判斷是否有障礙,有則保持原來(lái)的位置不變,沒(méi)有則根據(jù)所按的鍵執(zhí)行相關(guān)的操作。再把方塊的位置顯示在屏幕上。方塊的移動(dòng)其實(shí)也只是對(duì)行或列坐標(biāo)的增減而己

42、。4) 方塊變化(shapebrick ())不可變可變采用x=y;y=2-x的逆時(shí)針旋轉(zhuǎn)規(guī)則產(chǎn)生新坐標(biāo)新點(diǎn)坐標(biāo)賦給控制方塊變量方塊變化(按向上鍵)檢查可變性不發(fā)生任何改變圖4-5方塊變化(shapebrick ())當(dāng)按下向上鍵時(shí),將會(huì)執(zhí)行方塊變化事件(shapebrick ())。常見(jiàn)的方塊有7種(長(zhǎng)條形、z字形、反z形、田字形、7字形、反7形、t字型),所有圖形都是用兩個(gè)一維數(shù)組來(lái)統(tǒng)計(jì)它的橫坐標(biāo)和縱坐標(biāo),每個(gè)方塊有4種不同的變化形狀,所以我對(duì)7種圖形都做要詳細(xì)的研究和分析,得到了一個(gè)方塊逆時(shí)針旋轉(zhuǎn)結(jié)論:x1=y;y1=2-x;其中x,y代表方塊變化前的坐標(biāo),x1,y1代表方塊變化后的坐標(biāo)

43、,這樣使方塊成功的變化。這里的變量和游戲中的無(wú)關(guān),只用于此處說(shuō)明。但田字形的方塊用上面的變化規(guī)則時(shí),方塊晃動(dòng)的厲害,所以上面的規(guī)則只能作用與其他6種圖形。因?yàn)樘镒中伪旧淼淖兓彩窃瓉?lái)的圖形,有變化和沒(méi)變化一樣,可以對(duì)它不作改變,即按下向上鍵時(shí),不對(duì)田字型的做改變。這樣就可以解決田字形變化的問(wèn)題。還有兩個(gè)z字形和一字形變化不是很規(guī)范,但沒(méi)有太大的問(wèn)題,所以為了避免麻煩我就沒(méi)有處理這些問(wèn)題。當(dāng)圖形要改變時(shí),它將先判斷變化后的位置是否沒(méi)有任何小方塊,或是否已到達(dá)游戲地圖的邊緣,如果有小方塊或到達(dá)邊緣,則不執(zhí)行方塊變化,這也是一種障礙物的判斷;如果沒(méi)有的才處理方塊變化。至于處理障礙物的方式與處理方塊向

44、左運(yùn)動(dòng)的方式差不多,所以在這不做詳細(xì)的解說(shuō)。5)控制游戲速度與自動(dòng)下降(movetodown())(圖4-6)否是是否游戲是否開(kāi)始游戲暫停判斷方塊是否到達(dá)底行或下面己有方塊調(diào)用到達(dá)事件方塊向下移動(dòng)一行調(diào)用顯示控制onpaint()圖4-6 控制游戲速度與自動(dòng)下降(movetodown())6) 判斷滿行及消行(圖4-7)是否是否否是是否判斷當(dāng)前行是否為空判斷當(dāng)前行是否為滿判斷是否有滿行判斷移動(dòng)行方塊是否為空當(dāng)前行向上推動(dòng)一行將要移動(dòng)行所有數(shù)據(jù)移至當(dāng)前行將當(dāng)前行的所有數(shù)據(jù)初始化統(tǒng)計(jì)連續(xù)幾行為滿如果有消行,則開(kāi)啟消行鎖。接上圖2點(diǎn)堆積方塊,統(tǒng)計(jì)每行方塊數(shù)目圖4-7判斷滿行及消行圖滿行判斷及消行是到

45、達(dá)事件中的一部分,是方塊堆積,并對(duì)每個(gè)小方塊所在行個(gè)數(shù)統(tǒng)計(jì)后,利用循環(huán)語(yǔ)句從屏幕最底行依次向上對(duì)有方塊的每一行進(jìn)行判斷,判斷是不是空行,如果那一行是空行則證明它以上的所有行都將不會(huì)有方塊,也就不必要向上查找了。不是則判斷當(dāng)前行是否滿行的,如果滿行則看有個(gè)連續(xù)幾個(gè)滿行的在一起。然后再判斷是否有行滿的情況,否的話就繼續(xù)檢查上一行。不然就進(jìn)行消行處理及方塊下移。最后再向上查找滿行情況直到本行為空時(shí)為止。消行及方塊下移:當(dāng)有行滿時(shí),則說(shuō)明需要消行,有消行那么所有方塊則要下移。當(dāng)本行滿時(shí),則以間隔為1向上查找,當(dāng)遇到所查找的行也是滿行,那么它的間隔自增1,然后繼續(xù)向上查找,直到那一行不是滿行的情況,則將

46、此行所有數(shù)據(jù)信息移到本行,以后本行以上的每行都會(huì)以這個(gè)間隔去判斷它將獲得的那行數(shù)據(jù),可以則繼承,不然和上述一樣操作。如果將獲得的那行數(shù)據(jù)為空行,則只須對(duì)本行的數(shù)據(jù)清空即可,那么方塊下移也就完成。4.3界面設(shè)計(jì)1、游戲界面(圖4-8)圖4-8游戲界面上部分顯示游戲說(shuō)明和下一個(gè)出現(xiàn)的方塊的形狀,下半部分為游戲部分。圖4-9游戲界面(上)圖4-10游戲界面(下)2、方塊圖片以下是“俄羅斯方塊”不同磚塊所對(duì)應(yīng)的矩陣以及其變形對(duì)應(yīng)的矩陣:(以t型為例),見(jiàn)圖4-11 t型方塊變化矩陣。圖4-11 t型方塊變化矩陣4.4游戲規(guī)則和基本操作本俄羅斯方塊游戲?yàn)閱螜C(jī)游戲。游戲中移動(dòng)和旋轉(zhuǎn)自己窗口內(nèi)落下的方塊,使

47、方塊堆放在合適的位置,方塊在一行堆滿后就可以消掉,消掉一行就可以給玩家加上相應(yīng)的分?jǐn)?shù),當(dāng)分?jǐn)?shù)達(dá)到一定數(shù)目難度就會(huì)相應(yīng)的升級(jí),方塊堆積至窗口頂端,即游戲失敗?;静僮鳎存I盤(pán)操作)為:方向鍵 :左移一格; 方向鍵 :右移一格; 方向鍵: 旋轉(zhuǎn)方塊,使方塊按玩家意愿變換適當(dāng)?shù)男螤睿?方向鍵 :方塊丟下(方塊下落到底),可使方塊加速下落。 第五章 系統(tǒng)實(shí)現(xiàn)5.1開(kāi)發(fā)環(huán)境操作系統(tǒng):microsoft windows server 2003 enterprise edition (sp2)開(kāi)發(fā)平臺(tái):microsoft visual studio .net 2003wxwindows library(wx

48、widgets 2.8.8)wxwidgets部署:(圖5-1、圖5-2)(1)需要有編譯好的wxwidgets開(kāi)發(fā)庫(kù);(2)給自己的編譯器配置wxwidgts開(kāi)發(fā)環(huán)境:我的wxwidgets的路徑為d:wxmsw,在vs2003中選擇“工具”-“選項(xiàng)”-“項(xiàng)目”-“vc+目錄”圖5-1 wxwidgets部署圖圖5-2 wxwidgets部署(3)設(shè)置項(xiàng)目:在wxwidgets目錄下的samples中隨便選擇一個(gè)項(xiàng)目,刪去原源文件,并添加本項(xiàng)目的源文件。(4) 項(xiàng)目所需資源文件:圖5-3 軟件資源文件5.2系統(tǒng)流程圖開(kāi)始初始化程序?qū)嵗?,啟?dòng)主線程啟動(dòng)gui線程(gamefrm)游戲引擎(ga

49、mecell)gui模塊結(jié)束圖5-4 系統(tǒng)流程圖5.3算法設(shè)計(jì)5.3.1方塊的存儲(chǔ)算法設(shè)計(jì)以t型方塊為例,所有的游戲方塊均放在一個(gè)44的數(shù)組中,分別用1表示顯示,0表示不顯示。 用3維數(shù)組來(lái)存放七種基本方塊圖形:t型數(shù)組: 第一種變換:1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,第二種變換:1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ,第三種變換:0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,第四種變換:0, 1, 0, 0, 1, 1, 0,

50、 0, 0, 1, 0, 0, 0, 0, 0, 0 ;為了方便讀取,減少程序中算法上的開(kāi)銷(xiāo)(比如進(jìn)行4*4矩陣的轉(zhuǎn)置),將19種變換圖形用3維數(shù)組來(lái)存放。5.3.2方塊變形的實(shí)現(xiàn)int brick_type;存儲(chǔ)了當(dāng)前磚塊的形狀(03);例如t型數(shù)組: brick_type=0:1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,brick_type=1:1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ,brick_type=2:0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,brick_type=3:0, 1, 0, 0, 1, 1, 0, 0, 0, 1,

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論