版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本科生畢業(yè)論文(設(shè)計(jì))基于Java的俄羅斯方塊的設(shè)計(jì)與實(shí)現(xiàn)姓名學(xué)號(hào)專(zhuān)業(yè)指導(dǎo)教師2013年5月30日摘要俄羅斯方塊作為一款風(fēng)靡全球的多樣化終端游戲,經(jīng)久不衰。俄羅斯方塊簡(jiǎn)單的基本游戲規(guī)則是旋轉(zhuǎn)、移動(dòng),游戲自動(dòng)隨機(jī)輸出7種形狀的方塊,經(jīng)旋轉(zhuǎn)后可形成28種形狀,方塊堆疊在一起,排列成完整的一行或多行消除得分,積分達(dá)到一定程度會(huì)自動(dòng)提升級(jí)別。該游戲上手簡(jiǎn)單、老少皆宜、家喻戶(hù)曉。本論文在詳盡分析傳統(tǒng)俄羅斯實(shí)現(xiàn)的基本原理、基本規(guī)則基礎(chǔ)上,更深一步地研究俄羅斯方塊的創(chuàng)新模式,在經(jīng)典模式基礎(chǔ)上開(kāi)發(fā)出等級(jí)可變的模式,以及進(jìn)一步開(kāi)發(fā)出顏色可變的模式,如隨意改變界面的背景色、前景色等,本文對(duì)以上功能給出了實(shí)現(xiàn)流程、
2、詳盡描述、和部分源代碼。論文闡述了該游戲的歷史、開(kāi)發(fā)此游戲的意義和環(huán)境并根據(jù)軟件工程的相關(guān)知識(shí),進(jìn)行系統(tǒng)的需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)、調(diào)試運(yùn)行進(jìn)行描述。此設(shè)計(jì)是在Microsoft Windows XP系統(tǒng)下,以Java為開(kāi)發(fā)語(yǔ)言,在MyEclipse開(kāi)發(fā)平臺(tái)上進(jìn)行游戲的設(shè)計(jì)與實(shí)現(xiàn)。關(guān)鍵詞:游戲;俄羅斯方塊;軟件工程;MyEclipseAbstractTetris is a popular global diversification of terminal enduring game.Simple basic rules of the game is rotating, moving
3、, 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 pape
4、r 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 imp
5、lementation 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, detaile
6、d 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.1系統(tǒng)
7、需求22.2接口控制23 系統(tǒng)的概要設(shè)計(jì)43.1 軟件運(yùn)行和開(kāi)發(fā)工具43.2 系統(tǒng)功能設(shè)計(jì)43.2.1 手工處理業(yè)務(wù)的基本流程43.2.2 基本流程的功能模塊54 系統(tǒng)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)84.1 游戲主界面顯示模塊84.2 畫(huà)布、方塊顯示模塊94.2.1 背景畫(huà)布模塊設(shè)計(jì)104.2.2 預(yù)覽方塊模塊設(shè)計(jì)114.2.3 方塊移動(dòng)、旋轉(zhuǎn)設(shè)計(jì)144.3 控制面板模塊184.3.1 菜單欄模塊設(shè)計(jì)184.3.2 控制面板按鈕設(shè)計(jì)205 系統(tǒng)的調(diào)試運(yùn)行215.1 測(cè)試的意義及注意事項(xiàng)215.2 游戲代碼、算法的測(cè)試215.3 游戲界面菜單選項(xiàng)的功能測(cè)試225.4 按鍵事件的功能測(cè)試245.5 方塊堆砌與消
8、行測(cè)試255.6 測(cè)試結(jié)果分析266 結(jié)論27參考文獻(xiàn)28致謝291 引 言俄羅斯方塊的影響已毋庸置疑, 當(dāng)今世界的電腦、手機(jī)到處都有俄羅斯方塊的蹤跡,同時(shí)它更是每個(gè)游戲平臺(tái)的必備游戲,相關(guān)的復(fù)制品不勝枚舉。這個(gè)最早由莫斯科的數(shù)學(xué)家亞力克西·帕杰諾夫(Alexey Pajituov)所設(shè)計(jì)的作品,被公認(rèn)為有史以來(lái)最暢銷(xiāo)的經(jīng)典游戲,至今魅力不減當(dāng)年。亞力克西·帕杰諾夫曾在俄羅斯科學(xué)研究院電腦中心工作, 當(dāng)時(shí)他在Eletronica 60的舊型俄羅斯主機(jī)上進(jìn)行開(kāi)發(fā)工作, 這種機(jī)器不支持圖形界面, 和PC也不兼容。他嘗試將一種傳統(tǒng)的拼圖游戲Pentomino 改寫(xiě)成電腦游戲。Pe
9、ntomino 一共有十二種形狀, 各以七個(gè)方塊組合而成。帕杰諾夫試著寫(xiě)了一個(gè)程序, 旋轉(zhuǎn)并移動(dòng)這十二種不同形狀的方塊, 讓它們拼成一大塊。后來(lái)幾經(jīng)修改,發(fā)展成我們現(xiàn)在所熟悉的經(jīng)典模式。俄羅斯方塊曾經(jīng)引起的轟動(dòng)和制造的經(jīng)濟(jì)價(jià)值可以說(shuō)是游戲史上無(wú)可比擬的。它看似簡(jiǎn)單但卻變化無(wú)窮,令人愛(ài)不釋手。俄羅斯方塊游戲是隨計(jì)算機(jī)的發(fā)展而發(fā)展,并不斷推陳出各種新演變出的類(lèi)似游戲, 深受廣大玩家喜愛(ài)。游戲模式有的簡(jiǎn)單、有的復(fù)雜, 但其根本原理是都是對(duì)隨機(jī)出現(xiàn)的方塊進(jìn)行組合, 來(lái)訓(xùn)練玩家的反應(yīng)能力、邏輯思維能力。游戲軟件, 大多數(shù)人都視其為神妙莫測(cè), 高不可及的東西。一般來(lái)說(shuō),游戲軟件也確實(shí)具有很高的技術(shù)難度,
10、隨著開(kāi)發(fā)工具和軟件開(kāi)發(fā)方法學(xué)的不斷發(fā)展, 自己動(dòng)手開(kāi)發(fā)游戲也并非難事。俄羅斯方塊游戲可以上說(shuō)是一種古老而又有趣的游戲。游戲軟件不計(jì)其數(shù), 網(wǎng)上也有很多關(guān)于游戲?qū)崿F(xiàn)的復(fù)雜算法和設(shè)計(jì), 其難度讓一般初學(xué)者望而卻步。本文利用數(shù)組作為方塊的數(shù)據(jù)結(jié)構(gòu),用顏色變化作為方塊下落和移動(dòng)的標(biāo)識(shí),提出一種用Java語(yǔ)言實(shí)現(xiàn)游戲的簡(jiǎn)易方法,在經(jīng)典模式的基礎(chǔ)上實(shí)現(xiàn)等級(jí)可變,顏色可變等功能,初學(xué)者可仿此開(kāi)發(fā)類(lèi)似游戲, 并了解游戲軟件的設(shè)計(jì)與開(kāi)發(fā)過(guò)程。俄羅斯方塊游戲以其益智、簡(jiǎn)單又不乏挑戰(zhàn)、創(chuàng)意獨(dú)特的游戲模式,吸引了眾多游戲愛(ài)好者,而且老少皆宜。當(dāng)今社會(huì)里,人們的工作壓力隨著生活節(jié)奏的快速提高而逐漸繁重,隨之減少的是可以
11、自由支配的休息時(shí)間,人們迫切地需要一種既簡(jiǎn)單又節(jié)省時(shí)間的快速休閑方式。無(wú)可爭(zhēng)議,它是永恒的娛樂(lè)經(jīng)典,且它的代碼簡(jiǎn)單,界面簡(jiǎn)潔,從最初發(fā)行時(shí)的單個(gè)游戲機(jī)到現(xiàn)在便捷的安裝到電腦、手機(jī)、MP4、電子詞典、商務(wù)通、IPAD、ITOUCH等便攜設(shè)備,俄羅斯方塊風(fēng)靡世界,經(jīng)久不衰。本次課題研究可以說(shuō)是對(duì)游戲開(kāi)發(fā)的一次嘗試,無(wú)論從技術(shù)還是社會(huì)意義上看都是很有價(jià)值的。 2 系統(tǒng)的需求分析對(duì)系統(tǒng)的需求分析就是用戶(hù)和開(kāi)發(fā)人員在“系統(tǒng)必須做什么”這個(gè)問(wèn)題上實(shí)現(xiàn)相互理解,達(dá)到共識(shí),從而形成雙方認(rèn)可的軟件產(chǎn)品的需求規(guī)格。這樣有利于提高軟件開(kāi)發(fā)過(guò)程中的能見(jiàn)度,便于對(duì)軟件開(kāi)發(fā)過(guò)程的控制與管理,便于采用工程化的模式開(kāi)發(fā)軟件,
12、從而達(dá)到提高軟件的質(zhì)量,為開(kāi)發(fā)人員、維護(hù)人員、管理人員之間的交流、協(xié)作提供便捷。作為工作成果的原始依據(jù),系統(tǒng)的需求分析可以向潛在用戶(hù)傳遞軟件功能、性能的需求,使其能夠判斷該軟件是否符合自己的需求。2.1 系統(tǒng)需求系統(tǒng)隨機(jī)產(chǎn)生7中不同形狀的方塊,旋轉(zhuǎn)后有28種狀態(tài)。方塊自由下落,玩家通過(guò)鍵盤(pán)控制方塊的移動(dòng)和旋轉(zhuǎn),把方塊擺放在適當(dāng)?shù)奈恢?。如果方塊落下時(shí),有被方塊填滿的整行,則該行可消去。每消去一行,玩家得分增加10分,每滿100分,玩家等級(jí)增加一級(jí)。若由存在空格的方塊填滿整個(gè)窗口,則游戲宣告失敗。游戲功能需求如下:游戲界面需求:設(shè)計(jì)良好的游戲界面可以讓玩家充分感受到游戲帶來(lái)的娛樂(lè)性,游戲的默認(rèn)背景
13、色是深綠色,主界面方塊默認(rèn)用橘黃色,預(yù)顯方塊顏色默認(rèn)為淡紫色。背景色、前景色對(duì)比鮮明,以達(dá)到讓玩家眼前一亮的感覺(jué),并能在游戲達(dá)到高等級(jí)狀態(tài),方塊下落速度漸高的情況下使玩家能夠清楚的分辨出下落方塊的形狀,增加游戲的刺激性。游戲形狀需求:用數(shù)組作為存儲(chǔ)方塊28種狀態(tài)的數(shù)據(jù)結(jié)構(gòu),即長(zhǎng)條形、Z字形、反Z形、田字形、7字形、反7形、T字型一共7種形狀的向4個(gè)方向的旋轉(zhuǎn)變形,各個(gè)方塊要能實(shí)現(xiàn)它的任意變形,可設(shè)為順時(shí)針變形或逆時(shí)針變形,一般為逆時(shí)針變形。方塊的可否翻轉(zhuǎn)需要加以判斷,以防止其翻轉(zhuǎn)越界。鍵盤(pán)處理事件需求:方塊下落時(shí),可通過(guò)鍵盤(pán)方向鍵(上鍵、下鍵、左鍵、右鍵)或字母鍵I、K、J、L對(duì)下落方塊進(jìn)行向
14、上(旋轉(zhuǎn)變形)、向下(加速下落)、向左移動(dòng)、向右移動(dòng)。鼠標(biāo)處理事件需求:通過(guò)點(diǎn)擊菜單欄中相應(yīng)的菜單項(xiàng)或控制面板內(nèi)的按鈕,可以實(shí)現(xiàn)游戲的開(kāi)始、結(jié)束、暫停、繼續(xù)、提高等級(jí)、降低等級(jí),預(yù)顯方塊形狀的顯示,分?jǐn)?shù)、等級(jí)的顯示,以及游戲幫助、顏色變換等功能。顯示需求:當(dāng)方塊填滿一行時(shí)可以消行,剩余未填滿的行逐次向下移動(dòng)并統(tǒng)計(jì)分?jǐn)?shù)。當(dāng)達(dá)到一定分?jǐn)?shù)的時(shí)候,會(huì)增加相應(yīng)的等級(jí)。當(dāng)方塊充滿主界面的每一行,方塊不能再下落時(shí),提示“Game Over”的字樣。非功能性需求:本系統(tǒng)非功能性需求包括游戲主界面左上角顯示圖標(biāo)需求、窗口尺寸可調(diào)整性需求、游戲運(yùn)行時(shí)主界面彈出位置居中需求等。2.2 接口控制本游戲通過(guò)鍵盤(pán)和鼠標(biāo)進(jìn)
15、行操作,在Windows的操作系統(tǒng)下,利用鍵盤(pán)的按鍵對(duì)方塊進(jìn)行移動(dòng)、變形,要使用到鍵盤(pán)的接口事件。游戲使用鼠標(biāo)對(duì)游戲進(jìn)行全程控制,如游戲的開(kāi)始、暫停、繼續(xù)、查看游戲幫助、更改界面顏色、更改游戲等級(jí)等,通過(guò)對(duì)鼠標(biāo)單擊、按鍵添加監(jiān)聽(tīng)事件,編輯相應(yīng)代碼來(lái)實(shí)現(xiàn)相應(yīng)功能。3 系統(tǒng)的概要設(shè)計(jì)3.1 軟件運(yùn)行和開(kāi)發(fā)工具操作系統(tǒng):Microsoft Windows XP Professional Service Pack 3內(nèi)存:2G硬盤(pán):320GCPU:賽揚(yáng)2.8交互工具:鍵盤(pán)、鼠標(biāo)顯示器:VGA顯示器JDK版本:Eclipse版本:MyEclipse 8.5 SDK-3.4-win323.2 系統(tǒng)功能設(shè)計(jì)
16、3.2.1 手工處理業(yè)務(wù)的基本流程本游戲的設(shè)計(jì)以?shī)蕵?lè)為初衷,以益智為目的,在綜合研究以往俄羅斯方塊經(jīng)典游戲功能的基礎(chǔ)上推陳出新,加之新的功能,賦以新的生機(jī)和活力。圖3-1為游戲基本流程圖具體闡述游戲的基本流程。運(yùn)行說(shuō)明:1>運(yùn)行程序,點(diǎn)擊右側(cè)控制面板內(nèi)的“開(kāi)始”或“控制”菜單內(nèi)的“開(kāi)始”按鈕開(kāi)始游戲。2>使用上、下、左、右鍵或I、K、J、L鍵控制方塊的變形、下落、向左和向右移動(dòng)。3>方塊滿行消除,分?jǐn)?shù)自動(dòng)增加,分?jǐn)?shù)每滿100等級(jí)自動(dòng)增加一級(jí)。4>等級(jí)增加、方塊下落速度增加,按右側(cè)控制面板或“游戲”菜單內(nèi)的“提高等級(jí)”、“降低等級(jí)”按鈕,來(lái)手動(dòng)改變游戲等級(jí)。也可點(diǎn)擊“顏色
17、”菜單內(nèi)的選項(xiàng),更改前景色、背景色。5>按右側(cè)控制面板或“控制”菜單內(nèi)的“暫停”可以控制游戲暫停,然后按“繼續(xù)”可以控制游戲繼續(xù)上次游戲。按“停止”按鈕,游戲會(huì)徹底停止正在進(jìn)行的當(dāng)局游戲,再按“開(kāi)始”或“控制”菜單內(nèi)的“重新開(kāi)始”會(huì)開(kāi)始新游戲。6>當(dāng)方塊占滿整個(gè)窗口,不能再有新方塊下落時(shí),游戲會(huì)彈出“Game Over”的對(duì)話框提示游戲結(jié)束。圖3-1 游戲基本流程圖3.2.2 基本流程的功能模塊本系統(tǒng)基于游戲的各項(xiàng)功能來(lái)設(shè)計(jì)游戲的各個(gè)功能模塊。圖3-2為本游戲的系統(tǒng)功能模塊示意圖,如圖所示,本游戲主要有兩大模塊:游戲界面區(qū),游戲控制區(qū)。游戲界面區(qū)分顯示玩家可選操作、顯示玩家操作結(jié)果
18、兩個(gè)部分。游戲控制區(qū)分更改顏色、開(kāi)始、暫停、繼續(xù)、停止、重新開(kāi)始、提高等級(jí)、降低等級(jí)、退出等功能模塊。圖3-2 系統(tǒng)功能模塊示意圖圖3-3為游戲界面區(qū)模塊設(shè)計(jì)示意圖,如圖所示,游戲界面區(qū)模塊可細(xì)分為闖進(jìn)新游戲界面、處理玩家操作、顯示玩家操作結(jié)果三個(gè)功能模塊。圖3-3 界面模塊示意圖圖2-4為游戲控制區(qū)設(shè)計(jì)示意圖,如圖所示,游戲控制區(qū)模塊分為開(kāi)始、暫停、繼續(xù)、初始游戲級(jí)別設(shè)置、初始顏色設(shè)置、退出等功能模塊。圖3-4 控制區(qū)模塊示意圖4 系統(tǒng)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)Java是一種純面向?qū)ο螅∣bject-Oriented)的程序語(yǔ)言,它的諸多優(yōu)點(diǎn)在此就不作詳細(xì)論述了。從面向?qū)ο蟮挠^念出發(fā),本程序主要可分為
19、以下幾個(gè)模塊:l 游戲主界面顯示模塊l 方塊及數(shù)據(jù)顯示模塊l 方塊移動(dòng)控制模塊l 游戲界面顏色控制模塊l 游戲進(jìn)度、等級(jí)控制模塊分析對(duì)象的技巧在于它的功能的擴(kuò)展性及維護(hù)效率。試想,如果因?yàn)橥獠凯h(huán)境或者用戶(hù)需求的變化需要對(duì)程序進(jìn)行功能擴(kuò)展或者維護(hù),就要對(duì)代碼作大幅度的更動(dòng)甚至重寫(xiě),這樣就失去了面向?qū)ο蟮膬?yōu)勢(shì),所以在本程序分析時(shí)將獨(dú)立性高的模塊作為一個(gè)對(duì)象,以提高程序的可擴(kuò)展性和可維護(hù)性。以下該游戲中類(lèi)的設(shè)計(jì):ControlMainGame類(lèi):繼承自JFrame類(lèi),作為游戲的主類(lèi),負(fù)責(zé)對(duì)游戲的主體全局進(jìn)行控制,連接與指揮各個(gè)類(lèi)的樞紐。 ControlPanel類(lèi):繼承自JPanel類(lèi),作為操作面板
20、類(lèi),負(fù)責(zé)安放主游戲窗口,積分板,級(jí)別控制按鈕等窗口用以控制游戲進(jìn)程。 ChangeBlockColor類(lèi):繼承自JPanel類(lèi),ChangeBlockColor線程類(lèi)動(dòng)態(tài)改變畫(huà)布類(lèi)的方格顏色,畫(huà)布類(lèi)通過(guò)檢查方格顏色來(lái)體現(xiàn)ChangeBlockColor方塊的移動(dòng)情況與消去狀況。BlockPaint類(lèi):方格類(lèi),組成方塊的基本元素,主要表達(dá)方式為顏色。 BlockOperation類(lèi):繼承自Thread類(lèi),作為操控方塊的類(lèi),控制方塊的移動(dòng),下落以及變形。4.1 游戲主界面顯示模塊一個(gè)優(yōu)秀的軟件系統(tǒng)不僅體現(xiàn)在核心的功能的多樣性和強(qiáng)大上,如果使用者所面對(duì)的是枯燥的、陳舊的界面的話,那么這個(gè)的軟件系統(tǒng)是
21、不成功的,所以好的、精美的界面設(shè)計(jì)是極為重要的環(huán)節(jié)。為玩家設(shè)計(jì)制作布局合理、視覺(jué)效果良好的界面的重要性就不言而喻了。游戲主界面采用Swing組件開(kāi)發(fā),并且向其注冊(cè)監(jiān)聽(tīng)器,以實(shí)現(xiàn)各種控制功能,綜合游戲窗體的設(shè)計(jì),其上至少需要注冊(cè)三個(gè)監(jiān)聽(tīng)器,分別是動(dòng)作監(jiān)聽(tīng)器(ActionListener)、鍵盤(pán)監(jiān)聽(tīng)器(KeyListener)、選項(xiàng)監(jiān)聽(tīng)器(ItemListener)。根據(jù)初步設(shè)計(jì),可以確定客戶(hù)端上所要用到的Swing組件對(duì)象有JFrame對(duì)象、JPanel對(duì)象,JLabel對(duì)象、JButton對(duì)象、JMenuBar對(duì)象、JMenu對(duì)象、JMenuItem對(duì)象、JTextField對(duì)象、JTextA
22、rea對(duì)象、JDialog對(duì)象等,至少十個(gè)Swing組件對(duì)象。下圖4-1為游戲主界面截圖。圖4-1 游戲主界面截圖本游戲主界面設(shè)計(jì)的初始顏色搭配基于對(duì)比鮮明的原則,默認(rèn)背景色為深綠色,左上角設(shè)置俄羅斯方塊圖標(biāo),得分初始值為0,等級(jí)初始值為1,最高分記錄初始值為0。游戲主窗體尺寸設(shè)置為(520,580),方塊移動(dòng)范圍窗格由一個(gè)20行、12列的二維數(shù)組控制,且左上角圖標(biāo)設(shè)置為方塊圖案,起標(biāo)識(shí)作用。4.2 畫(huà)布、方塊顯示模塊本游戲中將畫(huà)布底色默認(rèn)設(shè)計(jì)成深綠色,在方塊下落過(guò)程中,根據(jù)顏色的變化識(shí)別下落的方塊。4.2.1 背景畫(huà)布模塊設(shè)計(jì)該游戲的主背景畫(huà)布是一個(gè)20行、12列的二維數(shù)組,方塊顯示是由相應(yīng)
23、顏色變化來(lái)標(biāo)識(shí),主窗體用顏色填充后可形成呈現(xiàn)出來(lái)背景樣式和方塊。本游戲用繼承自JPanel的ChangeBlockColor類(lèi)控制背景畫(huà)布的顯示,用rows代表畫(huà)布的行數(shù),cols代表畫(huà)布的列數(shù),行數(shù)和列數(shù)決定著畫(huà)布擁有方格的數(shù)目。背景畫(huà)布實(shí)現(xiàn)代碼如下:/* ChangeBlockColor 類(lèi)畫(huà)布類(lèi)的構(gòu)造函數(shù) rows int, 畫(huà)布的行數(shù) cols int, 畫(huà)布的列數(shù)行數(shù)和列數(shù)決定著畫(huà)布擁有方格的數(shù)目*/class ChangeBlockColor extends JPanel private Color backColor = new Color(0,51,0) , frontColo
24、r = new Color(255,153,0);privateint rows, cols, score = 0, scoreForLevelUpdate = 0;private BlockPaint boxes;privateint 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+) for (int j =
25、 0; j < boxesi.length; j+)boxesij = new BlockPaint(false);/ /畫(huà)布類(lèi)的構(gòu)造函數(shù)public ChangeBlockColor(int rows, int cols, Color backColor, Color frontColor) this(rows, cols);this.backColor = backColor;/背景色this.frontColor = frontColor;/前景色/覆蓋JComponent類(lèi)的函數(shù),畫(huà)組件/ g 圖形設(shè)備環(huán)境publicvoid paintComponent(Graphics g)
26、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è)計(jì)方塊和數(shù)據(jù)信息是游戲中最基本的功能模塊。ShowBefore
27、Panel這個(gè)類(lèi)提供方塊預(yù)顯圖形 ,blockkindnum用來(lái)控制隨機(jī)產(chǎn)生的方塊編號(hào),blockstatusnum用來(lái)控制方塊的四種旋轉(zhuǎn)狀態(tài)。定義一個(gè)4x4方陣,共16個(gè)小格。用“0”和“1”來(lái)表示每個(gè)方格是繪制新顏色還是保留底色。每得到一個(gè)新方塊,都是隨機(jī)從七種形態(tài)的方塊中選取一種。游戲定義了一個(gè)變量,代表新方塊的模型。比如定義int型數(shù)組STYLE代表28中方塊類(lèi)型,7行4列,每個(gè)元素代表其中一種方塊。即0<=blockkindnum<=6,0=<blockstatusnum<=3那么,當(dāng)方塊落下需要得到新方塊時(shí),只需隨機(jī)得到一對(duì)blockkindnum,bloc
28、kstatusnum值,然后再根據(jù)這個(gè)STYLE的值構(gòu)畫(huà)相應(yīng)的方塊。剩下的問(wèn)題就是應(yīng)該怎么隨機(jī)到一對(duì)STYLE行列值。Java語(yǔ)言包中的Math類(lèi)提供了一個(gè)生成隨機(jī)數(shù)的方法random(),調(diào)用這個(gè)方法會(huì)產(chǎn)生一個(gè)在0-1之間的雙精度浮點(diǎn)數(shù)。所以每次要得到新方塊時(shí),只需調(diào)用一次這個(gè)方法,得到一個(gè)0-1的雙精度浮點(diǎn)數(shù),然后用該數(shù)乘以7,之后強(qiáng)轉(zhuǎn)成整型,即可得到17的整數(shù),用來(lái)控制行。用該數(shù)乘以4,之后強(qiáng)轉(zhuǎn)成整型,即可得到14的整數(shù),用來(lái)控制列。由此可以組合出多種圖形定義然后用代碼實(shí)現(xiàn)下列功能:1>每次執(zhí)行首先為隨機(jī)數(shù)產(chǎn)生不同的初值。style=BlockOperation.STYLES(in
29、t)(Math.random()*7)(int)(Math.random() * 4);圖4-2 隨機(jī)產(chǎn)生方塊圖2>隨機(jī)選取一個(gè)圖形,圖3-1隨機(jī)產(chǎn)生方塊圖具體描述用生成的隨機(jī)數(shù)控制產(chǎn)生的圖形。3>當(dāng)前圖形在其4*4網(wǎng)格中的位置信息。繪制4行4列的方塊預(yù)顯方格,隨機(jī)生成預(yù)顯示的方塊樣式。本游戲用二維數(shù)組存儲(chǔ)方塊的28種樣式。publicfinalstaticint STYLES = /分別對(duì)應(yīng)對(duì)7種模型的28種狀態(tài)0x0f00, 0x4444, 0x0f00, 0x4444, / 長(zhǎng)條型的四種狀態(tài)0x04e0, 0x0464, 0x00e4, 0x04c4, / 'T
30、9;型的四種狀態(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ù)組相對(duì)應(yīng)的方塊樣式截圖。l 長(zhǎng)條型的四種狀態(tài)圖4-3 長(zhǎng)條型狀態(tài)截圖l
31、9;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 方塊移動(dòng)、旋轉(zhuǎn)設(shè)計(jì)方塊的翻轉(zhuǎn)與移動(dòng)比較容易實(shí)現(xiàn),方塊移動(dòng)只需要改變方塊的橫坐標(biāo)或縱坐標(biāo),然后重新繪制方塊即可。方塊翻轉(zhuǎn)也只需要改變背景數(shù)組的值,重新繪制方塊即可。本游戲方塊下落時(shí),進(jìn)行動(dòng)態(tài)繪制,實(shí)現(xiàn)Cloneable接口, 以指示 Object.cl
32、one() 方法可以合法地對(duì)該類(lèi)實(shí)例進(jìn)行按字段復(fù)制。方塊的操作類(lèi)BlockOperation繼承Thread類(lèi),重寫(xiě)run()方法,以實(shí)現(xiàn)方塊的動(dòng)態(tài)正確下落。當(dāng)然,在線程中要判定方塊是處于moving狀態(tài)還是pausing狀態(tài)。publicvoid run()/moving判定方塊是否在動(dòng)態(tài)下落while (moving)try/betweenleveltime指示相鄰等級(jí)之間相差時(shí)間sleep(betweenleveltime * (ControlMainGame.maxlevel - level + flatgene); catch (InterruptedException ie)ie.
33、printStackTrace();/pausing判定游戲是否處于暫停狀態(tài)if (!pausing)moving = (moveTo(y + 1, x) && moving);/moving是在等待的100毫秒間,moving沒(méi)被改變當(dāng)然,在游戲中還要判定方塊移動(dòng)的邊界問(wèn)題, 比如,一個(gè)方塊在它左邊正好差一個(gè)格子的空間才能夠翻轉(zhuǎn),但是它的右邊恰好有一個(gè)格子的空間,這種情況,如果方塊不能夠翻轉(zhuǎn),就不方便用戶(hù)操作,如果能夠翻轉(zhuǎn),就會(huì)發(fā)生越界,將已經(jīng)存在的方塊擠占掉。要想實(shí)現(xiàn)翻轉(zhuǎn)又不發(fā)生越界,那么,就應(yīng)該在方塊翻轉(zhuǎn)后把它往右邊移動(dòng)一個(gè)格子,然后再繪制方塊,這樣,方塊就不會(huì)擠占掉其它
34、已經(jīng)固定住的方塊了,以下解決越界問(wèn)題。1>方塊翻轉(zhuǎn)判定在兩種情況可能發(fā)生越界,一種是方塊落下去固定住以后,第二種是周?chē)目臻g不允許它進(jìn)行翻轉(zhuǎn)。第一種情況只需要參考方塊落下去后不能夠再移動(dòng)的判定即可。對(duì)于第二種情況,在每次方塊翻轉(zhuǎn)前,必須首先計(jì)算出方塊周?chē)目臻g,如果空間允許則翻轉(zhuǎn)。否則,不能翻轉(zhuǎn)。因?yàn)槠叻N方塊是不規(guī)則的,每種方塊要求的翻轉(zhuǎn)空間都是不一樣的,甚至是在它的不同翻轉(zhuǎn)狀態(tài)下,所要求的翻轉(zhuǎn)空間也是不一樣的,首先想到的自然就是為每一種方塊,方塊的每一種狀態(tài)都寫(xiě)一個(gè)判定條件,但是這樣做未免過(guò)于麻煩。根據(jù)觀察,不難發(fā)現(xiàn),七種形態(tài)的方塊,長(zhǎng)條形的方塊如果以橫條的形態(tài)下落,則只要能夠下落,就
35、能翻轉(zhuǎn),如果以豎條的形態(tài)下落,那么它翻轉(zhuǎn)后所處的位置必須要有4x1個(gè)格子的空間才能夠翻轉(zhuǎn)。對(duì)于田字形的方塊,只有能夠繼續(xù)下墜,就一定能夠翻轉(zhuǎn),所以田字型的方塊只要沒(méi)有落下,就一直能夠翻轉(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)后,周?chē)仨氁?x2個(gè)格子的空間。所以,方塊翻轉(zhuǎn)的判定,要分三種情況,第一種情況是方塊落下去后不能翻轉(zhuǎn);第二種情況是對(duì)豎直狀態(tài)出現(xiàn)的
36、長(zhǎng)條形的方塊進(jìn)行翻轉(zhuǎn)判定;第三種情況是對(duì)除長(zhǎng)條形和田字形之外的其它五種以橫向占兩個(gè)格子的狀態(tài)出現(xiàn)的方塊進(jìn)行翻轉(zhuǎn)判定。何種情況下方塊能夠翻轉(zhuǎn)的問(wèn)題解決了,接下來(lái),我們就應(yīng)該解決方塊翻轉(zhuǎn)后所處的位置的問(wèn)題了,因?yàn)橹挥惺孪戎婪綁K翻轉(zhuǎn)后所處的位置,才能夠?qū)δ莻€(gè)位置的空間范圍進(jìn)行判定,判定它是否能夠容納方塊??梢源_定的是,無(wú)論方塊怎么翻轉(zhuǎn),都處在方塊數(shù)組中,也就是說(shuō)方塊必定是在游戲地圖中某一4x4個(gè)格子的空間范圍內(nèi)。方塊數(shù)組在游戲主界面中的坐標(biāo)是確定的,不確定的是方塊翻轉(zhuǎn)后到底處在方塊數(shù)組的哪個(gè)位置,為了解決這個(gè)問(wèn)題,我們可以限定方塊在方塊數(shù)組中的存儲(chǔ)原則是靠左、靠上,這樣,無(wú)論翻轉(zhuǎn)怎么翻轉(zhuǎn),方塊數(shù)組
37、中第一行和第一列都是有方塊的,這樣也就確定了方塊在方塊數(shù)組中的位置,也就可以得知方塊翻轉(zhuǎn)后在游戲地圖中的位置了。假定方塊數(shù)組的橫縱坐標(biāo)是x和y,那么,這個(gè)位置就是,長(zhǎng)條形的方塊翻轉(zhuǎn)后所處的那一行是游戲地圖的第y行,所占的列是第x到x+3列,長(zhǎng)條形和田字形以外的五種方塊翻轉(zhuǎn)后的所占的行數(shù)是游戲地圖的第y和第y+1行,所占的列是第x到x+2列。所以,如果以上空間有空格子,方塊就能夠翻轉(zhuǎn)。2>翻轉(zhuǎn)越界糾正只要方塊翻轉(zhuǎn)后所處的空間足夠,方塊就能夠翻轉(zhuǎn),但是,如果方塊翻轉(zhuǎn)后所處的空間不足夠,而在它的另一邊卻有足夠的空間呢?方塊在邊界處時(shí),翻轉(zhuǎn)后不僅可能翻出地圖外,還可能發(fā)生數(shù)組越界,當(dāng)然,只需要將
38、地圖數(shù)組定義得大一些,就能夠避免數(shù)組越界錯(cuò)誤,對(duì)于方塊越界,如果在它的另一邊有足夠空間,那么,就應(yīng)該把方塊往另一個(gè)方向移動(dòng)適當(dāng)?shù)膯挝?,糾正方塊越界錯(cuò)誤。如圖4-10方塊翻轉(zhuǎn)流程圖所示,方塊翻轉(zhuǎn)需要經(jīng)三次判定:是否已經(jīng)下落到底部、翻轉(zhuǎn)后是否有足夠空間、翻轉(zhuǎn)后是否越界。4-10 方塊翻轉(zhuǎn)處理流程圖玩家操作鍵盤(pán)實(shí)現(xiàn)方塊的移動(dòng)、旋轉(zhuǎn),代碼引進(jìn)ControlKeyListener類(lèi)繼承KeyAdapter類(lèi)進(jìn)行鍵盤(pán)監(jiān)聽(tīng)功能的實(shí)現(xiàn)。KeyAdapter類(lèi)繼承自O(shè)bject類(lèi),實(shí)現(xiàn)KeyListener接口,用來(lái)接收鍵盤(pán)事件的抽象適配器類(lèi)。此類(lèi)中的方法為空。此類(lèi)存在的目的是方便創(chuàng)建偵聽(tīng)器對(duì)象。擴(kuò)展此類(lèi)即可創(chuàng)
39、建 KeyEvent 偵聽(tīng)器并重寫(xiě)所需事件的方法,即是ControlKeyListener類(lèi)。使用ControlKeyListener可創(chuàng)建偵聽(tīng)器對(duì)象,然后使用組件的 addKeyListener 方法向該組件注冊(cè)此偵聽(tīng)器對(duì)象。當(dāng)按下、釋放或鍵入某個(gè)鍵時(shí),將調(diào)用該偵聽(tīng)器對(duì)象中的相應(yīng)方法,并將 KeyEvent 傳遞給相應(yīng)的方法。實(shí)現(xiàn)代碼如下:privateclass ControlKeyListener extends KeyAdapterpublicvoid keyPressed(KeyEvent ke)if (!game.isPlaying() return;BlockOperation
40、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 菜單欄模塊設(shè)計(jì)菜單欄中有“游戲”、“背景”、“控制
41、”、“幫助”四個(gè)菜單選項(xiàng)。“游戲”選項(xiàng)又分“新游戲”、“提高等級(jí)”、“降低等級(jí)”、“退出”四個(gè)選項(xiàng)?!氨尘啊边x項(xiàng)又分“前景色”、“背景色”,下分若干種顏色?!翱刂啤边x項(xiàng)分“開(kāi)始”、“暫停”、“重新開(kāi)始”、“停止”?!皫椭边x項(xiàng)分“游戲幫助”、“關(guān)于”。相關(guān)截圖如圖4-11、圖4-12、圖4-13、圖4-14所示。 4-11 菜單欄“游戲”選項(xiàng) 4-12 菜單欄“背景”選項(xiàng)4-13 菜單欄“控制”選項(xiàng) 4-14 菜單欄“幫助”選項(xiàng)1>“新游戲”的按鈕功能為實(shí)現(xiàn)游戲畫(huà)布的重新繪制,類(lèi)似reset的功能。該按鈕的監(jiān)聽(tīng)實(shí)現(xiàn)代碼如下:/"新游戲"按鈕添加監(jiān)聽(tīng)miNewGame.
42、addActionListener(new ActionListener()publicvoid actionPerformed(ActionEvent ae) /停止游戲stopGame();/讓游戲“復(fù)位”到初始狀態(tài)reset();/設(shè)置游戲難度setLevel(initlevel););2>“提高等級(jí)”、“降低等級(jí)”按鈕用來(lái)手動(dòng)調(diào)節(jié)游戲的等級(jí),從而改變方塊下落的速度。 “退出”按鈕控制游戲隨時(shí)退出,終止游戲。3>“背景”按鈕中的“前景色”、“背景色”又有“黑色”、“白色”、“紅色”、“藍(lán)色”等選項(xiàng),根據(jù)選項(xiàng)可更改主界面和預(yù)顯窗口的背景色以及方塊的顏色。玩家可根據(jù)個(gè)人喜好,更改
43、游戲窗口顏色,方便,快捷。4>“控制”選項(xiàng)的“開(kāi)始”子選項(xiàng)控制游戲的開(kāi)始,點(diǎn)擊按鈕,方塊開(kāi)始下落。5>“幫助”按鈕中“游戲幫助”選項(xiàng),點(diǎn)擊可彈出對(duì)話框顯示游戲幫助信息,點(diǎn)擊6>“關(guān)于”按鈕顯示與游戲軟件本身相關(guān)信息,具體信息如圖所示: 4.3.2 控制面板按鈕設(shè)計(jì)本游戲控制面板中包含得分統(tǒng)計(jì)、等級(jí)統(tǒng)計(jì)、最高分記錄統(tǒng)計(jì)等字段,其中的TextField控件均由游戲本身統(tǒng)計(jì)給出,玩家不能私自編輯。本游戲的游戲規(guī)則為每消一行得10分,每增加100分上升一個(gè)等級(jí),初始得分為0,初始等級(jí)為1,“最高分記錄”記錄游戲的目前最高分記錄。以下給出得分、等級(jí)更新字段的代碼:/當(dāng)一行被游戲者疊滿后
44、,將此行清除,并為游戲者加分/ row int, 要清除的行,是由BlockPaintesGame類(lèi)計(jì)算的/synchronized設(shè)置同步publicsynchronizedvoid 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;/等級(jí)更新scoreForLevelUpdate += Cont
45、rolMainGame.scoreplus;/重繪畫(huà)布repaint();控制面板中按鈕的功能在4.3.1中已給出代碼,在此不再贅述。5 系統(tǒng)的測(cè)試運(yùn)行5.1 測(cè)試的意義及注意事項(xiàng)軟件測(cè)試是軟件設(shè)計(jì)過(guò)程中極其重要的一個(gè)環(huán)節(jié),是保證軟件的質(zhì)量的重要保障。測(cè)試的方法的好壞會(huì)直接影響到軟件的好壞,進(jìn)行軟件測(cè)試可以找出其中的錯(cuò)誤、不足并加以改進(jìn),從而得到一個(gè)高效、可靠的系統(tǒng)。軟件應(yīng)從多角度進(jìn)行測(cè)試和分析,這樣才能找出其中錯(cuò)誤的地方。測(cè)試的時(shí)間最好找一些與設(shè)計(jì)系統(tǒng)無(wú)關(guān)的人員,或者分析人員。因?yàn)樵陂_(kāi)發(fā)軟件的時(shí)候,開(kāi)發(fā)人員已經(jīng)形成了自己的思維定勢(shì),在測(cè)試的時(shí)候始終受到這種思想的束縛,很難找出其中的錯(cuò)誤而與設(shè)
46、計(jì)無(wú)關(guān)的人員和那些分析人員很容易找出錯(cuò)誤所在。在程序調(diào)試過(guò)程中一定要耐心仔細(xì),一個(gè)細(xì)微的錯(cuò)誤將會(huì)導(dǎo)致整個(gè)功能不能實(shí)現(xiàn)導(dǎo)致浪費(fèi)很多的時(shí)間去修改。應(yīng)在以下幾方面加以注意:1>語(yǔ)法錯(cuò)誤語(yǔ)法錯(cuò)誤是經(jīng)常碰到的錯(cuò)誤。例如,命令拼寫(xiě)錯(cuò)誤或傳遞給函數(shù)的參數(shù)不正確都將產(chǎn)生錯(cuò)誤。語(yǔ)法錯(cuò)誤可能導(dǎo)致不能繼續(xù)編寫(xiě)代碼。 2>邏輯錯(cuò)誤 邏輯錯(cuò)誤通??赡苁菨撛诤碗y以檢測(cè)的。當(dāng)有因鍵入錯(cuò)誤或程序邏輯流程引起的邏輯錯(cuò)誤,可能會(huì)成功運(yùn)行,但產(chǎn)生的結(jié)果卻是錯(cuò)的。例如,當(dāng)本應(yīng)使用小于符號(hào)比較數(shù)值,但卻使用了大于符號(hào)時(shí),那么將返回不正確的結(jié)果。3>運(yùn)行時(shí)錯(cuò)誤運(yùn)行時(shí)錯(cuò)誤是在執(zhí)行過(guò)程中指令試圖執(zhí)行不可能的動(dòng)作而導(dǎo)致的,必
47、須糾正運(yùn)行時(shí)產(chǎn)生的錯(cuò)誤,這樣才能保證軟件運(yùn)行的可靠性。本游戲在開(kāi)發(fā)過(guò)程中采用了多種有效措施進(jìn)行測(cè)試以保證軟件質(zhì)量,對(duì)本游戲進(jìn)行了邊界處旋轉(zhuǎn)、方塊翻轉(zhuǎn)越界等方面的測(cè)試,極大的保證了軟件質(zhì)量和出錯(cuò)幾率。但是系統(tǒng)中可能還存在著一些其他的錯(cuò)誤和缺陷,因此,游戲必須要經(jīng)過(guò)反復(fù)的運(yùn)行測(cè)試,盡最大量將bug減到最少。5.2 游戲代碼、算法的測(cè)試1>寫(xiě)get()方法時(shí)需要有返回值,但是程序中沒(méi)有寫(xiě)return語(yǔ)句,使程序在編譯時(shí)出現(xiàn)錯(cuò)誤。解決方法是,在方法中加入return語(yǔ)句,返回相應(yīng)的內(nèi)容即可。2>使用隨機(jī)函數(shù)產(chǎn)生方塊時(shí)沒(méi)有給各個(gè)方塊傳入?yún)?shù),編譯不能通過(guò)。解決方法是,根據(jù)各個(gè)方塊的構(gòu)造傳入相
48、應(yīng)的參數(shù)。3>寫(xiě)T字形方塊各方格的默認(rèn)位置時(shí),將控制方塊位置的變量i,初始化為0,運(yùn)行的結(jié)果是丁字形方塊默認(rèn)成了豎形方塊。解決方法是,將變量i的初始化數(shù)值改為1,即可達(dá)到設(shè)計(jì)的效果。4>運(yùn)行程序時(shí),統(tǒng)計(jì)的分?jǐn)?shù)只是每一次消除滿行后的分?jǐn)?shù),而以前的分?jǐn)?shù)就會(huì)被覆蓋,沒(méi)有累計(jì)。解決方法是,將程序中的“score=”改為“score+=”,就可以使分?jǐn)?shù)累加。5>算法流程的錯(cuò)誤主要集中在如何檢測(cè)及消去方塊,還有如何在通關(guān)之后對(duì)分?jǐn)?shù)的累加進(jìn)行處理,是否升級(jí)的判定這些方面,經(jīng)過(guò)與同學(xué)的討論以及參考資料,都最終得到了解決。5.3 游戲界面菜單選項(xiàng)的功能測(cè)試1>“游戲”菜單測(cè)試點(diǎn)擊“游戲”
49、à“新游戲”輸出:游戲重置結(jié)果:正常點(diǎn)擊“游戲”à“退出”輸出:游戲結(jié)束結(jié)果:正常點(diǎn)擊“游戲”à“提高等級(jí)”輸出:等級(jí)提高一級(jí)結(jié)果:正常點(diǎn)擊“游戲”à“降低等級(jí)”輸出:等級(jí)降低一級(jí)結(jié)果:正常2>點(diǎn)擊“背景”菜單測(cè)試點(diǎn)擊“背景”à“前景色”à“黑色”輸出:方塊顏色變成黑色結(jié)果:正常 點(diǎn)擊“背景”à“背景色”à“黑色”輸出:背景顏色變成黑色結(jié)果:正常3>“控制”菜單測(cè)試點(diǎn)擊“控制”à“開(kāi)始”輸出:開(kāi)始游戲,方塊開(kāi)始下落結(jié)果:正常點(diǎn)擊“控制”à“暫?!陛敵觯簳和S螒?,方塊停止下落結(jié)果:正常
50、點(diǎn)擊“控制”à“重新開(kāi)始”輸出:重新開(kāi)始新游戲 結(jié)果:正常點(diǎn)擊“控制”à“停止”輸出:游戲停止 結(jié)果:正常4>“幫助”菜單測(cè)試點(diǎn)擊“幫助”à“游戲幫助”輸出:彈出對(duì)話框,提示游戲規(guī)則結(jié)果:正常圖5-1 游戲幫助菜單運(yùn)行截圖點(diǎn)擊“幫助”à“關(guān)于”輸出:彈出對(duì)話框,提示游戲軟件版本相關(guān)信息結(jié)果:正常圖5-2 游戲關(guān)于菜單運(yùn)行截圖5.4 按鍵事件的功能測(cè)試1>方塊移動(dòng)測(cè)試游戲過(guò)程中,點(diǎn)擊“左、右、下”方向鍵輸出:方塊正常移動(dòng),不會(huì)移出邊界結(jié)果:正常2>方塊旋轉(zhuǎn)測(cè)試游戲過(guò)程中,點(diǎn)擊向上方向鍵輸出:方塊無(wú)邊界和障礙物阻擋的情況下可反轉(zhuǎn)結(jié)果:正常5
51、.5 方塊堆砌與消行測(cè)試1>方塊堆砌測(cè)試 當(dāng)方塊下落到最底面或與障礙物接觸時(shí)輸出:方塊成功堆砌在底部結(jié)果:正常2>游戲消行測(cè)試當(dāng)出現(xiàn)滿行現(xiàn)象時(shí)輸出:所有滿行被消除,方塊依次下移結(jié)果:正常圖 5-3 游戲結(jié)束狀態(tài)截圖3>游戲結(jié)束測(cè)試當(dāng)出現(xiàn)滿屏現(xiàn)象時(shí)輸出:彈出會(huì)話窗口,提示“Game Over”,如圖5-3所示。5.6 測(cè)試結(jié)果分析 經(jīng)過(guò)本次系統(tǒng)測(cè)試,本游戲?qū)崿F(xiàn)預(yù)設(shè)的基本功能,不過(guò)整體功能還不夠強(qiáng)大,創(chuàng)新方面做的稍微遜色,作為開(kāi)發(fā)的第一個(gè)版本,游戲在功能、界面設(shè)計(jì)等很多方面還需要進(jìn)一步完善。6 結(jié) 論在做畢業(yè)設(shè)計(jì)之前,我對(duì)Java相關(guān)的開(kāi)發(fā)只是停留在理論知識(shí)的水平上,此次畢業(yè)設(shè)計(jì)
52、讓我明白“紙上得來(lái)終覺(jué)淺,絕知此事要躬行”的道理。缺乏實(shí)際的軟件開(kāi)發(fā)經(jīng)驗(yàn),是我給自己下的定論。通過(guò)這次畢業(yè)設(shè)計(jì),我完成了俄羅斯方塊游戲的全部開(kāi)發(fā)任務(wù)。在整個(gè)開(kāi)發(fā)過(guò)程中遇到了很多問(wèn)題,如方塊的繪制和變形、線程的創(chuàng)建問(wèn)題、同步的控制、滿行判斷、消行的處理以及最高分?jǐn)?shù)記錄的功能實(shí)現(xiàn),但最終都被我一一解決,對(duì)其中比較主要的幾點(diǎn)體會(huì)總結(jié)如下:第一,為了熟悉俄羅斯方塊的相關(guān)功能和設(shè)計(jì),我時(shí)常從各大游戲下載網(wǎng)站下載單機(jī)版俄羅斯方塊游戲,并研究其中功能的實(shí)現(xiàn)和界面的設(shè)計(jì),思考和查閱資料進(jìn)行分析,經(jīng)過(guò)逐步的設(shè)計(jì)與反復(fù)的修改論證,才完成了整個(gè)游戲的開(kāi)發(fā)。第二,在游戲設(shè)計(jì)過(guò)程中,我采用從粗到精的設(shè)計(jì)模式,從小到大測(cè)
53、試的原則。先設(shè)計(jì)游戲框架,并逐層測(cè)試,而后再添加具體實(shí)現(xiàn)代碼并逐步進(jìn)行更細(xì)化的測(cè)試。設(shè)計(jì)過(guò)程中,經(jīng)常會(huì)遇到難題,我會(huì)通過(guò)反復(fù)思考和測(cè)試,然后找出自己的錯(cuò)誤并加以改正,再進(jìn)行下一個(gè)步驟,確保萬(wàn)無(wú)一失,盡力減輕最后的調(diào)試工作量。第三,畢業(yè)設(shè)計(jì)業(yè)可以作為一個(gè)不斷學(xué)習(xí)新鮮事物的過(guò)程,從設(shè)計(jì)初的不懂到最后能夠圓滿完成,我體會(huì)到在實(shí)踐中不斷學(xué)習(xí)的重要性,這對(duì)于將來(lái)我走上工作崗位具有重要的教育意義。通過(guò)畢業(yè)設(shè)計(jì)的創(chuàng)作,我對(duì)Java這門(mén)課程有了更深一步的了解,也對(duì)我今后的就業(yè)之路打下了一定的基礎(chǔ)。參考文獻(xiàn)1(美) Paul Hyde.Java線程編程M.北京:人們郵電出版社,2003 2Martin dejo
54、de.Symbian OS J2MEM.北京:人民郵電出版社,2005.103朱福喜. Java程序設(shè)計(jì)技巧與開(kāi)發(fā)實(shí)例M.北京:人民郵電出版社,2004.24袁海燕 王文濤.Java實(shí)用程序設(shè)計(jì)100例M.北京:人民郵電出版社,2005.2:51965高凌琴 陳青華.俄羅斯方塊游戲關(guān)鍵技術(shù)探討J.信息技術(shù)與信息化討,2008年第二期6黃復(fù)賢.俄羅斯方塊游戲的敏捷設(shè)計(jì)與開(kāi)發(fā)J. 電腦編程技巧與維護(hù),2005.47艾克爾.Java編程思想M.北京:機(jī)械工業(yè)出版社,2005.28(美) Paul Hyde.Java線程編程M.北京:人們郵電出版社,20039(美)Bill Venners.深入Jav
55、a虛擬機(jī)M.北京:機(jī)械工業(yè)出版社,2003.9.639810聞怡洋.J2ME MIDP 1.0/2.0無(wú)線設(shè)備編程指南M.北京:北京大學(xué)出版社,2004.5:39342011趙東躍.俄羅斯方塊編程J.電腦編程技巧與維護(hù),1998年第六期12殷兆麟.Java網(wǎng)絡(luò)編程基礎(chǔ)M.北京:北方交通大學(xué)出版社,200413(美)John Zukowski.Java 2 從入門(mén)到精通M.北京:電子工業(yè)出版社,199914宋波.Java應(yīng)用開(kāi)發(fā)教程M.北京:電子工業(yè)出版社,200215托普雷.J2ME技術(shù)手冊(cè)M.北京:中國(guó)電力出版社,2004.6:259312致 謝在這次畢業(yè)設(shè)計(jì)制作和畢業(yè)論文寫(xiě)作過(guò)程中,孫楠老
56、師在論文寫(xiě)作過(guò)程、相關(guān)專(zhuān)業(yè)知識(shí)的指導(dǎo)等方面,給予了我大力的支持和幫助,還有安博實(shí)訓(xùn)基地實(shí)習(xí)導(dǎo)師林紅星老師在代碼實(shí)現(xiàn)過(guò)程中對(duì)我的多方面指導(dǎo),以及各位同學(xué)在論文詳細(xì)設(shè)計(jì)流程圖制作等對(duì)我的幫助。同時(shí)向四年來(lái)教我知識(shí)、育我成長(zhǎng)的河南財(cái)經(jīng)政法大學(xué)計(jì)算機(jī)與信息工程學(xué)院的全體教師致以最衷心的謝意!由于我的學(xué)識(shí)有限,加之時(shí)間倉(cāng)促,文中不免有錯(cuò)誤和待改、不足之處,真誠(chéng)歡迎各位師長(zhǎng)、同學(xué)提出寶貴意見(jiàn)。我會(huì)以身作則,嚴(yán)于律己、奮勇拼搏,以母校為榮,走出一條屬于自己的陽(yáng)關(guān)大道。最后,祝愿所有的教師和同學(xué)們,愿你們身體健康,工作順利!*本科畢業(yè)設(shè)計(jì)(論文)管理暫行規(guī)定畢業(yè)設(shè)計(jì)(論文)是本科人才培養(yǎng)的重要實(shí)踐性教學(xué)環(huán)節(jié),也是學(xué)士學(xué)位評(píng)定的重要依據(jù)。為了切實(shí)做好我校的畢業(yè)設(shè)計(jì)(論文)工作,規(guī)范畢業(yè)設(shè)計(jì)(論文)工作的管理,提高畢業(yè)設(shè)計(jì)(論文)的質(zhì)量,特制定本規(guī)定。一、畢業(yè)設(shè)計(jì)(論
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽(yáng)理工大學(xué)《車(chē)輛人機(jī)工程學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 國(guó)家著作權(quán)軟件著作權(quán)轉(zhuǎn)讓合同
- 2024-2025學(xué)年新教材高中歷史第5課古代非洲與美洲課時(shí)素養(yǎng)評(píng)價(jià)含解析新人教版必修中外歷史綱要下
- 高中歷史第六單元資本主義運(yùn)行機(jī)制的調(diào)節(jié)第19課當(dāng)代資本主義的新變化史料解讀素材北師大版必修2
- 大班音樂(lè)《粗心的小畫(huà)家》課件
- 2024房屋維修工程施工合同
- 2024裝修合同簽署小常識(shí)分享
- 2024辦公設(shè)備采購(gòu)合同范本
- 2024【服務(wù)協(xié)議模板】代駕服務(wù)協(xié)議合同范本
- 2024裝修合同制定的注意事項(xiàng)
- 《船舶電氣設(shè)備》課程標(biāo)準(zhǔn)(含課程思政)
- 中職職教高考《電工基礎(chǔ)》歷年考試真題題庫(kù)匯總含答案
- 2023年廣東省公務(wù)員錄用考試《行測(cè)》題
- 從科學(xué)探究到跨學(xué)科實(shí)踐:初中物理教學(xué)的新變革基于新舊課標(biāo)的比較分析
- 2024年安徽興泰融資租賃有限責(zé)任公司招聘筆試參考題庫(kù)含答案解析
- 南京交通職業(yè)技術(shù)學(xué)院?jiǎn)握新殰y(cè)參考試題庫(kù)(含答案)
- 班前晨會(huì)內(nèi)容及安全注意事項(xiàng)
- T-NAHIEM 101-2023 急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)
- 教育部《中小學(xué)德育工作指南》-德育工作指南
- 建筑保溫材料生產(chǎn)加工項(xiàng)目建設(shè)方案
- 2016-2023年太原幼兒師范高等專(zhuān)科學(xué)校高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論