版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本科生畢業(yè)論文(設計)基于Java的俄羅斯方塊的設計與實現 姓名學號專業(yè)指導教師 2013年5月30日摘要俄羅斯方塊作為一款風靡全球的多樣化終端游戲,經久不衰。俄羅斯方塊簡單的基本游戲規(guī)則是旋轉、移動,游戲自動隨機輸出7種形狀的方塊,經旋轉后可形成28種形狀,方塊堆疊在一起,排列成完整的一行或多行消除得分,積分達到一定程度會自動提升級別。該游戲上手簡單、老少皆宜、家喻戶曉。本論文在詳盡分析傳統俄羅斯實現的基本原理、基本規(guī)則基礎上,更深一步地研究俄羅斯方塊的創(chuàng)新模式,在經典模式基礎上開發(fā)出等級可變的模式,以及進一步開發(fā)出顏色可變的模式,如隨意改變界面的背景色、前景色等,本文對以上功能給出了實現流
2、程、詳盡描述、和部分源代碼。論文闡述了該游戲的歷史、開發(fā)此游戲的意義和環(huán)境并根據軟件工程的相關知識,進行系統的需求分析、概要設計、詳細設計與實現、調試運行進行描述。此設計是在Microsoft Windows XP系統下,以Java為開發(fā)語言,在MyEclipse開發(fā)平臺上進行游戲的設計與實現。關鍵詞:游戲;俄羅斯方塊;軟件工程;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 系統的需求分析22
7、.1 系統需求22.2 接口控制23 系統的概要設計43.1 軟件運行和開發(fā)工具43.2 系統功能設計43.2.1 手工處理業(yè)務的基本流程43.2.2 基本流程的功能模塊54 系統的詳細設計與實現84.1 游戲主界面顯示模塊84.2 畫布、方塊顯示模塊94.2.1 背景畫布模塊設計104.2.2 預覽方塊模塊設計114.2.3 方塊移動、旋轉設計144.3 控制面板模塊184.3.1 菜單欄模塊設計184.3.2 控制面板按鈕設計205 系統的調試運行215.1 測試的意義及注意事項215.2 游戲代碼、算法的測試215.3 游戲界面菜單選項的功能測試225.4 按鍵事件的功能測試245.5
8、方塊堆砌與消行測試255.6 測試結果分析266 結 論27參考文獻28致 謝291 引 言俄羅斯方塊的影響已毋庸置疑, 當今世界的電腦、手機到處都有俄羅斯方塊的蹤跡,同時它更是每個游戲平臺的必備游戲,相關的復制品不勝枚舉。這個最早由莫斯科的數學家亞力克西·帕杰諾夫(Alexey Pajituov)所設計的作品,被公認為有史以來最暢銷的經典游戲,至今魅力不減當年。亞力克西·帕杰諾夫曾在俄羅斯科學研究院電腦中心工作, 當時他在Eletronica 60的舊型俄羅斯主機上進行開發(fā)工作, 這種機器不支持圖形界面, 和PC也不兼容。他嘗試將一種傳統的拼圖游戲Pentomino 改寫
9、成電腦游戲。Pentomino 一共有十二種形狀, 各以七個方塊組合而成。帕杰諾夫試著寫了一個程序, 旋轉并移動這十二種不同形狀的方塊, 讓它們拼成一大塊。后來幾經修改,發(fā)展成我們現在所熟悉的經典模式。俄羅斯方塊曾經引起的轟動和制造的經濟價值可以說是游戲史上無可比擬的。它看似簡單但卻變化無窮,令人愛不釋手。俄羅斯方塊游戲是隨計算機的發(fā)展而發(fā)展,并不斷推陳出各種新演變出的類似游戲, 深受廣大玩家喜愛。游戲模式有的簡單、有的復雜, 但其根本原理是都是對隨機出現的方塊進行組合, 來訓練玩家的反應能力、邏輯思維能力。游戲軟件, 大多數人都視其為神妙莫測, 高不可及的東西。一般來說,游戲軟件也確實具有很
10、高的技術難度, 隨著開發(fā)工具和軟件開發(fā)方法學的不斷發(fā)展, 自己動手開發(fā)游戲也并非難事。俄羅斯方塊游戲可以上說是一種古老而又有趣的游戲。游戲軟件不計其數, 網上也有很多關于游戲實現的復雜算法和設計, 其難度讓一般初學者望而卻步。本文利用數組作為方塊的數據結構,用顏色變化作為方塊下落和移動的標識,提出一種用Java語言實現游戲的簡易方法,在經典模式的基礎上實現等級可變,顏色可變等功能,初學者可仿此開發(fā)類似游戲, 并了解游戲軟件的設計與開發(fā)過程。俄羅斯方塊游戲以其益智、簡單又不乏挑戰(zhàn)、創(chuàng)意獨特的游戲模式,吸引了眾多游戲愛好者,而且老少皆宜。當今社會里,人們的工作壓力隨著生活節(jié)奏的快速提高而逐漸繁重,
11、隨之減少的是可以自由支配的休息時間,人們迫切地需要一種既簡單又節(jié)省時間的快速休閑方式。無可爭議,它是永恒的娛樂經典,且它的代碼簡單,界面簡潔,從最初發(fā)行時的單個游戲機到現在便捷的安裝到電腦、手機、MP4、電子詞典、商務通、IPAD、ITOUCH等便攜設備,俄羅斯方塊風靡世界,經久不衰。本次課題研究可以說是對游戲開發(fā)的一次嘗試,無論從技術還是社會意義上看都是很有價值的。 2 系統的需求分析對系統的需求分析就是用戶和開發(fā)人員在“系統必須做什么”這個問題上實現相互理解,達到共識,從而形成雙方認可的軟件產品的需求規(guī)格。這樣有利于提高軟件開發(fā)過程中的能見度,便于對軟件開發(fā)過程的控制與管理,便于采用工程化
12、的模式開發(fā)軟件,從而達到提高軟件的質量,為開發(fā)人員、維護人員、管理人員之間的交流、協作提供便捷。作為工作成果的原始依據,系統的需求分析可以向潛在用戶傳遞軟件功能、性能的需求,使其能夠判斷該軟件是否符合自己的需求。2.1 系統需求系統隨機產生7中不同形狀的方塊,旋轉后有28種狀態(tài)。方塊自由下落,玩家通過鍵盤控制方塊的移動和旋轉,把方塊擺放在適當的位置。如果方塊落下時,有被方塊填滿的整行,則該行可消去。每消去一行,玩家得分增加10分,每滿100分,玩家等級增加一級。若由存在空格的方塊填滿整個窗口,則游戲宣告失敗。游戲功能需求如下:游戲界面需求:設計良好的游戲界面可以讓玩家充分感受到游戲帶來的娛樂性
13、,游戲的默認背景色是深綠色,主界面方塊默認用橘黃色,預顯方塊顏色默認為淡紫色。背景色、前景色對比鮮明,以達到讓玩家眼前一亮的感覺,并能在游戲達到高等級狀態(tài),方塊下落速度漸高的情況下使玩家能夠清楚的分辨出下落方塊的形狀,增加游戲的刺激性。游戲形狀需求:用數組作為存儲方塊28種狀態(tài)的數據結構,即長條形、Z字形、反Z形、田字形、7字形、反7形、T字型一共7種形狀的向4個方向的旋轉變形,各個方塊要能實現它的任意變形,可設為順時針變形或逆時針變形,一般為逆時針變形。方塊的可否翻轉需要加以判斷,以防止其翻轉越界。鍵盤處理事件需求:方塊下落時,可通過鍵盤方向鍵(上鍵、下鍵、左鍵、右鍵)或字母鍵I、K、J、L
14、對下落方塊進行向上(旋轉變形)、向下(加速下落)、向左移動、向右移動。鼠標處理事件需求:通過點擊菜單欄中相應的菜單項或控制面板內的按鈕,可以實現游戲的開始、結束、暫停、繼續(xù)、提高等級、降低等級,預顯方塊形狀的顯示,分數、等級的顯示,以及游戲幫助、顏色變換等功能。顯示需求:當方塊填滿一行時可以消行,剩余未填滿的行逐次向下移動并統計分數。當達到一定分數的時候,會增加相應的等級。當方塊充滿主界面的每一行,方塊不能再下落時,提示“Game Over”的字樣。非功能性需求:本系統非功能性需求包括游戲主界面左上角顯示圖標需求、窗口尺寸可調整性需求、游戲運行時主界面彈出位置居中需求等。2.2 接口控制本游戲
15、通過鍵盤和鼠標進行操作,在Windows的操作系統下,利用鍵盤的按鍵對方塊進行移動、變形,要使用到鍵盤的接口事件。游戲使用鼠標對游戲進行全程控制,如游戲的開始、暫停、繼續(xù)、查看游戲幫助、更改界面顏色、更改游戲等級等,通過對鼠標單擊、按鍵添加監(jiān)聽事件,編輯相應代碼來實現相應功能。3 系統的概要設計3.1 軟件運行和開發(fā)工具操作系統:Microsoft Windows XP Professional Service Pack 3內存:2G硬盤:320GCPU:賽揚2.8交互工具:鍵盤、鼠標顯示器:VGA顯示器JDK版本:Eclipse版本:MyEclipse 8.5 SDK-3.4-win323.
16、2 系統功能設計3.2.1 手工處理業(yè)務的基本流程本游戲的設計以娛樂為初衷,以益智為目的,在綜合研究以往俄羅斯方塊經典游戲功能的基礎上推陳出新,加之新的功能,賦以新的生機和活力。圖3-1為游戲基本流程圖具體闡述游戲的基本流程。運行說明:1>運行程序,點擊右側控制面板內的“開始”或“控制”菜單內的“開始”按鈕開始游戲。2>使用上、下、左、右鍵或I、K、J、L鍵控制方塊的變形、下落、向左和向右移動。3>方塊滿行消除,分數自動增加,分數每滿100等級自動增加一級。4>等級增加、方塊下落速度增加,按右側控制面板或“游戲”菜單內的“提高等級”、“降低等級”按鈕,來手動改變游戲等級
17、。也可點擊“顏色”菜單內的選項,更改前景色、背景色。5>按右側控制面板或“控制”菜單內的“暫停”可以控制游戲暫停,然后按“繼續(xù)”可以控制游戲繼續(xù)上次游戲。按“停止”按鈕,游戲會徹底停止正在進行的當局游戲,再按“開始”或“控制”菜單內的“重新開始”會開始新游戲。6>當方塊占滿整個窗口,不能再有新方塊下落時,游戲會彈出“Game Over”的對話框提示游戲結束。圖3-1 游戲基本流程圖3.2.2 基本流程的功能模塊本系統基于游戲的各項功能來設計游戲的各個功能模塊。圖3-2為本游戲的系統功能模塊示意圖,如圖所示,本游戲主要有兩大模塊:游戲界面區(qū),游戲控制區(qū)。游戲界面區(qū)分顯示玩家可選操作、
18、顯示玩家操作結果兩個部分。游戲控制區(qū)分更改顏色、開始、暫停、繼續(xù)、停止、重新開始、提高等級、降低等級、退出等功能模塊。圖3-2 系統功能模塊示意圖圖3-3為游戲界面區(qū)模塊設計示意圖,如圖所示,游戲界面區(qū)模塊可細分為闖進新游戲界面、處理玩家操作、顯示玩家操作結果三個功能模塊。圖3-3 界面模塊示意圖圖2-4為游戲控制區(qū)設計示意圖,如圖所示,游戲控制區(qū)模塊分為開始、暫停、繼續(xù)、初始游戲級別設置、初始顏色設置、退出等功能模塊。 圖3-4 控制區(qū)模塊示意圖4 系統的詳細設計與實現Java是一種純面向對象(Object-Oriented)的程序語言,它的諸多優(yōu)點在此就不作詳細論述了。從面向對象的觀念出發(fā)
19、,本程序主要可分為以下幾個模塊:l 游戲主界面顯示模塊l 方塊及數據顯示模塊l 方塊移動控制模塊l 游戲界面顏色控制模塊l 游戲進度、等級控制模塊分析對象的技巧在于它的功能的擴展性及維護效率。試想,如果因為外部環(huán)境或者用戶需求的變化需要對程序進行功能擴展或者維護,就要對代碼作大幅度的更動甚至重寫,這樣就失去了面向對象的優(yōu)勢,所以在本程序分析時將獨立性高的模塊作為一個對象,以提高程序的可擴展性和可維護性。以下該游戲中類的設計:ControlMainGame類:繼承自JFrame類,作為游戲的主類,負責對游戲的主體全局進行控制,連接與指揮各個類的樞紐。 ControlPanel類:繼承自JPane
20、l類,作為操作面板類,負責安放主游戲窗口,積分板,級別控制按鈕等窗口用以控制游戲進程。 ChangeBlockColor類:繼承自JPanel類,ChangeBlockColor線程類動態(tài)改變畫布類的方格顏色,畫布類通過檢查方格顏色來體現ChangeBlockColor方塊的移動情況與消去狀況。BlockPaint類:方格類,組成方塊的基本元素,主要表達方式為顏色。 BlockOperation類:繼承自Thread類,作為操控方塊的類,控制方塊的移動,下落以及變形。4.1 游戲主界面顯示模塊一個優(yōu)秀的軟件系統不僅體現在核心的功能的多樣性和強大上,如果使用者所面對的是枯燥的、陳舊的界面的話,那
21、么這個的軟件系統是不成功的,所以好的、精美的界面設計是極為重要的環(huán)節(jié)。為玩家設計制作布局合理、視覺效果良好的界面的重要性就不言而喻了。游戲主界面采用Swing組件開發(fā),并且向其注冊監(jiān)聽器,以實現各種控制功能,綜合游戲窗體的設計,其上至少需要注冊三個監(jiān)聽器,分別是動作監(jiān)聽器(ActionListener)、鍵盤監(jiān)聽器(KeyListener)、選項監(jiān)聽器(ItemListener)。根據初步設計,可以確定客戶端上所要用到的Swing組件對象有JFrame對象、JPanel對象,JLabel對象、JButton對象、JMenuBar對象、JMenu對象、JMenuItem對象、JTextField
22、對象、JTextArea對象、JDialog對象等,至少十個Swing組件對象。下圖4-1為游戲主界面截圖。圖4-1 游戲主界面截圖本游戲主界面設計的初始顏色搭配基于對比鮮明的原則,默認背景色為深綠色,左上角設置俄羅斯方塊圖標,得分初始值為0,等級初始值為1,最高分記錄初始值為0。游戲主窗體尺寸設置為(520,580),方塊移動范圍窗格由一個20行、12列的二維數組控制,且左上角圖標設置為方塊圖案,起標識作用。4.2 畫布、方塊顯示模塊本游戲中將畫布底色默認設計成深綠色,在方塊下落過程中,根據顏色的變化識別下落的方塊。4.2.1 背景畫布模塊設計該游戲的主背景畫布是一個20行、12列的二維數組
23、,方塊顯示是由相應顏色變化來標識,主窗體用顏色填充后可形成呈現出來背景樣式和方塊。本游戲用繼承自JPanel的ChangeBlockColor類控制背景畫布的顯示,用rows代表畫布的行數,cols代表畫布的列數,行數和列數決定著畫布擁有方格的數目。背景畫布實現代碼如下:/* ChangeBlockColor 類 畫布類的構造函數 rows int, 畫布的行數 cols int, 畫布的列數 行數和列數決定著畫布擁有方格的數目*/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);/ /畫布類的構造函數public ChangeBlockColor(int rows, int cols, Color backColor, Color frontColor) this(rows, cols);this.backColor = backColor;/背景色this.frontColor = frontColor;/前景色/覆蓋JComponent類的函數,畫組件/ g 圖形設備環(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 預覽方塊模塊設計方塊和數據信息是游戲中最基本的
27、功能模塊。ShowBeforePanel這個類提供方塊預顯圖形 ,blockkindnum用來控制隨機產生的方塊編號,blockstatusnum用來控制方塊的四種旋轉狀態(tài)。定義一個4x4方陣,共16個小格。用“0”和“1”來表示每個方格是繪制新顏色還是保留底色。每得到一個新方塊,都是隨機從七種形態(tài)的方塊中選取一種。游戲定義了一個變量,代表新方塊的模型。比如定義int型數組STYLE代表28中方塊類型,7行4列,每個元素代表其中一種方塊。即0<=blockkindnum<=6,0=<blockstatusnum<=3那么,當方塊落下需要得到新方塊時,只需隨機得到一對bl
28、ockkindnum,blockstatusnum值,然后再根據這個STYLE的值構畫相應的方塊。剩下的問題就是應該怎么隨機到一對STYLE行列值。Java語言包中的Math類提供了一個生成隨機數的方法random(),調用這個方法會產生一個在0-1之間的雙精度浮點數。所以每次要得到新方塊時,只需調用一次這個方法,得到一個0-1的雙精度浮點數,然后用該數乘以7,之后強轉成整型,即可得到17的整數,用來控制行。用該數乘以4,之后強轉成整型,即可得到14的整數,用來控制列。由此可以組合出多種圖形定義然后用代碼實現下列功能:1>每次執(zhí)行首先為隨機數產生不同的初值。style=BlockOper
29、ation.STYLES(int)(Math.random()*7)(int)(Math.random() * 4);圖4-2 隨機產生方塊圖2>隨機選取一個圖形,圖3-1隨機產生方塊圖具體描述用生成的隨機數控制產生的圖形。3>當前圖形在其4*4網格中的位置信息。繪制4行4列的方塊預顯方格,隨機生成預顯示的方塊樣式。本游戲用二維數組存儲方塊的28種樣式。public final static int STYLES = /分別對應對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);以下為與數組相對應的方塊樣式截圖。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 方塊移動、旋轉設計方塊的翻轉與移動比較容易實現,方塊移動只需要改變方塊的橫坐標或縱坐標,然后重新繪制方塊即可。方塊翻轉也只需要改變背景數組的值,重新繪制方塊即可。本游戲方塊下落時,進行動態(tài)繪制,實現Clonea
32、ble接口, 以指示 Object.clone() 方法可以合法地對該類實例進行按字段復制。方塊的操作類BlockOperation繼承Thread類,重寫run()方法,以實現方塊的動態(tài)正確下落。當然,在線程中要判定方塊是處于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沒被改變當然,在游戲中還要判定方塊移動的邊界問題, 比如,一個方塊在它左邊正好差一個格子的空間才能夠翻轉,但是它的右邊恰好有一個格子的空間,這種情況,如果方塊不能夠翻轉,就不方便用戶操作,如果能夠翻轉,就會發(fā)生越界,將已經存在的方塊擠占掉。要想實現翻轉又不發(fā)生越界,那么,就應該在方塊翻轉后把它往右邊移動一個格子
34、,然后再繪制方塊,這樣,方塊就不會擠占掉其它已經固定住的方塊了,以下解決越界問題。1>方塊翻轉判定在兩種情況可能發(fā)生越界,一種是方塊落下去固定住以后,第二種是周圍的空間不允許它進行翻轉。第一種情況只需要參考方塊落下去后不能夠再移動的判定即可。對于第二種情況,在每次方塊翻轉前,必須首先計算出方塊周圍的空間,如果空間允許則翻轉。否則,不能翻轉。因為七種方塊是不規(guī)則的,每種方塊要求的翻轉空間都是不一樣的,甚至是在它的不同翻轉狀態(tài)下,所要求的翻轉空間也是不一樣的,首先想到的自然就是為每一種方塊,方塊的每一種狀態(tài)都寫一個判定條件,但是這樣做未免過于麻煩。根據觀察,不難發(fā)現,七種形態(tài)的方塊,長條形的
35、方塊如果以橫條的形態(tài)下落,則只要能夠下落,就能翻轉,如果以豎條的形態(tài)下落,那么它翻轉后所處的位置必須要有4x1個格子的空間才能夠翻轉。對于田字形的方塊,只有能夠繼續(xù)下墜,就一定能夠翻轉,所以田字型的方塊只要沒有落下,就一直能夠翻轉。而其它五種形態(tài)的方塊,又有一個共同點,就是它們都有兩種翻轉狀態(tài)橫向占三個格子的空間,豎直方向占兩個空間,另外兩種翻轉狀態(tài)橫向占兩個格子的空間,豎直方向占三個格子空間,如果他們是以橫向占三個格子的狀態(tài)下落,那么只要能下落,就一定能夠翻轉,如果是以橫向兩個格子的狀態(tài)下落,那么在翻轉后,周圍必須要有3x2個格子的空間。所以,方塊翻轉的判定,要分三種情況,第一種情況是方塊落
36、下去后不能翻轉;第二種情況是對豎直狀態(tài)出現的長條形的方塊進行翻轉判定;第三種情況是對除長條形和田字形之外的其它五種以橫向占兩個格子的狀態(tài)出現的方塊進行翻轉判定。何種情況下方塊能夠翻轉的問題解決了,接下來,我們就應該解決方塊翻轉后所處的位置的問題了,因為只有事先知道方塊翻轉后所處的位置,才能夠對那個位置的空間范圍進行判定,判定它是否能夠容納方塊??梢源_定的是,無論方塊怎么翻轉,都處在方塊數組中,也就是說方塊必定是在游戲地圖中某一4x4個格子的空間范圍內。方塊數組在游戲主界面中的坐標是確定的,不確定的是方塊翻轉后到底處在方塊數組的哪個位置,為了解決這個問題,我們可以限定方塊在方塊數組中的存儲原則是
37、靠左、靠上,這樣,無論翻轉怎么翻轉,方塊數組中第一行和第一列都是有方塊的,這樣也就確定了方塊在方塊數組中的位置,也就可以得知方塊翻轉后在游戲地圖中的位置了。假定方塊數組的橫縱坐標是x和y,那么,這個位置就是,長條形的方塊翻轉后所處的那一行是游戲地圖的第y行,所占的列是第x到x+3列,長條形和田字形以外的五種方塊翻轉后的所占的行數是游戲地圖的第y和第y+1行,所占的列是第x到x+2列。所以,如果以上空間有空格子,方塊就能夠翻轉。2>翻轉越界糾正只要方塊翻轉后所處的空間足夠,方塊就能夠翻轉,但是,如果方塊翻轉后所處的空間不足夠,而在它的另一邊卻有足夠的空間呢?方塊在邊界處時,翻轉后不僅可能翻
38、出地圖外,還可能發(fā)生數組越界,當然,只需要將地圖數組定義得大一些,就能夠避免數組越界錯誤,對于方塊越界,如果在它的另一邊有足夠空間,那么,就應該把方塊往另一個方向移動適當的單位,糾正方塊越界錯誤。如圖4-10方塊翻轉流程圖所示,方塊翻轉需要經三次判定:是否已經下落到底部、翻轉后是否有足夠空間、翻轉后是否越界。4-10 方塊翻轉處理流程圖玩家操作鍵盤實現方塊的移動、旋轉,代碼引進ControlKeyListener類繼承KeyAdapter類進行鍵盤監(jiān)聽功能的實現。KeyAdapter類繼承自Object類,實現KeyListener接口,用來接收鍵盤事件的抽象適配器類。此類中的方法為空。此類存
39、在的目的是方便創(chuàng)建偵聽器對象。擴展此類即可創(chuàng)建 KeyEvent 偵聽器并重寫所需事件的方法,即是 ControlKeyListener類。使用ControlKeyListener可創(chuàng)建偵聽器對象,然后使用組件的 addKeyListener 方法向該組件注冊此偵聽器對象。當按下、釋放或鍵入某個鍵時,將調用該偵聽器對象中的相應方法,并將 KeyEvent 傳遞給相應的方法。實現代碼如下: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、菜單欄模塊設計菜單欄中有“游戲”、“背景”、“控制”、“幫助”四個菜單選項?!坝螒颉边x項又分“新游戲”、“提高等級”、“降低等級”、“退出”四個選項?!氨尘啊边x項又分“前景色”、“背景色”,下分若干種顏色?!翱刂啤边x項分“開始”、“暫?!薄ⅰ爸匦麻_始”、“停止”?!皫椭边x項分“游戲幫助”、“關于”。相關截圖如圖4-11、圖4-12、圖4-13、圖4-14所示。 4-11 菜單欄“游戲”選項 4-12 菜單欄“背景”選項 4-13 菜單欄“控制”選項 4-14 菜單欄“幫助”選項1>“新游戲”的按鈕功能為實現游戲畫布的重新繪制,類似reset的功能。該按鈕的監(jiān)聽實現代碼如下:/"
42、;新游戲"按鈕添加監(jiān)聽miNewGame.addActionListener(new ActionListener() public void actionPerformed(ActionEvent ae) /停止游戲stopGame();/讓游戲“復位”到初始狀態(tài)reset();/設置游戲難度setLevel(initlevel););2>“提高等級”、“降低等級”按鈕用來手動調節(jié)游戲的等級,從而改變方塊下落的速度。 “退出”按鈕控制游戲隨時退出,終止游戲。3>“背景”按鈕中的“前景色”、“背景色”又有“黑色”、“白色”、“紅色”、“藍色”等選項,根據選項可更改主界面和
43、預顯窗口的背景色以及方塊的顏色。玩家可根據個人喜好,更改游戲窗口顏色,方便,快捷。4>“控制”選項的“開始”子選項控制游戲的開始,點擊按鈕,方塊開始下落。5>“幫助”按鈕中“游戲幫助”選項,點擊可彈出對話框顯示游戲幫助信息,點擊6>“關于”按鈕顯示與游戲軟件本身相關信息,具體信息如圖所示: 4.3.2 控制面板按鈕設計本游戲控制面板中包含得分統計、等級統計、最高分記錄統計等字段,其中的TextField控件均由游戲本身統計給出,玩家不能私自編輯。本游戲的游戲規(guī)則為每消一行得10分,每增加100分上升一個等級,初始得分為0,初始等級為1,“最高分記錄”記錄游戲的目前最高分記錄。
44、以下給出得分、等級更新字段的代碼:/當一行被游戲者疊滿后,將此行清除,并為游戲者加分/ row int, 要清除的行,是由BlockPaintesGame類計算的/synchronized設置同步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 系統的測試運行5.1 測試的意義及注意事項軟件測試是軟件設計過程中極其重要的一個環(huán)節(jié),是保證軟件的質量的重要保障。測試的方法的好壞會直接影響到軟件的好壞,進行軟件測試可以找出其中的錯誤、不足并加以改進,從而得到一個高效、可靠的系統。軟件應從多角度進行測試和分析,這樣才能找出其中錯誤的地方。測試的時間最好找一些與設計系統無關的人員,或者分析人員。因為在開發(fā)軟件的時候,開發(fā)人員已經形成了自己的思維定勢
46、,在測試的時候始終受到這種思想的束縛,很難找出其中的錯誤而與設計無關的人員和那些分析人員很容易找出錯誤所在。在程序調試過程中一定要耐心仔細,一個細微的錯誤將會導致整個功能不能實現導致浪費很多的時間去修改。應在以下幾方面加以注意:1>語法錯誤語法錯誤是經常碰到的錯誤。例如,命令拼寫錯誤或傳遞給函數的參數不正確都將產生錯誤。語法錯誤可能導致不能繼續(xù)編寫代碼。 2>邏輯錯誤 邏輯錯誤通??赡苁菨撛诤碗y以檢測的。當有因鍵入錯誤或程序邏輯流程引起的邏輯錯誤,可能會成功運行,但產生的結果卻是錯的。例如,當本應使用小于符號比較數值,但卻使用了大于符號時,那么將返回不正確的結果。3>運行時錯
47、誤運行時錯誤是在執(zhí)行過程中指令試圖執(zhí)行不可能的動作而導致的,必須糾正運行時產生的錯誤,這樣才能保證軟件運行的可靠性。本游戲在開發(fā)過程中采用了多種有效措施進行測試以保證軟件質量,對本游戲進行了邊界處旋轉、方塊翻轉越界等方面的測試,極大的保證了軟件質量和出錯幾率。但是系統中可能還存在著一些其他的錯誤和缺陷,因此,游戲必須要經過反復的運行測試,盡最大量將bug減到最少。5.2 游戲代碼、算法的測試1>寫get()方法時需要有返回值,但是程序中沒有寫return語句,使程序在編譯時出現錯誤。解決方法是,在方法中加入return語句,返回相應的內容即可。2>使用隨機函數產生方塊時沒有給各個方
48、塊傳入參數,編譯不能通過。解決方法是,根據各個方塊的構造傳入相應的參數。3>寫T字形方塊各方格的默認位置時,將控制方塊位置的變量i,初始化為0,運行的結果是丁字形方塊默認成了豎形方塊。解決方法是,將變量i的初始化數值改為1,即可達到設計的效果。4>運行程序時,統計的分數只是每一次消除滿行后的分數,而以前的分數就會被覆蓋,沒有累計。解決方法是,將程序中的“score=”改為“score+=”,就可以使分數累加。5>算法流程的錯誤主要集中在如何檢測及消去方塊,還有如何在通關之后對分數的累加進行處理,是否升級的判定這些方面,經過與同學的討論以及參考資料,都最終得到了解決。5.3 游
49、戲界面菜單選項的功能測試1>“游戲”菜單測試點擊“游戲”à“新游戲”輸出:游戲重置結果:正常點擊“游戲”à“退出”輸出:游戲結束結果:正常點擊“游戲”à“提高等級”輸出:等級提高一級結果:正常點擊“游戲”à“降低等級”輸出:等級降低一級結果:正常2>點擊“背景”菜單測試點擊“背景”à“前景色”à“黑色”輸出:方塊顏色變成黑色結果:正常 點擊“背景”à“背景色”à“黑色”輸出:背景顏色變成黑色結果:正常3>“控制”菜單測試點擊“控制”à“開始”輸出:開始游戲,方塊開始下落結果:正常點擊“控
50、制”à“暫?!陛敵觯簳和S螒?,方塊停止下落結果:正常點擊“控制”à“重新開始”輸出:重新開始新游戲 結果:正常點擊“控制”à“停止”輸出:游戲停止 結果:正常4>“幫助”菜單測試點擊“幫助”à“游戲幫助”輸出:彈出對話框,提示游戲規(guī)則結果:正常圖5-1 游戲幫助菜單運行截圖點擊“幫助”à“關于”輸出:彈出對話框,提示游戲軟件版本相關信息結果:正常圖5-2 游戲關于菜單運行截圖5.4 按鍵事件的功能測試1>方塊移動測試游戲過程中,點擊“左、右、下”方向鍵輸出:方塊正常移動,不會移出邊界結果:正常2>方塊旋轉測試游戲過程中,點擊向上方向鍵輸出:方塊無邊界和障礙物阻擋的情況下可反轉結果:正常5.5 方塊堆砌與消行測試1>方塊堆砌測試 當方塊下落到最底面或與障礙物接觸時輸出:方塊成功堆砌在底部結果:正常2>游戲消行測試當出現滿行現象時輸出
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度電梯門套安裝與維護保養(yǎng)一體化合同4篇
- 2025年度儲罐租賃與租賃保證金管理協議4篇
- 2025版生態(tài)園區(qū)苗木種植與景觀設計服務合同4篇
- 2025年度出租車車輛更新換代采購合同3篇
- 智能機械政策法規(guī)研究-深度研究
- 藥店裝修工程質量保證2025年度合同3篇
- 媒介記憶與公眾認知-深度研究
- 二零二五年度二手車典當融資合作協議4篇
- 二零二五版農機設備租賃及租賃期滿續(xù)租協議4篇
- 2025年度汽車車身打蠟美容服務合同3篇
- 眼的解剖結構與生理功能課件
- 小學網管的工作總結
- 2024年銀行考試-興業(yè)銀行筆試參考題庫含答案
- 泵站運行管理現狀改善措施
- 2024屆武漢市部分學校中考一模數學試題含解析
- SYT 0447-2014《 埋地鋼制管道環(huán)氧煤瀝青防腐層技術標準》
- 浙教版七年級下冊科學全冊課件
- 弧度制及弧度制與角度制的換算
- 瓦楞紙箱計算公式測量方法
- DB32-T 4004-2021水質 17種全氟化合物的測定 高效液相色譜串聯質譜法-(高清現行)
- DB15T 2724-2022 羊糞污收集處理技術規(guī)范
評論
0/150
提交評論