基于java的俄羅斯方塊的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
已閱讀1頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  河北農(nóng)業(yè)大學(xué)現(xiàn)代科技學(xué)院</p><p><b>  本科畢業(yè)論文</b></p><p>  題 目:基于Java的俄羅斯方塊的設(shè)計(jì)與實(shí)現(xiàn) </p><p>  學(xué) 院: 現(xiàn)代科技學(xué)院 </p><p>  專業(yè)班級: 計(jì)算機(jī)科學(xué)與技術(shù)1002班 </

2、p><p>  學(xué) 號: 2010614140512 </p><p>  學(xué)生姓名: 賴添景 </p><p>  指導(dǎo)教師姓名: 陳晨 </p><p>  指導(dǎo)教師職稱: 講師 </p>&l

3、t;p>  二O一四 年 六 月 一 日</p><p><b>  摘要</b></p><p>  俄羅斯方塊作為一款風(fēng)靡全球的多樣化終端游戲,經(jīng)久不衰。俄羅斯方塊簡單的基本游戲規(guī)則是旋轉(zhuǎn)、移動,游戲自動隨機(jī)輸出7種形狀的方塊,經(jīng)旋轉(zhuǎn)后可形成28種形狀,方塊堆疊在一起,排列成完整的一行或多行消除得分,積分達(dá)到一定程度會自動提升級別。該游戲上手簡單、老少皆

4、宜、家喻戶曉。</p><p>  本論文在詳盡分析傳統(tǒng)俄羅斯實(shí)現(xiàn)的基本原理、基本規(guī)則基礎(chǔ)上,更深一步地研究俄羅斯方塊的創(chuàng)新模式,在經(jīng)典模式基礎(chǔ)上開發(fā)出等級可變的模式,本文對以上功能給出了實(shí)現(xiàn)流程、詳盡描述、和部分源代碼。程序是在Microsoft Windows 7系統(tǒng)下,以Java為開發(fā)語言,在MyEclipse開發(fā)平臺上進(jìn)行游戲的設(shè)計(jì)與實(shí)現(xiàn)。</p><p>  關(guān)鍵詞:游戲;軟件工

5、程;MyEclipse</p><p><b>  Abstract</b></p><p>  Tetris is a popular global diversification terminal game, enduring. The basic rules of the game Tetris simple is rotating, moving, the g

6、ame automatically random output 7 shape box, the rotation can be formed after the 28 square shape, stacked together, arranged to complete one or more rows to eliminate the score, the integral to a certain extent will aut

7、omatically upgrade the level of. The game started simple, suitable for all ages, make known to every family.</p><p>  In this paper a detailed analysis of the basic rules of traditional Russian basic princip

8、le, on the basis of the realization of innovation mode, further study of Tetris, developed a class variable model in the classical model, the above function gives the implementation process, detailed description, and par

9、t of the source code.This design is in the Microsoft Windows 7 system, taking Java as the development language, for game design and Implementation on MyEclipse platform.關(guān)鍵詞:游戲;俄羅斯方塊;軟件工程;MyEc</p><p>  Keywor

10、ds: Game; software engineering; MyEclipse</p><p><b>  目錄</b></p><p><b>  1 緒論1</b></p><p>  1.1 俄羅斯方塊游戲的背景1</p><p>  1.2 俄羅斯方塊游戲的規(guī)則1</p>

11、;<p>  1.3 研究俄羅斯方塊游戲的意義1</p><p>  1.4 論文組織2</p><p>  2 相關(guān)技術(shù)分析3</p><p>  2.1 JAVA語言概述3</p><p>  2.2 Eclipse簡介4</p><p><b>  3 需求分析6</b&

12、gt;</p><p>  3.1 系統(tǒng)需求6</p><p>  3.2 接口控制6</p><p><b>  4 系統(tǒng)設(shè)計(jì)7</b></p><p>  4.1 軟件運(yùn)行和開發(fā)工具7</p><p>  4.2 系統(tǒng)功能設(shè)計(jì)7</p><p>  4.2.1

13、 手工處理業(yè)務(wù)的基本流程7</p><p>  4.2.2 基本流程的功能模塊9</p><p><b>  5 系統(tǒng)實(shí)現(xiàn)11</b></p><p>  5.1 游戲主界面顯示模塊11</p><p>  5.2 畫布、方塊顯示模塊12</p><p>  5.2.1 背景畫布模塊設(shè)計(jì)

14、12</p><p>  5.2.2 預(yù)覽方塊模塊設(shè)計(jì)14</p><p>  5.2.3方塊移動、旋轉(zhuǎn)設(shè)計(jì)16</p><p>  5.3 控制面板模塊20</p><p>  5.3.1菜單欄模塊設(shè)計(jì)20</p><p>  5.3.2控制面板按鈕設(shè)計(jì)22</p><p><

15、;b>  6 總結(jié)23</b></p><p><b>  參考文獻(xiàn)24</b></p><p><b>  致謝25</b></p><p><b>  1 緒論</b></p><p>  1.1 俄羅斯方塊游戲的背景 </p><

16、;p>  俄羅斯方塊是俄羅斯人阿列克謝?帕基特諾夫(Alexey Pazhitnov)發(fā)明。1985年6月 工作于莫斯科科學(xué)計(jì)算機(jī)中心的阿列克謝·帕基特諾夫在玩過一個(gè)拼圖游戲之后受到啟發(fā),從而制作了一個(gè)以Electronica 60(一種計(jì)算機(jī))為平臺的俄羅斯方塊的游戲。后來經(jīng)瓦丁·格拉西莫夫(Vadim Gerasimov)移植到PC上,并且在莫斯科的電腦界傳播。人們一開始并沒預(yù)料到它將會有如此廣泛的吸引力。

17、實(shí)際上,在游戲發(fā)明后的數(shù)年間,俄羅斯方塊成了無數(shù)場專利官司和法律糾紛的目標(biāo),而許多公司也不遺余力地上陣廝殺,想要將游戲的創(chuàng)意據(jù)為己有。一個(gè)最初的版本是Spectrum Holobyte為IBM兼容機(jī)開發(fā)的游戲。1988年,俄羅斯方塊在街機(jī)上也變得非常流行,這歸功于Atari,因?yàn)樗麄儼l(fā)布了一個(gè)能讓兩名玩家同時(shí)游戲的版本。</p><p>  俄羅斯方塊經(jīng)常被稱為拼圖游戲。玩家需要找出如何能把各塊積木最好的拼在一起

18、的方法。俄羅斯方塊相當(dāng)于直角的智力拼圖游戲,或者其它一種“在這有限空間內(nèi)組織幾何體”的拼圖。俄羅斯方塊為了創(chuàng)造真正引人入勝的游戲,它巧妙的平衡了拼圖游戲與動作游戲的機(jī)制。因而每個(gè)人玩這個(gè)游戲都會有一次不同的體驗(yàn)。俄羅斯方塊所用到的一種動作游戲機(jī)制是越來越逼近的威脅感,留給玩家的時(shí)間總是非常有限。俄羅斯方塊中積木是從上面落下來。如果玩家不在積木落到屏幕底下或翻轉(zhuǎn)它,不能給它找一個(gè)最有利的位置,這塊積木就可能會堵住某處,而它下面的幾行也就沒

19、有辦法拼接完整,玩家也就離游戲結(jié)束又靠近了一行或幾行。在游戲進(jìn)程中,積木落下來的速度越來越快,這樣對玩家的挑戰(zhàn)也就越來越大,游戲的難度也逐步增加。</p><p>  2014年2月22日,英國心理學(xué)家發(fā)現(xiàn),減肥者通過玩俄羅斯方塊,可以降低對富含脂肪的食物和零食的心理需求;嘗試戒煙者的煙癮也能得到遏制[1]。</p><p>  1.2 俄羅斯方塊游戲的規(guī)則</p><

20、p>  由小方塊組成的不同形狀的板塊陸續(xù)從屏幕上方落下來,玩家通過調(diào)整板塊的位置和方向,使它們在屏幕底部拼出完整的一條或幾條。這些完整的橫條會隨即消失,給新落下來的板塊騰出空間,與此同時(shí),玩家得到分?jǐn)?shù)獎(jiǎng)勵(lì)。沒有被消除掉的方塊不斷堆積起來,一旦堆到屏幕頂端,玩家便告輸,游戲結(jié)束[2]。</p><p>  1.3 研究俄羅斯方塊游戲的意義</p><p>  在成為一個(gè)真正的游戲開發(fā)者

21、的路上,俄羅斯方塊是一個(gè)完美開始。并且,不需要藝術(shù)家般的才能就能做出非常好看的俄羅斯方塊游戲。任何一個(gè)能畫出方塊的人每個(gè)作圖形程序的人都會的就能做出商業(yè)品質(zhì)的俄羅斯方塊游戲。</p><p>  以俄羅斯方塊開始還有另外一個(gè)好處,不僅能做出一個(gè)完整的既好玩又容易上癮游戲,而且它看上來和那些商業(yè)版本沒什么區(qū)別。方塊就是方塊,不管是誰畫出它們的,而且 tetraminos(俄羅斯方塊中使用的形狀)也不過是一些方塊的組

22、合。</p><p>  俄羅斯方塊擁有所有游戲共通的獨(dú)立成份。它有一個(gè)游戲循環(huán)(這個(gè)過程被反復(fù)執(zhí)行直到游戲退出)。這個(gè)游戲循環(huán)讀取玩家的輸入,處理這個(gè)輸入,然后更新游戲的元素(下落的 tetraminos),并且檢查是輸還是贏[3]。</p><p>  以后要做的所有的簡單的游戲都要用到這些東西,所以學(xué)習(xí)這個(gè)過程并且實(shí)現(xiàn)它是非常重要的。當(dāng)?shù)谝淮瓮瓿伤螅院笤僮鲇螒驎r(shí)就能看出那個(gè)游戲

23、有多難以及要花多長時(shí)間。如果沒有完整的完成過這些,哪怕一次,就永遠(yuǎn)不能完整地正確領(lǐng)會其中的每個(gè)元素。當(dāng)做大的項(xiàng)目時(shí),就更不能確定其復(fù)雜性及所要的時(shí)間。如果甚至不能正確地領(lǐng)會這整個(gè)過程(因?yàn)槟銢]能完成它),可能是沒能建立一個(gè)合適的時(shí)間表或估計(jì)合適的時(shí)間,更有可能的是不夠努力。</p><p>  還有,玩俄羅斯方塊可以練習(xí)人的反映能力,開始時(shí)快速的下降會讓人手無足措,但適應(yīng)了之后就會發(fā)現(xiàn)自己的反應(yīng)力變的很快了。&l

24、t;/p><p>  其次長時(shí)間的手指活動可以讓人血液流通加快有利健康。</p><p>  還有俄羅斯方塊高手都知道要想贏,就要有遠(yuǎn)大的布局,決不能只局限于一點(diǎn)一點(diǎn)的減,這在無形中就提高了人的智慧。</p><p><b>  1.4 論文組織</b></p><p>  論文全文共分為六章:</p><

25、;p>  第一章緒論:主要介紹了游戲的背景、規(guī)則及研究此游戲的意義。</p><p>  第二章相關(guān)技術(shù)分析:介紹了Java語言和開發(fā)環(huán)境Eclipse的相關(guān)知識。</p><p>  第三章需求分析:主要介紹了系統(tǒng)設(shè)計(jì)思想、功能和性能需求。</p><p>  第四章系統(tǒng)設(shè)計(jì):主要介紹了系統(tǒng)的功能設(shè)計(jì)。</p><p>  第五章系統(tǒng)

26、實(shí)現(xiàn):介紹了系統(tǒng)的所有模塊和它的功能。</p><p>  第六章總結(jié):回顧開發(fā)此游戲的艱辛過程與人生感悟。</p><p><b>  2 相關(guān)技術(shù)分析</b></p><p>  2.1 JAVA語言概述</p><p>  Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言[4],是由Sun Micros

27、ystems公司于1995年5月推出的Java程序設(shè)計(jì)語言和Java平臺(即JavaEE, JavaME, JavaSE)的總稱。Java自面世后就非常流行,發(fā)展迅速,對C++語言形成了有力沖擊。Java 技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計(jì)算機(jī)、移動電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。在全球云計(jì)算和移動互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢和

28、廣闊前景。</p><p>  Java語言是易學(xué)的。Java語言的語法與C語言和C++語言很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用Java。另一方面,Java丟棄了C++中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強(qiáng)制類型轉(zhuǎn)換。特別地,Java語言不使用指針,而是引用。并提供了自動的廢料收集,使得程序員不必為內(nèi)存管理而擔(dān)憂。</p><p>  Java語言

29、是強(qiáng)制面向?qū)ο蟮?。Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實(shí)現(xiàn)機(jī)制(關(guān)鍵字為implements)。Java語言全面支持動態(tài)綁定,而C++語言只對虛函數(shù)使用動態(tài)綁定。總之,Java語言是一個(gè)純的面向?qū)ο蟪绦蛟O(shè)計(jì)語言。</p><p>  Java語言是分布式的。Java語言支持Internet應(yīng)用的開發(fā),在基本的Java應(yīng)用編程接口中有

30、一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(java net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠(yuǎn)程方法激活)機(jī)制也是開發(fā)分布式應(yīng)用的重要手段。</p><p>  Java語言是健壯的。Java的強(qiáng)類型機(jī)制、異常處理、垃圾的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機(jī)制使得Java更

31、具健壯性。</p><p>  Java語言是安全的。Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一個(gè)安全機(jī)制以防惡意代碼的攻擊。除了Java語言具有的許多安全特性以外,Java對通過網(wǎng)絡(luò)下載的類具有一個(gè)安全防范機(jī)制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查,并提供安全管理機(jī)制(類SecurityManager)讓Java應(yīng)用設(shè)置安全哨兵。</p>&

32、lt;p>  Java語言是體系結(jié)構(gòu)中立的。Java程序(后綴為java的文件)在Java平臺上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件),然后可以在實(shí)現(xiàn)這個(gè)Java平臺的任何系統(tǒng)中運(yùn)行。這種途徑適合于異構(gòu)的網(wǎng)絡(luò)環(huán)境和軟件的分發(fā)。</p><p>  Java語言是可移植的。這種可移植性來源于體系結(jié)構(gòu)中立性,另外,Java還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類型的長度。Java系統(tǒng)本身也具有很強(qiáng)的可移植

33、性,Java編譯器是用Java實(shí)現(xiàn)的,Java的運(yùn)行環(huán)境是用ANSI C實(shí)現(xiàn)的。</p><p>  Java語言是解釋型的。如前所述,Java程序在Java平臺上被編譯為字節(jié)碼格式,然后可以在實(shí)現(xiàn)這個(gè)Java平臺的任何系統(tǒng)中運(yùn)行。在運(yùn)行時(shí),Java平臺中的Java解釋器對這些字節(jié)碼進(jìn)行解釋執(zhí)行,執(zhí)行過程中需要的類在聯(lián)接階段被載入到運(yùn)行環(huán)境中。</p><p>  Java是性能略高的。與

34、那些解釋型的高級腳本語言相比,Java的性能還是較優(yōu)的。</p><p>  Java語言是原生支持多線程的。在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來創(chuàng)建。通常有兩種方法來創(chuàng)建線程:其一,使用型構(gòu)為Thread(Runnable)的構(gòu)造子將一個(gè)實(shí)現(xiàn)了Runnable接口的對象包裝成一個(gè)線程,其二,從Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對象即為線程。值得注

35、意的是Thread類已經(jīng)實(shí)現(xiàn)了Runnable接口,因此,任何一個(gè)線程均有它的run方法,而run方法中包含了線程所要運(yùn)行的代碼。線程的活動由一組方法來控制。Java語言支持多個(gè)線程的同時(shí)執(zhí)行,并提供多線程之間的同步機(jī)制(關(guān)鍵字為synchronized)。</p><p>  Java語言是動態(tài)的。Java語言的設(shè)計(jì)目標(biāo)之一是適應(yīng)于動態(tài)變化的環(huán)境。Java程序需要的類能夠動態(tài)地被載入到運(yùn)行環(huán)境,也可以通過網(wǎng)絡(luò)來

36、載入所需要的類。這也有利于軟件的升級。另外,Java中的類有一個(gè)運(yùn)行時(shí)刻的表示,能進(jìn)行運(yùn)行時(shí)刻的類型檢查。</p><p>  Java語言的優(yōu)良特性使得Java應(yīng)用具有無比的健壯性和可靠性,這也減少了應(yīng)用系統(tǒng)的維護(hù)費(fèi)用[5]。Java對對象技術(shù)的全面支持和Java平臺內(nèi)嵌的API能縮短應(yīng)用系統(tǒng)的開發(fā)時(shí)間并降低成本。Java的編譯一次,到處可運(yùn)行的特性使得它能夠提供一個(gè)隨處可用的開放結(jié)構(gòu)和在多平臺之間傳遞信息的低

37、成本方式。特別是Java企業(yè)應(yīng)用編程接口(Java Enterprise APIs)為企業(yè)計(jì)算及電子商務(wù)應(yīng)用系統(tǒng)提供了有關(guān)技術(shù)和豐富的類庫[6-7]。</p><p>  2.2 Eclipse簡介</p><p>  Eclipse是著名的跨平臺的自由集成開發(fā)環(huán)境(IDE)[8]。最初主要用來Java語言開發(fā),但是目前亦有人通過插件使其作為其他計(jì)算機(jī)語言比如C++和Python的開發(fā)工具

38、。</p><p>  Eclipse的本身只是一個(gè)框架平臺,但是眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。</p><p>  Eclipse最初是由IBM公司開發(fā)的替代商業(yè)軟件Visual Age for Java的下一代IDE開發(fā)環(huán)境,2001年11月貢獻(xiàn)給開源社區(qū),現(xiàn)在它由非營利軟件供應(yīng)商

39、聯(lián)盟Eclipse基金會(Eclipse Foundation)管理。 2003年,Eclipse 3.0選擇OSGi服務(wù)平臺規(guī)范為運(yùn)行時(shí)架構(gòu)。 2007年6月,穩(wěn)定版3.3發(fā)布。2008年6月發(fā)布代號為Ganymede的3.4版[9]。</p><p>  Eclipse的基礎(chǔ)是富客戶機(jī)平臺(Rich Client Platform, 即RCP)。RCP包括下列組件:</p><p> 

40、 (1)核心平臺(啟動Eclipse,運(yùn)行插件)</p><p>  (2)OSGi(標(biāo)準(zhǔn)集束框架)</p><p>  (3)SWT(可移植構(gòu)件工具包)</p><p>  (4)JFace(文件緩沖,文本處理,文本編輯器)</p><p>  (5)Eclipse工作臺(即Workbench ,包含視圖(views)、編輯器(editor

41、s)、視角(perspectives)、和向?qū)В╳izards))</p><p>  Eclipse采用的技術(shù)是IBM公司開發(fā)的(SWT),這是一種基于Java的窗口組件,類似Java本身提供的AWT和Swing窗口組件;不過IBM聲稱SWT比其他Java窗口組件更有效率。Eclipse的用戶界面還使用了GUI中間層JFace,從而簡化了基于SWT的應(yīng)用程序的構(gòu)建。</p><p>  

42、Eclipse的插件機(jī)制是輕型軟件組件化架構(gòu)。在富客戶機(jī)平臺上,Eclipse使用插件來提供所有的附加功能,例如支持Java以外的其他語言。 已有的分離的插件已經(jīng)能夠支持C/C++(CDT)、Perl、Ruby,Python、telnet和數(shù)據(jù)庫開發(fā)。插件架構(gòu)能夠支持將任意的擴(kuò)展加入到 現(xiàn)有環(huán)境中,例如配置管理,而決不僅僅限于支持各種編程語言。</p><p>  Eclipse的設(shè)計(jì)思想是:一切皆插件。Ecli

43、pse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。Eclipse基本內(nèi)核包括:圖形API (SWT/Jface), Java開發(fā)環(huán)境插件(JDT ),插件開發(fā)環(huán)境(PDE)等。</p><p>  Eclipse由各種不同的計(jì)劃組成。以下列出了部分計(jì)劃。</p><p> ?。?)Eclipse計(jì)劃:本身包括Eclipse平臺,Eclipse富客戶端平臺(RCP)和J

44、ava開發(fā)工具(JDT)。</p><p> ?。?)Eclipse測試和性能工具平臺(TPTP):提供一個(gè)允許軟件開發(fā)者構(gòu)建諸如測試調(diào)試、概況分析、基準(zhǔn)評測等測試和性能工具的平臺。</p><p> ?。?)Eclipse Web工具平臺計(jì)劃(WTP):用Java企業(yè)版Web應(yīng)用程序開發(fā)工具來擴(kuò)展Eclipse平臺。它由以下部分組成:HTML、JavaScript、CSS、JSP、SQL

45、、XML、DTD、XSD和WSDL的 源代碼編輯器;XSD和WSDL的圖形界面編輯器;Java企業(yè)版的“項(xiàng)目性質(zhì)”(project nature)、建構(gòu)器(builder)和模型(model),與一個(gè)Java企業(yè)版的導(dǎo)航(navigator);一個(gè)Web服務(wù)(Web service)向?qū)Ш蜑g覽器,還有一個(gè)WS-I測試工具;最后是數(shù)據(jù)庫訪問查詢的工具與模型。</p><p> ?。?)Eclipse商業(yè)智能和報(bào)表工

46、具計(jì)劃(BIRT):提供Web應(yīng)用程序(特別是基于Java企業(yè)版的)的報(bào)表開發(fā)工具。</p><p>  (5)Eclipse可視化界面編輯器計(jì)劃(VEP):一個(gè)Eclipse下創(chuàng)建圖形用戶界面代碼生成器的框架。</p><p> ?。?)Eclipse建模框架(EMF):依據(jù)使用XMI描述的建模規(guī)格,生成結(jié)構(gòu)化數(shù)據(jù)模型的工具和其他應(yīng)用程序的代碼。</p><p>

47、 ?。?)圖形化編輯器框架(GEF):能讓開發(fā)者采用一個(gè)現(xiàn)成的應(yīng)用程序模型來輕松地創(chuàng)建富圖形化編輯器。</p><p> ?。?)UML2:Eclipse平臺下的一個(gè)UML 2.0元模型的實(shí)現(xiàn),用以支持建模工具的開發(fā)。</p><p> ?。?)AspectJ:一種針對Java的面向側(cè)面語言擴(kuò)展。</p><p> ?。?0)Eclipse通訊框架(ECF):專注于

48、在Eclipse平臺上創(chuàng)建通訊應(yīng)用程序的工作。</p><p> ?。?1)Eclipse數(shù)據(jù)工具平臺計(jì)劃(DTP)</p><p>  (12)Eclipse設(shè)備驅(qū)動軟件開發(fā)計(jì)劃(DSDP)</p><p> ?。?3)C/C++開發(fā)工具計(jì)劃(CDT):努力為Eclipse平臺提供一個(gè)全功能C和C++的集成開發(fā)環(huán)境(IDE),它使用GCC作為編譯器。</p&

49、gt;<p> ?。?4)Eclipse平臺COBOL集成開發(fā)環(huán)境子計(jì)劃(COBOL):將構(gòu)建一個(gè)Eclipse平臺上的全功能COBOL集成開發(fā)環(huán)境。</p><p> ?。?5)并行工具平臺(PTP):將開發(fā)一個(gè)對并行計(jì)算機(jī)架構(gòu)下的一組工具進(jìn)行集成的平行工具平臺,而且這個(gè)平臺是可移植的,可伸縮的并基于標(biāo)準(zhǔn)的。</p><p>  (16)嵌入式富客戶端平臺(eRCP):計(jì)劃

50、將Eclipse富客戶端平臺擴(kuò)展到嵌入式設(shè)備上。這個(gè)平臺主要是一個(gè)富客戶端平臺(RCP)組件子集的集合。它能讓桌面環(huán)境下的應(yīng)用程序模型能夠大致同樣地能運(yùn)用在嵌入式設(shè)備上。</p><p><b>  3 需求分析</b></p><p>  對系統(tǒng)的需求分析就是用戶和開發(fā)人員在“系統(tǒng)必須做什么”這個(gè)問題上實(shí)現(xiàn)相互理解,達(dá)到共識,從而形成雙方認(rèn)可的軟件產(chǎn)品的需求規(guī)格。這

51、樣有利于提高軟件開發(fā)過程中的能見度,便于對軟件開發(fā)過程的控制與管理,便于采用工程化的模式開發(fā)軟件,從而達(dá)到提高軟件的質(zhì)量,為開發(fā)人員、維護(hù)人員、管理人員之間的交流、協(xié)作提供便捷。作為工作成果的原始依據(jù),系統(tǒng)的需求分析可以向潛在用戶傳遞軟件功能、性能的需求,使其能夠判斷該軟件是否符合自己的需求。</p><p><b>  3.1 系統(tǒng)需求</b></p><p>  

52、系統(tǒng)隨機(jī)產(chǎn)生7中不同形狀的方塊,旋轉(zhuǎn)后有28種狀態(tài)。方塊自由下落,玩家通過鍵盤控制方塊的移動和旋轉(zhuǎn),把方塊擺放在適當(dāng)?shù)奈恢?。如果方塊落下時(shí),有被方塊填滿的整行,則該行可消去。每消去一行,玩家得分增加10分,每滿50分,玩家等級增加一級。若由存在空格的方塊填滿整個(gè)窗口,則游戲宣告失敗。游戲功能需求如下:</p><p>  游戲界面需求:設(shè)計(jì)良好的游戲界面可以讓玩家充分感受到游戲帶來的娛樂性,游戲的默認(rèn)背景色是灰色

53、,主界面方塊默認(rèn)用淺綠色,預(yù)顯方塊顏色默認(rèn)為紅色。背景色、前景色對比鮮明,以達(dá)到讓玩家眼前一亮的感覺,并能在游戲達(dá)到高等級狀態(tài),方塊下落速度漸高的情況下使玩家能夠清楚的分辨出下落方塊的形狀,增加游戲的刺激性。</p><p>  游戲形狀需求:用數(shù)組作為存儲方塊28種狀態(tài)的數(shù)據(jù)結(jié)構(gòu),即長條形、Z字形、反Z形、田字形、7字形、反7形、T字型一共7種形狀的向4個(gè)方向的旋轉(zhuǎn)變形,各個(gè)方塊要能實(shí)現(xiàn)它的任意變形,可設(shè)為順時(shí)

54、針變形或逆時(shí)針變形,一般為逆時(shí)針變形。方塊的可否翻轉(zhuǎn)需要加以判斷,以防止其翻轉(zhuǎn)越界。</p><p>  鍵盤處理事件需求:方塊下落時(shí),可通過鍵盤方向鍵(上鍵、下鍵、左鍵、右鍵)向上(旋轉(zhuǎn)變形)、向下(加速下落)、向左移動、向右移動。</p><p>  鼠標(biāo)處理事件需求:通過點(diǎn)擊菜單欄中相應(yīng)的菜單項(xiàng)或控制面板內(nèi)的按鈕,可以實(shí)現(xiàn)游戲的開始、結(jié)束、暫停、繼續(xù)、提高等級、降低等級,預(yù)顯方塊形狀

55、的顯示,分?jǐn)?shù)、等級的顯示,以及游戲幫助等功能。</p><p>  顯示需求:當(dāng)方塊填滿一行時(shí)可以消行,剩余未填滿的行逐次向下移動并統(tǒng)計(jì)分?jǐn)?shù)。當(dāng)達(dá)到一定分?jǐn)?shù)的時(shí)候,會增加相應(yīng)的等級。當(dāng)方塊充滿主界面的每一行,方塊不能再下落時(shí),提示“親!你輸了!”的字樣。</p><p>  非功能性需求:本系統(tǒng)非功能性需求包括游戲主界面窗口尺寸可調(diào)整性需求、游戲運(yùn)行時(shí)主界面彈出位置居中需求等。</p

56、><p><b>  3.2 接口控制</b></p><p>  本游戲通過鍵盤和鼠標(biāo)進(jìn)行操作,在Windows的操作系統(tǒng)下,利用鍵盤的按鍵對方塊進(jìn)行移動、變形,要使用到鍵盤的接口事件。游戲使用鼠標(biāo)對游戲進(jìn)行全程控制,如游戲的開始、暫停、繼續(xù)、查看游戲幫助、更改游戲等級等,通過對鼠標(biāo)單擊、按鍵添加監(jiān)聽事件,編輯相應(yīng)代碼來實(shí)現(xiàn)相應(yīng)功能。</p><p&

57、gt;<b>  4 系統(tǒng)設(shè)計(jì)</b></p><p>  4.1 軟件運(yùn)行和開發(fā)工具</p><p>  操作系統(tǒng):Microsoft Windows 7</p><p><b>  內(nèi)存:2G</b></p><p><b>  硬盤:500G</b></p>

58、<p>  CPU:Intel(R) Core(TM) i3-2310M </p><p>  交互工具:鍵盤、鼠標(biāo)</p><p>  顯示器:VGA顯示器</p><p>  JDK版本:jdk1.7.0_25</p><p>  Eclipse版本:MyEclipse 4.3.0 SDK-3.4.1-win64</p&

59、gt;<p>  4.2 系統(tǒng)功能設(shè)計(jì)</p><p>  4.2.1 手工處理業(yè)務(wù)的基本流程</p><p>  本游戲的設(shè)計(jì)以娛樂為初衷,以益智為目的,在綜合研究以往俄羅斯方塊經(jīng)典游戲功能的基礎(chǔ)上推陳出新,加之新的功能,賦以新的生機(jī)和活力。圖4-1為游戲基本流程圖具體闡述游戲的基本流程。</p><p><b>  運(yùn)行說明:</b

60、></p><p>  1>運(yùn)行程序,點(diǎn)擊右側(cè)控制面板內(nèi)的“開始”或“控制”菜單內(nèi)的“開始”按鈕開始游戲。</p><p>  2>使用上、下、左、右鍵控制方塊的變形、下落、向左和向右移動。</p><p>  3>方塊滿行消除,分?jǐn)?shù)自動增加,分?jǐn)?shù)每滿50等級自動增加一級。</p><p>  4>等級增加、方塊

61、下落速度增加,按右側(cè)控制面板或“游戲”菜單內(nèi)的“提高等級”、“降低等級”按鈕,來手動改變游戲等級。</p><p>  5>按右側(cè)控制面板或“控制”菜單內(nèi)的“暫停”可以控制游戲暫停,然后按“繼續(xù)”可以控制游戲繼續(xù)上次游戲。按“停止”按鈕,游戲會徹底停止正在進(jìn)行的當(dāng)局游戲,再按“開始”或“控制”菜單內(nèi)的“重新開始”會開始新游戲。</p><p>  6>當(dāng)方塊占滿整個(gè)窗口,不能再

62、有新方塊下落時(shí),游戲會彈出“親!你輸了!”的對話框提示游戲結(jié)束。</p><p><b>  初始化方塊</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  是</b></p>

63、<p><b>  否</b></p><p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  是</b></p><p

64、>  圖4-1 游戲基本流程圖</p><p>  4.2.2 基本流程的功能模塊</p><p>  本系統(tǒng)基于游戲的各項(xiàng)功能來設(shè)計(jì)游戲的各個(gè)功能模塊。圖4-2為本游戲的系統(tǒng)功能模塊示意圖,如圖所示,本游戲主要有兩大模塊:游戲界面區(qū),游戲控制區(qū)。游戲界面區(qū)分顯示玩家可選操作、顯示玩家操作結(jié)果兩個(gè)部分。游戲控制區(qū)分開始、暫停、繼續(xù)、停止、重新開始、提高級數(shù)、降低級數(shù)、退出等功能模塊。

65、</p><p>  圖4-2 系統(tǒng)功能模塊示意圖</p><p>  圖4-3為游戲界面區(qū)模塊設(shè)計(jì)示意圖,如圖所示,游戲界面區(qū)模塊可細(xì)分為創(chuàng)建新游戲界面、處理玩家操作、顯示玩家操作結(jié)果三個(gè)功能模塊。</p><p>  圖4-3 界面模塊示意圖</p><p>  圖4-4為游戲控制區(qū)設(shè)計(jì)示意圖,如圖所示,游戲控制區(qū)模塊分為開始、暫停、繼續(xù)

66、、初始游戲級別設(shè)置、退出等功能模塊。</p><p>  圖4-4 控制區(qū)模塊示意圖</p><p><b>  5 系統(tǒng)實(shí)現(xiàn)</b></p><p>  Java是一種純面向?qū)ο螅∣bject-Oriented)的程序語言。從面向?qū)ο蟮挠^念出發(fā),本程序主要可分為以下幾個(gè)模塊:</p><p> ?、?游戲主界面顯示模塊

67、</p><p> ?、?方塊及數(shù)據(jù)顯示模塊</p><p>  ⑶ 方塊移動控制模塊</p><p> ?、?游戲進(jìn)度、等級控制模塊</p><p>  分析對象的技巧在于它的功能的擴(kuò)展性及維護(hù)效率[10]。試想,如果因?yàn)橥獠凯h(huán)境或者用戶需求的變化需要對程序進(jìn)行功能擴(kuò)展或者維護(hù),就要對代碼作大幅度的更動甚至重寫,這樣就失去了面向?qū)ο蟮膬?yōu)勢,

68、所以在本程序分析時(shí)將獨(dú)立性高的模塊作為一個(gè)對象,以提高程序的可擴(kuò)展性和可維護(hù)性。以下該游戲中類的設(shè)計(jì):</p><p>  ControlMainGame類:繼承自JFrame類,作為游戲的主類,負(fù)責(zé)對游戲的主體全局進(jìn)行控制,連接與指揮各個(gè)類的樞紐。 </p><p>  ControlPanel類:繼承自JPanel類,作為操作面板類,負(fù)責(zé)安放主游戲窗口,積分板,級別控制按鈕等窗口用以控

69、制游戲進(jìn)程。 </p><p>  ShowBeforePanel類:繼承自JPanel類,ShowBeforePanel線程類動態(tài)改變畫布類的方格顏色,畫布類通過檢查方格顏色來體現(xiàn)ShowBeforePanel方塊的移動情況與消去狀況。</p><p>  ErsBox類:方格類,組成方塊的基本元素,主要表達(dá)方式為顏色。 </p><p>  BlockOpera

70、tion類:繼承自Thread類,作為操控方塊的類,控制方塊的移動,下落以及變形。</p><p>  5.1 游戲主界面顯示模塊</p><p>  一個(gè)優(yōu)秀的軟件系統(tǒng)不僅體現(xiàn)在核心的功能的多樣性和強(qiáng)大上,如果使用者所面對的是枯燥的、陳舊的界面的話,那么這個(gè)的軟件系統(tǒng)是不成功的,所以好的、精美的界面設(shè)計(jì)是極為重要的環(huán)節(jié)[11]。為玩家設(shè)計(jì)制作布局合理、視覺效果良好的界面的重要性就不言而喻

71、了。</p><p>  游戲主界面采用Swing組件開發(fā),并且向其注冊監(jiān)聽器,以實(shí)現(xiàn)各種控制功能,綜合游戲窗體的設(shè)計(jì),其上至少需要注冊三個(gè)監(jiān)聽器,分別是動作監(jiān)聽器(ActionListener)、鍵盤監(jiān)聽器(KeyListener)、選項(xiàng)監(jiān)聽器(ItemListener)。</p><p>  根據(jù)初步設(shè)計(jì),可以確定客戶端上所要用到的Swing組件對象有JFrame對象、JPanel對象

72、,JLabel對象、JButton對象、JMenuBar對象、JMenu對象、JMenuItem對象、JTextField對象、JTextArea對象、JDialog對象等,至少十個(gè)Swing組件對象。下圖5-1為游戲主界面截圖。</p><p>  本游戲主界面設(shè)計(jì)的初始顏色搭配基于對比鮮明的原則,默認(rèn)背景色為灰色,得分初始值為0,等級初始值為1。游戲主窗體尺寸設(shè)置為(520,580)。</p>

73、<p>  圖5-1 游戲主界面截圖</p><p>  5.2 畫布、方塊顯示模塊</p><p>  本游戲中將畫布底色默認(rèn)設(shè)計(jì)成灰色,在方塊下落過程中,根據(jù)顏色的變化識別下落的方塊。</p><p>  5.2.1 背景畫布模塊設(shè)計(jì)</p><p>  該游戲的主背景畫布是一個(gè)20行、12列的二維數(shù)組,方塊顯示是由相應(yīng)顏色變化

74、來標(biāo)識,主窗體用顏色填充后可形成呈現(xiàn)出來背景樣式和方塊。本游戲用繼承自JPanel的ShowBeforePanel類控制背景畫布的顯示,用rows代表畫布的行數(shù),cols代表畫布的列數(shù),行數(shù)和列數(shù)決定著畫布擁有方格的數(shù)目。背景畫布實(shí)現(xiàn)代碼如下:</p><p><b>  /*</b></p><p>  ShowBeforePanel 類</p>&l

75、t;p><b>  畫布類的構(gòu)造函數(shù)</b></p><p>  rows int, 畫布的行數(shù)</p><p>  cols int, 畫布的列數(shù)</p><p>  行數(shù)和列數(shù)決定著畫布擁有方格的數(shù)目</p><p><b>  */</b></p><p>  p

76、rivate class ShowBeforePanel extends JPanel</p><p><b>  {</b></p><p>  private Color backColor = Color.darkGray, frontColor = Color.red;</p><p>  private ErsBox[][] boxe

77、s =new ErsBox[ErsBlock.boxes_rows][ErsBlock.boxes_cols];</p><p>  private int style, boxWidth, boxHeight;</p><p>  private boolean isTiled = false;</p><p>  public ShowBeforePanel(

78、) </p><p><b>  {</b></p><p>  for (int i = 0; i < boxes.length; i++)</p><p><b>  {</b></p><p>  for (int j = 0; j < boxes[i].length; j++)&

79、lt;/p><p>  boxes[i][j] = new ErsBox(false);</p><p><b>  }</b></p><p>  }//畫布類的構(gòu)造函數(shù)</p><p>  public ShowBeforePanel(Color backColor, Color frontColor)</p&g

80、t;<p><b>  {</b></p><p><b>  this();</b></p><p>  this.backColor = backColor; //背景色</p><p>  this.frontColor = frontColor; //前景色</p><p>&

81、lt;b>  }</b></p><p>  public void setStyle(int style) </p><p><b>  {</b></p><p>  this.style = style;</p><p>  repaint();</p><p><b

82、>  }</b></p><p>  public void paintComponent(Graphics g)</p><p><b>  {</b></p><p>  super.paintComponent(g);</p><p>  if (!isTiled) </p><

83、;p>  fanning();</p><p>  int key = 0x8000;</p><p>  for (int i = 0; i < boxes.length; i++)</p><p><b>  {</b></p><p>  for (int j = 0; j < boxes[i].

84、length; j++)</p><p><b>  {</b></p><p>  Color color = (((key & style) != 0) ? frontColor : backColor);</p><p>  g.setColor(color);</p><p>  g.fill3DRect

85、(j * boxWidth, i * boxHeight,</p><p>  boxWidth, boxHeight, true);</p><p>  key >>= 1;</p><p><b>  }</b></p><p><b>  }</b></p><

86、p><b>  }</b></p><p>  5.2.2 預(yù)覽方塊模塊設(shè)計(jì)</p><p>  方塊和數(shù)據(jù)信息是游戲中最基本的功能模塊。ShowBeforePanel這個(gè)類提供方塊預(yù)顯圖形 ,blockkindnum用來控制隨機(jī)產(chǎn)生的方塊編號,blockstatusnum用來控制方塊的四種旋轉(zhuǎn)狀態(tài)。定義一個(gè)4x4方陣,共16個(gè)小格。用“0”和“1”來表示每個(gè)方

87、格是繪制新顏色還是保留底色。每得到一個(gè)新方塊,都是隨機(jī)從七種形態(tài)的方塊中選取一種。游戲定義了一個(gè)變量,代表新方塊的模型。比如定義int型數(shù)組STYLE代表28中方塊類型,7行4列,每個(gè)元素代表其中一種方塊。即0<=blockkindnum<=6,0=<blockstatusnum<=3。</p><p>  那么,當(dāng)方塊落下需要得到新方塊時(shí),只需隨機(jī)得到一對blockkindnum,blo

88、ckstatusnum值,然后再根據(jù)這個(gè)STYLE的值構(gòu)畫相應(yīng)的方塊。剩下的問題就是應(yīng)該怎么隨機(jī)到一對STYLE行列值。</p><p>  Java語言包中的Math類提供了一個(gè)生成隨機(jī)數(shù)的方法random(),調(diào)用這個(gè)方法會產(chǎn)生一個(gè)在0-1之間的雙精度浮點(diǎn)數(shù)。所以每次要得到新方塊時(shí),只需調(diào)用一次這個(gè)方法,得到一個(gè)0-1的雙精度浮點(diǎn)數(shù),然后用該數(shù)乘以7,之后強(qiáng)轉(zhuǎn)成整型,即可得到1—7的整數(shù),用來控制行。用該數(shù)乘

89、以4,之后強(qiáng)轉(zhuǎn)成整型,即可得到1—4的整數(shù),用來控制列。</p><p>  由此可以組合出多種圖形定義然后用代碼實(shí)現(xiàn)下列功能:</p><p>  1>每次執(zhí)行首先為隨機(jī)數(shù)產(chǎn)生不同的初值。</p><p>  style=BlockOperation.STYLES[(int)(Math.random()*7)][(int)</p><p&

90、gt;  (Math.random() * 4)];</p><p>  2>隨機(jī)選取一個(gè)圖形,圖5-2隨機(jī)產(chǎn)生方塊圖具體描述用生成的隨機(jī)數(shù)控制產(chǎn)生的圖形。</p><p>  圖5-2 隨機(jī)產(chǎn)生方塊圖</p><p>  3>當(dāng)前圖形在其4*4網(wǎng)格中的位置信息。</p><p>  繪制4行4列的方塊預(yù)顯方格,隨機(jī)生成預(yù)顯示的方

91、塊樣式。本游戲用二維數(shù)組存儲方塊的28種樣式。</p><p>  public final static int[][] STYLES = {// 共28種狀態(tài)</p><p>  {0x0f00, 0x4444, 0x0f00, 0x4444}, // 長條型的四種狀態(tài)</p><p>  {0x04e0, 0x0464, 0x00e4, 0x04c4}, //

92、 'T'型的四種狀態(tài)</p><p>  {0x4620, 0x6c00, 0x4620, 0x6c00}, // 反'Z'型的四種狀態(tài)</p><p>  {0x2640, 0xc600, 0x2640, 0xc600}, // 'Z'型的四種狀態(tài)</p><p>  {0x6220, 0x1700, 0x2230,

93、 0x0740}, // '7'型的四種狀態(tài)</p><p>  {0x6440, 0x0e20, 0x44c0, 0x8e00}, // 反'7'型的四種狀態(tài)</p><p>  {0x0660, 0x0660, 0x0660, 0x0660}, // 方塊的四種狀態(tài)</p><p><b>  };</b>&

94、lt;/p><p>  以下為與數(shù)組相對應(yīng)的方塊樣式截圖。</p><p><b> ?、匍L條型的四種狀態(tài)</b></p><p>  圖5-3 長條型狀態(tài)截圖</p><p> ?、?#39;T'型的四種狀態(tài)</p><p>  圖5-4 'T'型狀態(tài)截圖</p>

95、<p> ?、鄯?#39;Z'型的四種狀態(tài)</p><p>  圖5-5 反'Z'型狀態(tài)截圖</p><p> ?、?#39;Z'型的四種狀態(tài)</p><p>  圖5-6 'Z'型狀態(tài)截圖</p><p> ?、?#39;7'型的四種狀態(tài)</p><p

96、>  圖5-7 '7'型狀態(tài)截圖</p><p> ?、薹?#39;7'型的四種狀態(tài)</p><p>  圖5-8 反'7'型狀態(tài)截圖</p><p><b>  ⑦方塊的四種狀態(tài)</b></p><p>  圖5-9 方塊狀態(tài)截圖</p><p> 

97、 5.2.3方塊移動、旋轉(zhuǎn)設(shè)計(jì)</p><p>  方塊的翻轉(zhuǎn)與移動比較容易實(shí)現(xiàn),方塊移動只需要改變方塊的橫坐標(biāo)或縱坐標(biāo),然后重新繪制方塊即可。方塊翻轉(zhuǎn)也只需要改變背景數(shù)組的值,重新繪制方塊即可。</p><p>  本游戲方塊下落時(shí),進(jìn)行動態(tài)繪制,實(shí)現(xiàn)Cloneable接口, 以指示 Object.clone() 方法可以合法地對該類實(shí)例進(jìn)行按字段復(fù)制。方塊的操作類BlockOperat

98、ion繼承Thread類,重寫run()方法,以實(shí)現(xiàn)方塊的動態(tài)正確下落。當(dāng)然,在線程中要判定方塊是處于moving狀態(tài)還是pausing狀態(tài)。</p><p>  public void run()</p><p><b>  {</b></p><p>  while (moving) //判定方塊是否在動態(tài)下落</p><

99、;p><b>  {</b></p><p><b>  try </b></p><p><b>  {</b></p><p>  sleep(betweenleveltime</p><p>  * (ErsBlocksGame.maxlevel - level +

100、 flatgene));</p><p>  } catch (InterruptedException ie)</p><p><b>  {</b></p><p>  ie.printStackTrace();</p><p><b>  }</b></p><p> 

101、 if (!pausing) //判定游戲是否處于暫停狀態(tài)</p><p>  moving = (moveTo(y + 1, x) && moving); 是在等待的100毫秒間,moving沒被改變</p><p><b>  }</b></p><p><b>  }</b></p>&

102、lt;p>  當(dāng)然,在游戲中還要判定方塊移動的邊界問題, 比如,一個(gè)方塊在它左邊正好差一個(gè)格子的空間才能夠翻轉(zhuǎn),但是它的右邊恰好有一個(gè)格子的空間,這種情況,如果方塊不能夠翻轉(zhuǎn),就不方便用戶操作,如果能夠翻轉(zhuǎn),就會發(fā)生越界,將已經(jīng)存在的方塊擠占掉。要想實(shí)現(xiàn)翻轉(zhuǎn)又不發(fā)生越界,那么,就應(yīng)該在方塊翻轉(zhuǎn)后把它往右邊移動一個(gè)格子,然后再繪制方塊,這樣,方塊就不會擠占掉其它已經(jīng)固定住的方塊了,以下解決越界問題。</p><p

103、><b>  1>方塊翻轉(zhuǎn)判定</b></p><p>  在兩種情況可能發(fā)生越界,一種是方塊落下去固定住以后,第二種是周圍的空間不允許它進(jìn)行翻轉(zhuǎn)。</p><p>  第一種情況只需要參考方塊落下去后不能夠再移動的判定即可。</p><p>  對于第二種情況,在每次方塊翻轉(zhuǎn)前,必須首先計(jì)算出方塊周圍的空間,如果空間允許則翻轉(zhuǎn)。否

104、則,不能翻轉(zhuǎn)。</p><p>  因?yàn)槠叻N方塊是不規(guī)則的,每種方塊要求的翻轉(zhuǎn)空間都是不一樣的,甚至是在它的不同翻轉(zhuǎn)狀態(tài)下,所要求的翻轉(zhuǎn)空間也是不一樣的,首先想到的自然就是為每一種方塊,方塊的每一種狀態(tài)都寫一個(gè)判定條件,但是這樣做未免過于麻煩。</p><p>  根據(jù)觀察,不難發(fā)現(xiàn),七種形態(tài)的方塊,長條形的方塊如果以橫條的形態(tài)下落,則只要能夠下落,就能翻轉(zhuǎn),如果以豎條的形態(tài)下落,那么它翻

105、轉(zhuǎn)后所處的位置必須要有4x1個(gè)格子的空間才能夠翻轉(zhuǎn)。對于田字形的方塊,只有能夠繼續(xù)下墜,就一定能夠翻轉(zhuǎn),所以田字型的方塊只要沒有落下,就一直能夠翻轉(zhuǎn)。而其它五種形態(tài)的方塊,又有一個(gè)共同點(diǎn),就是它們都有兩種翻轉(zhuǎn)狀態(tài)橫向占三個(gè)格子的空間,豎直方向占兩個(gè)空間,另外兩種翻轉(zhuǎn)狀態(tài)橫向占兩個(gè)格子的空間,豎直方向占三個(gè)格子空間,如果他們是以橫向占三個(gè)格子的狀態(tài)下落,那么只要能下落,就一定能夠翻轉(zhuǎn),如果是以橫向兩個(gè)格子的狀態(tài)下落,那么在翻轉(zhuǎn)后,周圍必須

106、要有3x2個(gè)格子的空間。</p><p>  所以,方塊翻轉(zhuǎn)的判定,要分三種情況,第一種情況是方塊落下去后不能翻轉(zhuǎn);第二種情況是對豎直狀態(tài)出現(xiàn)的長條形的方塊進(jìn)行翻轉(zhuǎn)判定;第三種情況是對除長條形和田字形之外的其它五種以橫向占兩個(gè)格子的狀態(tài)出現(xiàn)的方塊進(jìn)行翻轉(zhuǎn)判定。</p><p>  何種情況下方塊能夠翻轉(zhuǎn)的問題解決了,接下來,我們就應(yīng)該解決方塊翻轉(zhuǎn)后所處的位置的問題了,因?yàn)橹挥惺孪戎婪綁K翻

107、轉(zhuǎn)后所處的位置,才能夠?qū)δ莻€(gè)位置的空間范圍進(jìn)行判定,判定它是否能夠容納方塊。</p><p>  可以確定的是,無論方塊怎么翻轉(zhuǎn),都處在方塊數(shù)組中,也就是說方塊必定是在游戲地圖中某一4x4個(gè)格子的空間范圍內(nèi)。</p><p>  方塊數(shù)組在游戲主界面中的坐標(biāo)是確定的,不確定的是方塊翻轉(zhuǎn)后到底處在方塊數(shù)組的哪個(gè)位置,為了解決這個(gè)問題,我們可以限定方塊在方塊數(shù)組中的存儲原則是靠左、靠上,這樣,

108、無論翻轉(zhuǎn)怎么翻轉(zhuǎn),方塊數(shù)組中第一行和第一列都是有方塊的,這樣也就確定了方塊在方塊數(shù)組中的位置,也就可以得知方塊翻轉(zhuǎn)后在游戲地圖中的位置了。</p><p>  假定方塊數(shù)組的橫縱坐標(biāo)是x和y,那么,這個(gè)位置就是,長條形的方塊翻轉(zhuǎn)后所處的那一行是游戲地圖的第y行,所占的列是第x到x+3列,長條形和田字形以外的五種方塊翻轉(zhuǎn)后的所占的行數(shù)是游戲地圖的第y和第y+1行,所占的列是第x到x+2列。</p>&

109、lt;p>  所以,如果以上空間有空格子,方塊就能夠翻轉(zhuǎn)。</p><p><b>  2>翻轉(zhuǎn)越界糾正</b></p><p>  只要方塊翻轉(zhuǎn)后所處的空間足夠,方塊就能夠翻轉(zhuǎn),但是,如果方塊翻轉(zhuǎn)后所處的空間不足夠,而在它的另一邊卻有足夠的空間呢?</p><p>  方塊在邊界處時(shí),翻轉(zhuǎn)后不僅可能翻出地圖外,還可能發(fā)生數(shù)組越界,

110、當(dāng)然,只需要將地圖數(shù)組定義得大一些,就能夠避免數(shù)組越界錯(cuò)誤,對于方塊越界,如果在它的另一邊有足夠空間,那么,就應(yīng)該把方塊往另一個(gè)方向移動適當(dāng)?shù)膯挝唬m正方塊越界錯(cuò)誤。如圖5-10方塊翻轉(zhuǎn)流程圖所示,方塊翻轉(zhuǎn)需要經(jīng)三次判定:是否已經(jīng)下落到底部、翻轉(zhuǎn)后是否有足夠空間、翻轉(zhuǎn)后是否越界。</p><p>  圖5-10 方塊翻轉(zhuǎn)處理流程圖</p><p>  玩家操作鍵盤實(shí)現(xiàn)方塊的移動、旋轉(zhuǎn),代碼

111、引進(jìn)ControlKeyListener類繼承KeyAdapter類進(jìn)行鍵盤監(jiān)聽功能的實(shí)現(xiàn)。KeyAdapter類繼承自O(shè)bject類,實(shí)現(xiàn)KeyListener接口,用來接收鍵盤事件的抽象適配器類。此類中的方法為空。此類存在的目的是方便創(chuàng)建偵聽器對象。擴(kuò)展此類即可創(chuàng)建 KeyEvent 偵聽器并重寫所需事件的方法,即是 ControlKeyListener類。使用ControlKeyListener可創(chuàng)建偵聽器對象,然后使用組件的 a

112、ddKeyListener方法向該組件注冊此偵聽器對象。當(dāng)按下、釋放或鍵入某個(gè)鍵時(shí),將調(diào)用該偵聽器對象中的相應(yīng)方法,并將 KeyEvent 傳遞給相應(yīng)的方法。</p><p><b>  實(shí)現(xiàn)代碼如下:</b></p><p>  private class ControlKeyListener extends KeyAdapter</p><p&

113、gt;<b>  {</b></p><p>  public void keyPressed(KeyEvent ke)</p><p><b>  {</b></p><p>  if (!game.isPlaying()) </p><p><b>  return;</b>

114、;</p><p>  ErsBlock block = game.getCurBlock();</p><p>  switch (ke.getKeyCode())</p><p><b>  {</b></p><p>  case KeyEvent.VK_DOWN: //處理下鍵</p><p&

115、gt;  block.moveDown();</p><p><b>  break;</b></p><p>  case KeyEvent.VK_LEFT: //處理左鍵</p><p>  block.moveLeft();</p><p><b>  break;</b></p>

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論