基于Java的俄羅斯方塊的設(shè)計和實現(xiàn)畢業(yè)論文_第1頁
基于Java的俄羅斯方塊的設(shè)計和實現(xiàn)畢業(yè)論文_第2頁
基于Java的俄羅斯方塊的設(shè)計和實現(xiàn)畢業(yè)論文_第3頁
基于Java的俄羅斯方塊的設(shè)計和實現(xiàn)畢業(yè)論文_第4頁
基于Java的俄羅斯方塊的設(shè)計和實現(xiàn)畢業(yè)論文_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本科生畢業(yè)論文(設(shè)計)基于Java的俄羅斯方塊的設(shè)計與實現(xiàn) 姓名學(xué)號專業(yè)指導(dǎo)教師 2013年5月30日摘要俄羅斯方塊作為一款風(fēng)靡全球的多樣化終端游戲,經(jīng)久不衰。俄羅斯方塊簡單的基本游戲規(guī)則是旋轉(zhuǎn)、移動,游戲自動隨機輸出7種形狀的方塊,經(jīng)旋轉(zhuǎn)后可形成28種形狀,方塊堆疊在一起,排列成完整的一行或多行消除得分,積分達(dá)到一定程度會自動提升級別。該游戲上手簡單、老少皆宜、家喻戶曉。本論文在詳盡分析傳統(tǒng)俄羅斯實現(xiàn)的基本原理、基本規(guī)則基礎(chǔ)上,更深一步地研究俄羅斯方塊的創(chuàng)新模式,在經(jīng)典模式基礎(chǔ)上開發(fā)出等級可變的模式,以及進(jìn)一步開發(fā)出顏色可變的模式,如隨意改變界面的背景色、前景色等,本文對以上功能給出了實現(xiàn)流

2、程、詳盡描述、和部分源代碼。論文闡述了該游戲的歷史、開發(fā)此游戲的意義和環(huán)境并根據(jù)軟件工程的相關(guān)知識,進(jìn)行系統(tǒng)的需求分析、概要設(shè)計、詳細(xì)設(shè)計與實現(xiàn)、調(diào)試運行進(jìn)行描述。此設(shè)計是在Microsoft Windows XP系統(tǒng)下,以Java為開發(fā)語言,在MyEclipse開發(fā)平臺上進(jìn)行游戲的設(shè)計與實現(xiàn)。關(guān)鍵詞:游戲;俄羅斯方塊;軟件工程;MyEclipseAbstractTetris is a popular global diversification of terminal enduring game.Simple basic rules of the game is rotating, movi

3、ng, automatic random output of 7 kinds of shape square game. It forms 28 kinds of shape, after rotating cube stacked together, forming complete one or more lines to eliminate score. Its level automatically rises with the score. The game is easy for young and old, has become a household name. This pa

4、per not only give the detailed analysis of the traditional Tetris which based on the basic principle and simple rules but also develop the color variable model, such as random change the background color and foreground color and so on. Further more, in this paper, the above functions are given the i

5、mplementation process, the detailed description, and some source code.The paper expounds the history of the game, develops the meaning of the game and the environment of design. According to the relevant knowledge of software engineering, the author reports the demand analysis, outline design, detai

6、led design, planning and execution of the test. This design is under Microsoft Windows XP system, based on Java development language, the MyEclipse development platforms to carry on the design and implementation of the game. Key Words: Game, Tetris, Software engineering, MyEclipse目錄1 引 言12 系統(tǒng)的需求分析22

7、.1 系統(tǒng)需求22.2 接口控制23 系統(tǒng)的概要設(shè)計43.1 軟件運行和開發(fā)工具43.2 系統(tǒng)功能設(shè)計43.2.1 手工處理業(yè)務(wù)的基本流程43.2.2 基本流程的功能模塊54 系統(tǒng)的詳細(xì)設(shè)計與實現(xiàn)84.1 游戲主界面顯示模塊84.2 畫布、方塊顯示模塊94.2.1 背景畫布模塊設(shè)計104.2.2 預(yù)覽方塊模塊設(shè)計114.2.3 方塊移動、旋轉(zhuǎn)設(shè)計144.3 控制面板模塊184.3.1 菜單欄模塊設(shè)計184.3.2 控制面板按鈕設(shè)計205 系統(tǒng)的調(diào)試運行215.1 測試的意義及注意事項215.2 游戲代碼、算法的測試215.3 游戲界面菜單選項的功能測試225.4 按鍵事件的功能測試245.5

8、方塊堆砌與消行測試255.6 測試結(jié)果分析266 結(jié) 論27參考文獻(xiàn)28致 謝291 引 言俄羅斯方塊的影響已毋庸置疑, 當(dāng)今世界的電腦、手機到處都有俄羅斯方塊的蹤跡,同時它更是每個游戲平臺的必備游戲,相關(guān)的復(fù)制品不勝枚舉。這個最早由莫斯科的數(shù)學(xué)家亞力克西·帕杰諾夫(Alexey Pajituov)所設(shè)計的作品,被公認(rèn)為有史以來最暢銷的經(jīng)典游戲,至今魅力不減當(dāng)年。亞力克西·帕杰諾夫曾在俄羅斯科學(xué)研究院電腦中心工作, 當(dāng)時他在Eletronica 60的舊型俄羅斯主機上進(jìn)行開發(fā)工作, 這種機器不支持圖形界面, 和PC也不兼容。他嘗試將一種傳統(tǒng)的拼圖游戲Pentomino 改寫

9、成電腦游戲。Pentomino 一共有十二種形狀, 各以七個方塊組合而成。帕杰諾夫試著寫了一個程序, 旋轉(zhuǎn)并移動這十二種不同形狀的方塊, 讓它們拼成一大塊。后來幾經(jīng)修改,發(fā)展成我們現(xiàn)在所熟悉的經(jīng)典模式。俄羅斯方塊曾經(jīng)引起的轟動和制造的經(jīng)濟價值可以說是游戲史上無可比擬的。它看似簡單但卻變化無窮,令人愛不釋手。俄羅斯方塊游戲是隨計算機的發(fā)展而發(fā)展,并不斷推陳出各種新演變出的類似游戲, 深受廣大玩家喜愛。游戲模式有的簡單、有的復(fù)雜, 但其根本原理是都是對隨機出現(xiàn)的方塊進(jìn)行組合, 來訓(xùn)練玩家的反應(yīng)能力、邏輯思維能力。游戲軟件, 大多數(shù)人都視其為神妙莫測, 高不可及的東西。一般來說,游戲軟件也確實具有很

10、高的技術(shù)難度, 隨著開發(fā)工具和軟件開發(fā)方法學(xué)的不斷發(fā)展, 自己動手開發(fā)游戲也并非難事。俄羅斯方塊游戲可以上說是一種古老而又有趣的游戲。游戲軟件不計其數(shù), 網(wǎng)上也有很多關(guān)于游戲?qū)崿F(xiàn)的復(fù)雜算法和設(shè)計, 其難度讓一般初學(xué)者望而卻步。本文利用數(shù)組作為方塊的數(shù)據(jù)結(jié)構(gòu),用顏色變化作為方塊下落和移動的標(biāo)識,提出一種用Java語言實現(xiàn)游戲的簡易方法,在經(jīng)典模式的基礎(chǔ)上實現(xiàn)等級可變,顏色可變等功能,初學(xué)者可仿此開發(fā)類似游戲, 并了解游戲軟件的設(shè)計與開發(fā)過程。俄羅斯方塊游戲以其益智、簡單又不乏挑戰(zhàn)、創(chuàng)意獨特的游戲模式,吸引了眾多游戲愛好者,而且老少皆宜。當(dāng)今社會里,人們的工作壓力隨著生活節(jié)奏的快速提高而逐漸繁重,

11、隨之減少的是可以自由支配的休息時間,人們迫切地需要一種既簡單又節(jié)省時間的快速休閑方式。無可爭議,它是永恒的娛樂經(jīng)典,且它的代碼簡單,界面簡潔,從最初發(fā)行時的單個游戲機到現(xiàn)在便捷的安裝到電腦、手機、MP4、電子詞典、商務(wù)通、IPAD、ITOUCH等便攜設(shè)備,俄羅斯方塊風(fēng)靡世界,經(jīng)久不衰。本次課題研究可以說是對游戲開發(fā)的一次嘗試,無論從技術(shù)還是社會意義上看都是很有價值的。 2 系統(tǒng)的需求分析對系統(tǒng)的需求分析就是用戶和開發(fā)人員在“系統(tǒng)必須做什么”這個問題上實現(xiàn)相互理解,達(dá)到共識,從而形成雙方認(rèn)可的軟件產(chǎn)品的需求規(guī)格。這樣有利于提高軟件開發(fā)過程中的能見度,便于對軟件開發(fā)過程的控制與管理,便于采用工程化

12、的模式開發(fā)軟件,從而達(dá)到提高軟件的質(zhì)量,為開發(fā)人員、維護人員、管理人員之間的交流、協(xié)作提供便捷。作為工作成果的原始依據(jù),系統(tǒng)的需求分析可以向潛在用戶傳遞軟件功能、性能的需求,使其能夠判斷該軟件是否符合自己的需求。2.1 系統(tǒng)需求系統(tǒng)隨機產(chǎn)生7中不同形狀的方塊,旋轉(zhuǎn)后有28種狀態(tài)。方塊自由下落,玩家通過鍵盤控制方塊的移動和旋轉(zhuǎn),把方塊擺放在適當(dāng)?shù)奈恢?。如果方塊落下時,有被方塊填滿的整行,則該行可消去。每消去一行,玩家得分增加10分,每滿100分,玩家等級增加一級。若由存在空格的方塊填滿整個窗口,則游戲宣告失敗。游戲功能需求如下:游戲界面需求:設(shè)計良好的游戲界面可以讓玩家充分感受到游戲帶來的娛樂性

13、,游戲的默認(rèn)背景色是深綠色,主界面方塊默認(rèn)用橘黃色,預(yù)顯方塊顏色默認(rèn)為淡紫色。背景色、前景色對比鮮明,以達(dá)到讓玩家眼前一亮的感覺,并能在游戲達(dá)到高等級狀態(tài),方塊下落速度漸高的情況下使玩家能夠清楚的分辨出下落方塊的形狀,增加游戲的刺激性。游戲形狀需求:用數(shù)組作為存儲方塊28種狀態(tài)的數(shù)據(jù)結(jié)構(gòu),即長條形、Z字形、反Z形、田字形、7字形、反7形、T字型一共7種形狀的向4個方向的旋轉(zhuǎn)變形,各個方塊要能實現(xiàn)它的任意變形,可設(shè)為順時針變形或逆時針變形,一般為逆時針變形。方塊的可否翻轉(zhuǎn)需要加以判斷,以防止其翻轉(zhuǎn)越界。鍵盤處理事件需求:方塊下落時,可通過鍵盤方向鍵(上鍵、下鍵、左鍵、右鍵)或字母鍵I、K、J、L

14、對下落方塊進(jìn)行向上(旋轉(zhuǎn)變形)、向下(加速下落)、向左移動、向右移動。鼠標(biāo)處理事件需求:通過點擊菜單欄中相應(yīng)的菜單項或控制面板內(nèi)的按鈕,可以實現(xiàn)游戲的開始、結(jié)束、暫停、繼續(xù)、提高等級、降低等級,預(yù)顯方塊形狀的顯示,分?jǐn)?shù)、等級的顯示,以及游戲幫助、顏色變換等功能。顯示需求:當(dāng)方塊填滿一行時可以消行,剩余未填滿的行逐次向下移動并統(tǒng)計分?jǐn)?shù)。當(dāng)達(dá)到一定分?jǐn)?shù)的時候,會增加相應(yīng)的等級。當(dāng)方塊充滿主界面的每一行,方塊不能再下落時,提示“Game Over”的字樣。非功能性需求:本系統(tǒng)非功能性需求包括游戲主界面左上角顯示圖標(biāo)需求、窗口尺寸可調(diào)整性需求、游戲運行時主界面彈出位置居中需求等。2.2 接口控制本游戲

15、通過鍵盤和鼠標(biāo)進(jìn)行操作,在Windows的操作系統(tǒng)下,利用鍵盤的按鍵對方塊進(jìn)行移動、變形,要使用到鍵盤的接口事件。游戲使用鼠標(biāo)對游戲進(jìn)行全程控制,如游戲的開始、暫停、繼續(xù)、查看游戲幫助、更改界面顏色、更改游戲等級等,通過對鼠標(biāo)單擊、按鍵添加監(jiān)聽事件,編輯相應(yīng)代碼來實現(xiàn)相應(yīng)功能。3 系統(tǒng)的概要設(shè)計3.1 軟件運行和開發(fā)工具操作系統(tǒng):Microsoft Windows XP Professional Service Pack 3內(nèi)存:2G硬盤:320GCPU:賽揚2.8交互工具:鍵盤、鼠標(biāo)顯示器:VGA顯示器JDK版本:Eclipse版本:MyEclipse 8.5 SDK-3.4-win323.

16、2 系統(tǒng)功能設(shè)計3.2.1 手工處理業(yè)務(wù)的基本流程本游戲的設(shè)計以娛樂為初衷,以益智為目的,在綜合研究以往俄羅斯方塊經(jīng)典游戲功能的基礎(chǔ)上推陳出新,加之新的功能,賦以新的生機和活力。圖3-1為游戲基本流程圖具體闡述游戲的基本流程。運行說明:1>運行程序,點擊右側(cè)控制面板內(nèi)的“開始”或“控制”菜單內(nèi)的“開始”按鈕開始游戲。2>使用上、下、左、右鍵或I、K、J、L鍵控制方塊的變形、下落、向左和向右移動。3>方塊滿行消除,分?jǐn)?shù)自動增加,分?jǐn)?shù)每滿100等級自動增加一級。4>等級增加、方塊下落速度增加,按右側(cè)控制面板或“游戲”菜單內(nèi)的“提高等級”、“降低等級”按鈕,來手動改變游戲等級

17、。也可點擊“顏色”菜單內(nèi)的選項,更改前景色、背景色。5>按右側(cè)控制面板或“控制”菜單內(nèi)的“暫?!笨梢钥刂朴螒驎和?,然后按“繼續(xù)”可以控制游戲繼續(xù)上次游戲。按“停止”按鈕,游戲會徹底停止正在進(jìn)行的當(dāng)局游戲,再按“開始”或“控制”菜單內(nèi)的“重新開始”會開始新游戲。6>當(dāng)方塊占滿整個窗口,不能再有新方塊下落時,游戲會彈出“Game Over”的對話框提示游戲結(jié)束。圖3-1 游戲基本流程圖3.2.2 基本流程的功能模塊本系統(tǒng)基于游戲的各項功能來設(shè)計游戲的各個功能模塊。圖3-2為本游戲的系統(tǒng)功能模塊示意圖,如圖所示,本游戲主要有兩大模塊:游戲界面區(qū),游戲控制區(qū)。游戲界面區(qū)分顯示玩家可選操作、

18、顯示玩家操作結(jié)果兩個部分。游戲控制區(qū)分更改顏色、開始、暫停、繼續(xù)、停止、重新開始、提高等級、降低等級、退出等功能模塊。圖3-2 系統(tǒng)功能模塊示意圖圖3-3為游戲界面區(qū)模塊設(shè)計示意圖,如圖所示,游戲界面區(qū)模塊可細(xì)分為闖進(jìn)新游戲界面、處理玩家操作、顯示玩家操作結(jié)果三個功能模塊。圖3-3 界面模塊示意圖圖2-4為游戲控制區(qū)設(shè)計示意圖,如圖所示,游戲控制區(qū)模塊分為開始、暫停、繼續(xù)、初始游戲級別設(shè)置、初始顏色設(shè)置、退出等功能模塊。 圖3-4 控制區(qū)模塊示意圖4 系統(tǒng)的詳細(xì)設(shè)計與實現(xiàn)Java是一種純面向?qū)ο螅∣bject-Oriented)的程序語言,它的諸多優(yōu)點在此就不作詳細(xì)論述了。從面向?qū)ο蟮挠^念出發(fā)

19、,本程序主要可分為以下幾個模塊:l 游戲主界面顯示模塊l 方塊及數(shù)據(jù)顯示模塊l 方塊移動控制模塊l 游戲界面顏色控制模塊l 游戲進(jìn)度、等級控制模塊分析對象的技巧在于它的功能的擴展性及維護效率。試想,如果因為外部環(huán)境或者用戶需求的變化需要對程序進(jìn)行功能擴展或者維護,就要對代碼作大幅度的更動甚至重寫,這樣就失去了面向?qū)ο蟮膬?yōu)勢,所以在本程序分析時將獨立性高的模塊作為一個對象,以提高程序的可擴展性和可維護性。以下該游戲中類的設(shè)計:ControlMainGame類:繼承自JFrame類,作為游戲的主類,負(fù)責(zé)對游戲的主體全局進(jìn)行控制,連接與指揮各個類的樞紐。 ControlPanel類:繼承自JPane

20、l類,作為操作面板類,負(fù)責(zé)安放主游戲窗口,積分板,級別控制按鈕等窗口用以控制游戲進(jìn)程。 ChangeBlockColor類:繼承自JPanel類,ChangeBlockColor線程類動態(tài)改變畫布類的方格顏色,畫布類通過檢查方格顏色來體現(xiàn)ChangeBlockColor方塊的移動情況與消去狀況。BlockPaint類:方格類,組成方塊的基本元素,主要表達(dá)方式為顏色。 BlockOperation類:繼承自Thread類,作為操控方塊的類,控制方塊的移動,下落以及變形。4.1 游戲主界面顯示模塊一個優(yōu)秀的軟件系統(tǒng)不僅體現(xiàn)在核心的功能的多樣性和強大上,如果使用者所面對的是枯燥的、陳舊的界面的話,那

21、么這個的軟件系統(tǒng)是不成功的,所以好的、精美的界面設(shè)計是極為重要的環(huán)節(jié)。為玩家設(shè)計制作布局合理、視覺效果良好的界面的重要性就不言而喻了。游戲主界面采用Swing組件開發(fā),并且向其注冊監(jiān)聽器,以實現(xiàn)各種控制功能,綜合游戲窗體的設(shè)計,其上至少需要注冊三個監(jiān)聽器,分別是動作監(jiān)聽器(ActionListener)、鍵盤監(jiān)聽器(KeyListener)、選項監(jiān)聽器(ItemListener)。根據(jù)初步設(shè)計,可以確定客戶端上所要用到的Swing組件對象有JFrame對象、JPanel對象,JLabel對象、JButton對象、JMenuBar對象、JMenu對象、JMenuItem對象、JTextField

22、對象、JTextArea對象、JDialog對象等,至少十個Swing組件對象。下圖4-1為游戲主界面截圖。圖4-1 游戲主界面截圖本游戲主界面設(shè)計的初始顏色搭配基于對比鮮明的原則,默認(rèn)背景色為深綠色,左上角設(shè)置俄羅斯方塊圖標(biāo),得分初始值為0,等級初始值為1,最高分記錄初始值為0。游戲主窗體尺寸設(shè)置為(520,580),方塊移動范圍窗格由一個20行、12列的二維數(shù)組控制,且左上角圖標(biāo)設(shè)置為方塊圖案,起標(biāo)識作用。4.2 畫布、方塊顯示模塊本游戲中將畫布底色默認(rèn)設(shè)計成深綠色,在方塊下落過程中,根據(jù)顏色的變化識別下落的方塊。4.2.1 背景畫布模塊設(shè)計該游戲的主背景畫布是一個20行、12列的二維數(shù)組

23、,方塊顯示是由相應(yīng)顏色變化來標(biāo)識,主窗體用顏色填充后可形成呈現(xiàn)出來背景樣式和方塊。本游戲用繼承自JPanel的ChangeBlockColor類控制背景畫布的顯示,用rows代表畫布的行數(shù),cols代表畫布的列數(shù),行數(shù)和列數(shù)決定著畫布擁有方格的數(shù)目。背景畫布實現(xiàn)代碼如下:/* ChangeBlockColor 類 畫布類的構(gòu)造函數(shù) rows int, 畫布的行數(shù) cols int, 畫布的列數(shù) 行數(shù)和列數(shù)決定著畫布擁有方格的數(shù)目*/class ChangeBlockColor extends JPanel private Color backColor = new Color(0,51,0)

24、, frontColor = new Color(255,153,0);private int rows, cols, score = 0, scoreForLevelUpdate = 0;private BlockPaint boxes;private int boxWidth, boxHeight;public ChangeBlockColor(int rows, int cols)this.rows = rows;this.cols = cols;boxes = new BlockPaintrowscols;for (int i = 0; i < boxes.length; i+)

25、 for (int j = 0; j < boxesi.length; j+)boxesij = new BlockPaint(false);/ /畫布類的構(gòu)造函數(shù)public ChangeBlockColor(int rows, int cols, Color backColor, Color frontColor) this(rows, cols);this.backColor = backColor;/背景色this.frontColor = frontColor;/前景色/覆蓋JComponent類的函數(shù),畫組件/ g 圖形設(shè)備環(huán)境public void paintCompone

26、nt(Graphics g)super.paintComponent(g); g.setColor(frontColor);for (int i = 0; i < boxes.length; i+)for (int j = 0; j < boxesi.length; j+) g.setColor(boxesij.isColorBox() ? frontColor : backColor);g.fill3DRect(j * boxWidth, i * boxHeight, boxWidth, boxHeight, true);4.2.2 預(yù)覽方塊模塊設(shè)計方塊和數(shù)據(jù)信息是游戲中最基本的

27、功能模塊。ShowBeforePanel這個類提供方塊預(yù)顯圖形 ,blockkindnum用來控制隨機產(chǎn)生的方塊編號,blockstatusnum用來控制方塊的四種旋轉(zhuǎn)狀態(tài)。定義一個4x4方陣,共16個小格。用“0”和“1”來表示每個方格是繪制新顏色還是保留底色。每得到一個新方塊,都是隨機從七種形態(tài)的方塊中選取一種。游戲定義了一個變量,代表新方塊的模型。比如定義int型數(shù)組STYLE代表28中方塊類型,7行4列,每個元素代表其中一種方塊。即0<=blockkindnum<=6,0=<blockstatusnum<=3那么,當(dāng)方塊落下需要得到新方塊時,只需隨機得到一對bl

28、ockkindnum,blockstatusnum值,然后再根據(jù)這個STYLE的值構(gòu)畫相應(yīng)的方塊。剩下的問題就是應(yīng)該怎么隨機到一對STYLE行列值。Java語言包中的Math類提供了一個生成隨機數(shù)的方法random(),調(diào)用這個方法會產(chǎn)生一個在0-1之間的雙精度浮點數(shù)。所以每次要得到新方塊時,只需調(diào)用一次這個方法,得到一個0-1的雙精度浮點數(shù),然后用該數(shù)乘以7,之后強轉(zhuǎn)成整型,即可得到17的整數(shù),用來控制行。用該數(shù)乘以4,之后強轉(zhuǎn)成整型,即可得到14的整數(shù),用來控制列。由此可以組合出多種圖形定義然后用代碼實現(xiàn)下列功能:1>每次執(zhí)行首先為隨機數(shù)產(chǎn)生不同的初值。style=BlockOper

29、ation.STYLES(int)(Math.random()*7)(int)(Math.random() * 4);圖4-2 隨機產(chǎn)生方塊圖2>隨機選取一個圖形,圖3-1隨機產(chǎn)生方塊圖具體描述用生成的隨機數(shù)控制產(chǎn)生的圖形。3>當(dāng)前圖形在其4*4網(wǎng)格中的位置信息。繪制4行4列的方塊預(yù)顯方格,隨機生成預(yù)顯示的方塊樣式。本游戲用二維數(shù)組存儲方塊的28種樣式。public final static int STYLES = /分別對應(yīng)對7種模型的28種狀態(tài)0x0f00, 0x4444, 0x0f00, 0x4444, / 長條型的四種狀態(tài)0x04e0, 0x0464, 0x00e4, 0

30、x04c4, / 'T'型的四種狀態(tài)0x4620, 0x6c00, 0x4620, 0x6c00, / 反'Z'型的四種狀態(tài)0x2640, 0xc600, 0x2640, 0xc600, / 'Z'型的四種狀態(tài)0x6220, 0x1700, 0x2230, 0x0740, / '7'型的四種狀態(tài)0x6440, 0x0e20, 0x44c0, 0x8e00, / 反'7'型的四種狀態(tài)0x0660, 0x0660, 0x0660, 0x0660, / 方塊的四種狀態(tài);以下為與數(shù)組相對應(yīng)的方塊樣式截圖。l 長條型的四種狀

31、態(tài) 圖4-3 長條型狀態(tài)截圖l 'T'型的四種狀態(tài)圖4-4 T型狀態(tài)截圖l 反'Z'型的四種狀態(tài)圖4-5 反Z型狀態(tài)截圖l 'Z'型的四種狀態(tài)圖4-6 Z型狀態(tài)截圖l '7'型的四種狀態(tài) 圖4-7 7型狀態(tài)截圖l 反'7'型的四種狀態(tài)圖4-8 反7型狀態(tài)截圖l 方塊的四種狀態(tài)圖4-9 方塊狀態(tài)截圖4.2.3 方塊移動、旋轉(zhuǎn)設(shè)計方塊的翻轉(zhuǎn)與移動比較容易實現(xiàn),方塊移動只需要改變方塊的橫坐標(biāo)或縱坐標(biāo),然后重新繪制方塊即可。方塊翻轉(zhuǎn)也只需要改變背景數(shù)組的值,重新繪制方塊即可。本游戲方塊下落時,進(jìn)行動態(tài)繪制,實現(xiàn)Clonea

32、ble接口, 以指示 Object.clone() 方法可以合法地對該類實例進(jìn)行按字段復(fù)制。方塊的操作類BlockOperation繼承Thread類,重寫run()方法,以實現(xiàn)方塊的動態(tài)正確下落。當(dāng)然,在線程中要判定方塊是處于moving狀態(tài)還是pausing狀態(tài)。public void run()/moving判定方塊是否在動態(tài)下落while (moving)try /betweenleveltime指示相鄰等級之間相差時間sleep(betweenleveltime * (ControlMainGame.maxlevel - level + flatgene); catch (Inter

33、ruptedException ie)ie.printStackTrace();/pausing判定游戲是否處于暫停狀態(tài)if (!pausing)moving = (moveTo(y + 1, x) && moving);/moving是在等待的100毫秒間,moving沒被改變當(dāng)然,在游戲中還要判定方塊移動的邊界問題, 比如,一個方塊在它左邊正好差一個格子的空間才能夠翻轉(zhuǎn),但是它的右邊恰好有一個格子的空間,這種情況,如果方塊不能夠翻轉(zhuǎn),就不方便用戶操作,如果能夠翻轉(zhuǎn),就會發(fā)生越界,將已經(jīng)存在的方塊擠占掉。要想實現(xiàn)翻轉(zhuǎn)又不發(fā)生越界,那么,就應(yīng)該在方塊翻轉(zhuǎn)后把它往右邊移動一個格子

34、,然后再繪制方塊,這樣,方塊就不會擠占掉其它已經(jīng)固定住的方塊了,以下解決越界問題。1>方塊翻轉(zhuǎn)判定在兩種情況可能發(fā)生越界,一種是方塊落下去固定住以后,第二種是周圍的空間不允許它進(jìn)行翻轉(zhuǎn)。第一種情況只需要參考方塊落下去后不能夠再移動的判定即可。對于第二種情況,在每次方塊翻轉(zhuǎn)前,必須首先計算出方塊周圍的空間,如果空間允許則翻轉(zhuǎn)。否則,不能翻轉(zhuǎn)。因為七種方塊是不規(guī)則的,每種方塊要求的翻轉(zhuǎn)空間都是不一樣的,甚至是在它的不同翻轉(zhuǎn)狀態(tài)下,所要求的翻轉(zhuǎn)空間也是不一樣的,首先想到的自然就是為每一種方塊,方塊的每一種狀態(tài)都寫一個判定條件,但是這樣做未免過于麻煩。根據(jù)觀察,不難發(fā)現(xiàn),七種形態(tài)的方塊,長條形的

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

36、下去后不能翻轉(zhuǎn);第二種情況是對豎直狀態(tài)出現(xiàn)的長條形的方塊進(jìn)行翻轉(zhuǎn)判定;第三種情況是對除長條形和田字形之外的其它五種以橫向占兩個格子的狀態(tài)出現(xiàn)的方塊進(jìn)行翻轉(zhuǎn)判定。何種情況下方塊能夠翻轉(zhuǎn)的問題解決了,接下來,我們就應(yīng)該解決方塊翻轉(zhuǎn)后所處的位置的問題了,因為只有事先知道方塊翻轉(zhuǎn)后所處的位置,才能夠?qū)δ莻€位置的空間范圍進(jìn)行判定,判定它是否能夠容納方塊。可以確定的是,無論方塊怎么翻轉(zhuǎn),都處在方塊數(shù)組中,也就是說方塊必定是在游戲地圖中某一4x4個格子的空間范圍內(nèi)。方塊數(shù)組在游戲主界面中的坐標(biāo)是確定的,不確定的是方塊翻轉(zhuǎn)后到底處在方塊數(shù)組的哪個位置,為了解決這個問題,我們可以限定方塊在方塊數(shù)組中的存儲原則是

37、靠左、靠上,這樣,無論翻轉(zhuǎn)怎么翻轉(zhuǎn),方塊數(shù)組中第一行和第一列都是有方塊的,這樣也就確定了方塊在方塊數(shù)組中的位置,也就可以得知方塊翻轉(zhuǎn)后在游戲地圖中的位置了。假定方塊數(shù)組的橫縱坐標(biāo)是x和y,那么,這個位置就是,長條形的方塊翻轉(zhuǎn)后所處的那一行是游戲地圖的第y行,所占的列是第x到x+3列,長條形和田字形以外的五種方塊翻轉(zhuǎn)后的所占的行數(shù)是游戲地圖的第y和第y+1行,所占的列是第x到x+2列。所以,如果以上空間有空格子,方塊就能夠翻轉(zhuǎn)。2>翻轉(zhuǎn)越界糾正只要方塊翻轉(zhuǎn)后所處的空間足夠,方塊就能夠翻轉(zhuǎn),但是,如果方塊翻轉(zhuǎn)后所處的空間不足夠,而在它的另一邊卻有足夠的空間呢?方塊在邊界處時,翻轉(zhuǎn)后不僅可能翻

38、出地圖外,還可能發(fā)生數(shù)組越界,當(dāng)然,只需要將地圖數(shù)組定義得大一些,就能夠避免數(shù)組越界錯誤,對于方塊越界,如果在它的另一邊有足夠空間,那么,就應(yīng)該把方塊往另一個方向移動適當(dāng)?shù)膯挝?,糾正方塊越界錯誤。如圖4-10方塊翻轉(zhuǎn)流程圖所示,方塊翻轉(zhuǎn)需要經(jīng)三次判定:是否已經(jīng)下落到底部、翻轉(zhuǎn)后是否有足夠空間、翻轉(zhuǎn)后是否越界。4-10 方塊翻轉(zhuǎn)處理流程圖玩家操作鍵盤實現(xiàn)方塊的移動、旋轉(zhuǎn),代碼引進(jìn)ControlKeyListener類繼承KeyAdapter類進(jìn)行鍵盤監(jiān)聽功能的實現(xiàn)。KeyAdapter類繼承自O(shè)bject類,實現(xiàn)KeyListener接口,用來接收鍵盤事件的抽象適配器類。此類中的方法為空。此類存

39、在的目的是方便創(chuàng)建偵聽器對象。擴展此類即可創(chuàng)建 KeyEvent 偵聽器并重寫所需事件的方法,即是 ControlKeyListener類。使用ControlKeyListener可創(chuàng)建偵聽器對象,然后使用組件的 addKeyListener 方法向該組件注冊此偵聽器對象。當(dāng)按下、釋放或鍵入某個鍵時,將調(diào)用該偵聽器對象中的相應(yīng)方法,并將 KeyEvent 傳遞給相應(yīng)的方法。實現(xiàn)代碼如下:private class ControlKeyListener extends KeyAdapterpublic void keyPressed(KeyEvent ke)if (!game.isPlaying

40、() return;BlockOperation blockope = game.getCurBlock();switch (ke.getKeyCode()case KeyEvent.VK_DOWN:blockope.moveDown();break;case KeyEvent.VK_LEFT:blockope.moveLeft();break;case KeyEvent.VK_RIGHT:blockope.moveRight();break;case KeyEvent.VK_UP:blockope.turnNext();break;default:break;4.3 控制面板模塊4.3.1

41、菜單欄模塊設(shè)計菜單欄中有“游戲”、“背景”、“控制”、“幫助”四個菜單選項。“游戲”選項又分“新游戲”、“提高等級”、“降低等級”、“退出”四個選項?!氨尘啊边x項又分“前景色”、“背景色”,下分若干種顏色?!翱刂啤边x項分“開始”、“暫?!薄ⅰ爸匦麻_始”、“停止”?!皫椭边x項分“游戲幫助”、“關(guān)于”。相關(guān)截圖如圖4-11、圖4-12、圖4-13、圖4-14所示。 4-11 菜單欄“游戲”選項 4-12 菜單欄“背景”選項 4-13 菜單欄“控制”選項 4-14 菜單欄“幫助”選項1>“新游戲”的按鈕功能為實現(xiàn)游戲畫布的重新繪制,類似reset的功能。該按鈕的監(jiān)聽實現(xiàn)代碼如下:/"

42、;新游戲"按鈕添加監(jiān)聽miNewGame.addActionListener(new ActionListener() public void actionPerformed(ActionEvent ae) /停止游戲stopGame();/讓游戲“復(fù)位”到初始狀態(tài)reset();/設(shè)置游戲難度setLevel(initlevel););2>“提高等級”、“降低等級”按鈕用來手動調(diào)節(jié)游戲的等級,從而改變方塊下落的速度。 “退出”按鈕控制游戲隨時退出,終止游戲。3>“背景”按鈕中的“前景色”、“背景色”又有“黑色”、“白色”、“紅色”、“藍(lán)色”等選項,根據(jù)選項可更改主界面和

43、預(yù)顯窗口的背景色以及方塊的顏色。玩家可根據(jù)個人喜好,更改游戲窗口顏色,方便,快捷。4>“控制”選項的“開始”子選項控制游戲的開始,點擊按鈕,方塊開始下落。5>“幫助”按鈕中“游戲幫助”選項,點擊可彈出對話框顯示游戲幫助信息,點擊6>“關(guān)于”按鈕顯示與游戲軟件本身相關(guān)信息,具體信息如圖所示: 4.3.2 控制面板按鈕設(shè)計本游戲控制面板中包含得分統(tǒng)計、等級統(tǒng)計、最高分記錄統(tǒng)計等字段,其中的TextField控件均由游戲本身統(tǒng)計給出,玩家不能私自編輯。本游戲的游戲規(guī)則為每消一行得10分,每增加100分上升一個等級,初始得分為0,初始等級為1,“最高分記錄”記錄游戲的目前最高分記錄。

44、以下給出得分、等級更新字段的代碼:/當(dāng)一行被游戲者疊滿后,將此行清除,并為游戲者加分/ row int, 要清除的行,是由BlockPaintesGame類計算的/synchronized設(shè)置同步public synchronized void removeLine(int row)/繪制方塊for (int i = row; i > 0; i-) for (int j = 0; j < cols; j+)boxesij = (BlockPaint) boxesi - 1j.clone();/ 每次消行加10分score += ControlMainGame.scoreplus;/

45、等級更新scoreForLevelUpdate += ControlMainGame.scoreplus;/重繪畫布repaint();控制面板中按鈕的功能在4.3.1中已給出代碼,在此不再贅述。5 系統(tǒng)的測試運行5.1 測試的意義及注意事項軟件測試是軟件設(shè)計過程中極其重要的一個環(huán)節(jié),是保證軟件的質(zhì)量的重要保障。測試的方法的好壞會直接影響到軟件的好壞,進(jìn)行軟件測試可以找出其中的錯誤、不足并加以改進(jìn),從而得到一個高效、可靠的系統(tǒng)。軟件應(yīng)從多角度進(jìn)行測試和分析,這樣才能找出其中錯誤的地方。測試的時間最好找一些與設(shè)計系統(tǒng)無關(guān)的人員,或者分析人員。因為在開發(fā)軟件的時候,開發(fā)人員已經(jīng)形成了自己的思維定勢

46、,在測試的時候始終受到這種思想的束縛,很難找出其中的錯誤而與設(shè)計無關(guān)的人員和那些分析人員很容易找出錯誤所在。在程序調(diào)試過程中一定要耐心仔細(xì),一個細(xì)微的錯誤將會導(dǎo)致整個功能不能實現(xiàn)導(dǎo)致浪費很多的時間去修改。應(yīng)在以下幾方面加以注意:1>語法錯誤語法錯誤是經(jīng)常碰到的錯誤。例如,命令拼寫錯誤或傳遞給函數(shù)的參數(shù)不正確都將產(chǎn)生錯誤。語法錯誤可能導(dǎo)致不能繼續(xù)編寫代碼。 2>邏輯錯誤 邏輯錯誤通??赡苁菨撛诤碗y以檢測的。當(dāng)有因鍵入錯誤或程序邏輯流程引起的邏輯錯誤,可能會成功運行,但產(chǎn)生的結(jié)果卻是錯的。例如,當(dāng)本應(yīng)使用小于符號比較數(shù)值,但卻使用了大于符號時,那么將返回不正確的結(jié)果。3>運行時錯

47、誤運行時錯誤是在執(zhí)行過程中指令試圖執(zhí)行不可能的動作而導(dǎo)致的,必須糾正運行時產(chǎn)生的錯誤,這樣才能保證軟件運行的可靠性。本游戲在開發(fā)過程中采用了多種有效措施進(jìn)行測試以保證軟件質(zhì)量,對本游戲進(jìn)行了邊界處旋轉(zhuǎn)、方塊翻轉(zhuǎn)越界等方面的測試,極大的保證了軟件質(zhì)量和出錯幾率。但是系統(tǒng)中可能還存在著一些其他的錯誤和缺陷,因此,游戲必須要經(jīng)過反復(fù)的運行測試,盡最大量將bug減到最少。5.2 游戲代碼、算法的測試1>寫get()方法時需要有返回值,但是程序中沒有寫return語句,使程序在編譯時出現(xiàn)錯誤。解決方法是,在方法中加入return語句,返回相應(yīng)的內(nèi)容即可。2>使用隨機函數(shù)產(chǎn)生方塊時沒有給各個方

48、塊傳入?yún)?shù),編譯不能通過。解決方法是,根據(jù)各個方塊的構(gòu)造傳入相應(yīng)的參數(shù)。3>寫T字形方塊各方格的默認(rèn)位置時,將控制方塊位置的變量i,初始化為0,運行的結(jié)果是丁字形方塊默認(rèn)成了豎形方塊。解決方法是,將變量i的初始化數(shù)值改為1,即可達(dá)到設(shè)計的效果。4>運行程序時,統(tǒng)計的分?jǐn)?shù)只是每一次消除滿行后的分?jǐn)?shù),而以前的分?jǐn)?shù)就會被覆蓋,沒有累計。解決方法是,將程序中的“score=”改為“score+=”,就可以使分?jǐn)?shù)累加。5>算法流程的錯誤主要集中在如何檢測及消去方塊,還有如何在通關(guān)之后對分?jǐn)?shù)的累加進(jìn)行處理,是否升級的判定這些方面,經(jīng)過與同學(xué)的討論以及參考資料,都最終得到了解決。5.3 游

49、戲界面菜單選項的功能測試1>“游戲”菜單測試點擊“游戲”à“新游戲”輸出:游戲重置結(jié)果:正常點擊“游戲”à“退出”輸出:游戲結(jié)束結(jié)果:正常點擊“游戲”à“提高等級”輸出:等級提高一級結(jié)果:正常點擊“游戲”à“降低等級”輸出:等級降低一級結(jié)果:正常2>點擊“背景”菜單測試點擊“背景”à“前景色”à“黑色”輸出:方塊顏色變成黑色結(jié)果:正常 點擊“背景”à“背景色”à“黑色”輸出:背景顏色變成黑色結(jié)果:正常3>“控制”菜單測試點擊“控制”à“開始”輸出:開始游戲,方塊開始下落結(jié)果:正常點擊“控

50、制”à“暫?!陛敵觯簳和S螒?,方塊停止下落結(jié)果:正常點擊“控制”à“重新開始”輸出:重新開始新游戲 結(jié)果:正常點擊“控制”à“停止”輸出:游戲停止 結(jié)果:正常4>“幫助”菜單測試點擊“幫助”à“游戲幫助”輸出:彈出對話框,提示游戲規(guī)則結(jié)果:正常圖5-1 游戲幫助菜單運行截圖點擊“幫助”à“關(guān)于”輸出:彈出對話框,提示游戲軟件版本相關(guān)信息結(jié)果:正常圖5-2 游戲關(guān)于菜單運行截圖5.4 按鍵事件的功能測試1>方塊移動測試游戲過程中,點擊“左、右、下”方向鍵輸出:方塊正常移動,不會移出邊界結(jié)果:正常2>方塊旋轉(zhuǎn)測試游戲過程中,點擊向上方向鍵輸出:方塊無邊界和障礙物阻擋的情況下可反轉(zhuǎn)結(jié)果:正常5.5 方塊堆砌與消行測試1>方塊堆砌測試 當(dāng)方塊下落到最底面或與障礙物接觸時輸出:方塊成功堆砌在底部結(jié)果:正常2>游戲消行測試當(dāng)出現(xiàn)滿行現(xiàn)象時輸出

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論