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

下載本文檔

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

文檔簡介

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

2、p><p>  學 號: 2010614140512 </p><p>  學生姓名: 賴添景 </p><p>  指導教師姓名: 陳晨 </p><p>  指導教師職稱: 講師 </p>&l

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

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

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.關鍵詞:游戲;俄羅斯方塊;軟件工程;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 相關技術分析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)設計7</b></p><p>  4.1 軟件運行和開發(fā)工具7</p><p>  4.2 系統(tǒng)功能設計7</p><p>  4.2.1

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

14、12</p><p>  5.2.2 預覽方塊模塊設計14</p><p>  5.2.3方塊移動、旋轉設計16</p><p>  5.3 控制面板模塊20</p><p>  5.3.1菜單欄模塊設計20</p><p>  5.3.2控制面板按鈕設計22</p><p><

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

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

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

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

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

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

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

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

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

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

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

26、實現(xiàn):介紹了系統(tǒng)的所有模塊和它的功能。</p><p>  第六章總結:回顧開發(fā)此游戲的艱辛過程與人生感悟。</p><p><b>  2 相關技術分析</b></p><p>  2.1 JAVA語言概述</p><p>  Java是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言[4],是由Sun Micros

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

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

29、是強制面向對象的。Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現(xiàn)機制(關鍵字為implements)。Java語言全面支持動態(tài)綁定,而C++語言只對虛函數(shù)使用動態(tài)綁定??傊琂ava語言是一個純的面向對象程序設計語言。</p><p>  Java語言是分布式的。Java語言支持Internet應用的開發(fā),在基本的Java應用編程接口中有

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

58、<p>  CPU:Intel(R) Core(TM) i3-2310M </p><p>  交互工具:鍵盤、鼠標</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)功能設計</p><p>  4.2.1 手工處理業(yè)務的基本流程</p><p>  本游戲的設計以娛樂為初衷,以益智為目的,在綜合研究以往俄羅斯方塊經典游戲功能的基礎上推陳出新,加之新的功能,賦以新的生機和活力。圖4-1為游戲基本流程圖具體闡述游戲的基本流程。</p><p><b>  運行說明:</b

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

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

62、有新方塊下落時,游戲會彈出“親!你輸了!”的對話框提示游戲結束。</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)基于游戲的各項功能來設計游戲的各個功能模塊。圖4-2為本游戲的系統(tǒng)功能模塊示意圖,如圖所示,本游戲主要有兩大模塊:游戲界面區(qū),游戲控制區(qū)。游戲界面區(qū)分顯示玩家可選操作、顯示玩家操作結果兩個部分。游戲控制區(qū)分開始、暫停、繼續(xù)、停止、重新開始、提高級數(shù)、降低級數(shù)、退出等功能模塊。

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

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

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

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

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

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

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

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

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

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

75、t;p><b>  畫布類的構造函數(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>  }//畫布類的構造函數(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 預覽方塊模塊設計</p><p>  方塊和數(shù)據(jù)信息是游戲中最基本的功能模塊。ShowBeforePanel這個類提供方塊預顯圖形 ,blockkindnum用來控制隨機產生的方塊編號,blockstatusnum用來控制方塊的四種旋轉狀態(tài)。定義一個4x4方陣,共16個小格。用“0”和“1”來表示每個方

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

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

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

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

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ù)組相對應的方塊樣式截圖。</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>  ③反'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方塊移動、旋轉設計</p><p>  方塊的翻轉與移動比較容易實現(xiàn),方塊移動只需要改變方塊的橫坐標或縱坐標,然后重新繪制方塊即可。方塊翻轉也只需要改變背景數(shù)組的值,重新繪制方塊即可。</p><p>  本游戲方塊下落時,進行動態(tài)繪制,實現(xiàn)Cloneable接口, 以指示 Object.clone() 方法可以合法地對該類實例進行按字段復制。方塊的操作類BlockOperat

98、ion繼承Thread類,重寫run()方法,以實現(xiàn)方塊的動態(tài)正確下落。當然,在線程中要判定方塊是處于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>  當然,在游戲中還要判定方塊移動的邊界問題, 比如,一個方塊在它左邊正好差一個格子的空間才能夠翻轉,但是它的右邊恰好有一個格子的空間,這種情況,如果方塊不能夠翻轉,就不方便用戶操作,如果能夠翻轉,就會發(fā)生越界,將已經存在的方塊擠占掉。要想實現(xiàn)翻轉又不發(fā)生越界,那么,就應該在方塊翻轉后把它往右邊移動一個格子,然后再繪制方塊,這樣,方塊就不會擠占掉其它已經固定住的方塊了,以下解決越界問題。</p><p

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

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

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

106、要有3x2個格子的空間。</p><p>  所以,方塊翻轉的判定,要分三種情況,第一種情況是方塊落下去后不能翻轉;第二種情況是對豎直狀態(tài)出現(xiàn)的長條形的方塊進行翻轉判定;第三種情況是對除長條形和田字形之外的其它五種以橫向占兩個格子的狀態(tài)出現(xiàn)的方塊進行翻轉判定。</p><p>  何種情況下方塊能夠翻轉的問題解決了,接下來,我們就應該解決方塊翻轉后所處的位置的問題了,因為只有事先知道方塊翻

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

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

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

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

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

112、ddKeyListener方法向該組件注冊此偵聽器對象。當按下、釋放或鍵入某個鍵時,將調用該偵聽器對象中的相應方法,并將 KeyEvent 傳遞給相應的方法。</p><p><b>  實現(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論