第一篇:基于Java的俄羅斯方塊的設計和實現(含源文件)
本科生畢業論文(設計)
基于Java的俄羅斯方塊的設計與實現
姓
名 學
號 專
業 指導教師
I
摘 要
俄羅斯方塊作為一款風靡全球的多樣化終端游戲,經久不衰。俄羅斯方塊簡單的基本游戲規則是旋轉、移動,游戲自動隨機輸出7種形狀的方塊,經旋轉后可形成28種形狀,方塊堆疊在一起,排列成完整的一行或多行消除得分,積分達到一定程度會自動提升級別。該游戲上手簡單、老少皆宜、家喻戶曉。
本論文在詳盡分析傳統俄羅斯實現的基本原理、基本規則基礎上,更深一步地研究俄羅斯方塊的創新模式,在經典模式基礎上開發出等級可變的模式,以及進一步開發出顏色可變的模式,如隨意改變界面的背景色、前景色等,本文對以上功能給出了實現流程、詳盡描述、和部分源代碼。
論文闡述了該游戲的歷史、開發此游戲的意義和環境并根據軟件工程的相關知識,進行系統的需求分析、概要設計、詳細設計與實現、調試運行進行描述。
此設計是在Microsoft Windows XP系統下,以Java為開發語言,在MyEclipse開發平臺上進行游戲的設計與實現。
關鍵詞:游戲;俄羅斯方塊;錯誤!未找到引用源。軟件工程;MyEclipse錯誤!未找到引用源。
Abstract Tetris is a popular global diversification of terminal enduring game.Simple basic rules of the game is rotating, moving, 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 paper 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 implementation 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, detailed 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
III
目 錄 引 言................................................................1 2 系統的需求分析.......................................................2 2.1 系統需求.........................................................2 2.2 接口控制.........................................................3 3 系統的概要設計.......................................................4 3.1 軟件運行和開發工具...............................................4 3.2 系統功能設計.....................................................4 3.2.1 手工處理業務的基本流程.......................................4 3.2.2 基本流程的功能模塊...........................................5 4 系統的詳細設計與實現.................................................8 4.1 游戲主界面顯示模塊...............................................8 4.2 畫布、方塊顯示模塊...............................................9 4.2.1 背景畫布模塊設計............................................10 4.2.2 預覽方塊模塊設計............................................11 4.2.3 方塊移動、旋轉設計..........................................14 4.3 控制面板模塊....................................................18 4.3.1 菜單欄模塊設計..............................................18 4.3.2 控制面板按鈕設計............................................20 5 系統的調試運行......................................................21 5.1 測試的意義及注意事項............................................21 5.2 游戲代碼、算法的測試............................................21 5.3 游戲界面菜單選項的功能測試......................................22 5.4 按鍵事件的功能測試..............................................24 5.5 方塊堆砌與消行測試..............................................25 5.6 測試結果分析....................................................26 6 結 論..............................................................27 參考文獻..............................................................28 致 謝.................................................................29 引 言
俄羅斯方塊的影響已毋庸置疑, 當今世界的電腦、手機到處都有俄羅斯方塊的蹤跡,同時它更是每個游戲平臺的必備游戲,相關的復制品不勝枚舉。這個最早由莫斯科的數學家亞力克西·帕杰諾夫(Alexey Pajituov)所設計的作品,被公認為有史以來最暢銷的經典游戲,至今魅力不減當年。亞力克西·帕杰諾夫曾在俄羅斯科學研究院電腦中心工作, 當時他在Eletronica 60的舊型俄羅斯主機上進行開發工作, 這種機器不支持圖形界面, 和PC也不兼容。他嘗試將一種傳統的拼圖游戲Pentomino 改寫成電腦游戲。Pentomino 一共有十二種形狀, 各以七個方塊組合而成。帕杰諾夫試著寫了一個程序, 旋轉并移動這十二種不同形狀的方塊, 讓它們拼成一大塊。后來幾經修改,發展成我們現在所熟悉的經典模式。俄羅斯方塊曾經引起的轟動和制造的經濟價值可以說是游戲史上無可比擬的。它看似簡單但卻變化無窮,令人愛不釋手。
俄羅斯方塊游戲是隨計算機的發展而發展,并不斷推陳出各種新演變出的類似游戲, 深受廣大玩家喜愛。游戲模式有的簡單、有的復雜, 但其根本原理是都是對隨機出現的方塊進行組合, 來訓練玩家的反應能力、邏輯思維能力。游戲軟件, 大多數人都視其為神妙莫測, 高不可及的東西。一般來說,游戲軟件也確實具有很高的技術難度, 隨著開發工具和軟件開發方法學的不斷發展, 自己動手開發游戲也并非難事。俄羅斯方塊游戲可以上說是一種古老而又有趣的游戲。游戲軟件不計其數, 網上也有很多關于游戲實現的復雜算法和設計, 其難度讓一般初學者望而卻步。本文利用數組作為方塊的數據結構,用顏色變化作為方塊下落和移動的標識,提出一種用Java語言實現游戲的簡易方法,在經典模式的基礎上實現等級可變,顏色可變等功能,初學者可仿此開發類似游戲, 并了解游戲軟件的設計與開發過程。
俄羅斯方塊游戲以其益智、簡單又不乏挑戰、創意獨特的游戲模式,吸引了眾多游戲愛好者,而且老少皆宜。當今社會里,人們的工作壓力隨著生活節奏的快速提高而逐漸繁重,隨之減少的是可以自由支配的休息時間,人們迫切地需要一種既簡單又節省時間的快速休閑方式。無可爭議,它是永恒的娛樂經典,且它的代碼簡單,界面簡潔,從最初發行時的單個游戲機到現在便捷的安裝到電腦、手機、MP4、電子詞典、商務通、IPAD、ITOUCH等便攜設備,俄羅斯方塊風靡世界,經久不衰。本次課題研究可以說是對游戲開發的一次嘗試,無論從技術還是社會意義上看都是很有價值的。系統的需求分析
對系統的需求分析就是用戶和開發人員在“系統必須做什么”這個問題上實現相互理解,達到共識,從而形成雙方認可的軟件產品的需求規格。這樣有利于提高軟件開發過程中的能見度,便于對軟件開發過程的控制與管理,便于采用工程化的模式開發軟件,從而達到提高軟件的質量,為開發人員、維護人員、管理人員之間的交流、協作提供便捷。作為工作成果的原始依據,系統的需求分析可以向潛在用戶傳遞軟件功能、性能的需求,使其能夠判斷該軟件是否符合自己的需求。2.1 系統需求
系統隨機產生7中不同形狀的方塊,旋轉后有28種狀態。方塊自由下落,玩家通過鍵盤控制方塊的移動和旋轉,把方塊擺放在適當的位置。如果方塊落下時,有被方塊填滿的整行,則該行可消去。每消去一行,玩家得分增加10分,每滿100分,玩家等級增加一級。若由存在空格的方塊填滿整個窗口,則游戲宣告失敗。游戲功能需求如下:
游戲界面需求:設計良好的游戲界面可以讓玩家充分感受到游戲帶來的娛樂性,游戲的默認背景色是深綠色,主界面方塊默認用橘黃色,預顯方塊顏色默認為淡紫色。背景色、前景色對比鮮明,以達到讓玩家眼前一亮的感覺,并能在游戲達到高等級狀態,方塊下落速度漸高的情況下使玩家能夠清楚的分辨出下落方塊的形狀,增加游戲的刺激性。
游戲形狀需求:用數組作為存儲方塊28種狀態的數據結構,即長條形、Z字形、反Z形、田字形、7字形、反7形、T字型一共7種形狀的向4個方向的旋轉變形,各個方塊要能實現它的任意變形,可設為順時針變形或逆時針變形,一般為逆時針變形。方塊的可否翻轉需要加以判斷,以防止其翻轉越界。
鍵盤處理事件需求:方塊下落時,可通過鍵盤方向鍵(上鍵、下鍵、左鍵、右鍵)或字母鍵I、K、J、L對下落方塊進行向上(旋轉變形)、向下(加速下落)、向左移動、向右移動。
鼠標處理事件需求:通過點擊菜單欄中相應的菜單項或控制面板內的按鈕,可以實現游戲的開始、結束、暫停、繼續、提高等級、降低等級,預顯方塊形狀的顯示,分數、等級的顯示,以及游戲幫助、顏色變換等功能。
顯示需求:當方塊填滿一行時可以消行,剩余未填滿的行逐次向下移動并統計分數。當達到一定分數的時候,會增加相應的等級。當方塊充滿主界面的每一行,方塊不能再下落時,提示“Game Over”的字樣。
非功能性需求:本系統非功能性需求包括游戲主界面左上角顯示圖標需求、窗口尺寸可調整性需求、游戲運行時主界面彈出位置居中需求等。2.2 接口控制
本游戲通過鍵盤和鼠標進行操作,在Windows的操作系統下,利用鍵盤的按鍵對方塊進行移動、變形,要使用到鍵盤的接口事件。游戲使用鼠標對游戲進行全程控制,如游戲的開始、暫停、繼續、查看游戲幫助、更改界面顏色、更改游戲等級等,通過對鼠標單擊、按鍵添加監聽事件,編輯相應代碼來實現相應功能。系統的概要設計
3.1 軟件運行和開發工具
操作系統:Microsoft Windows XP Professional Service Pack 3 內存:2G 硬盤:320G CPU:賽揚2.8 交互工具:鍵盤、鼠標 顯示器:VGA顯示器 JDK版本:jdk1.6.0.02 Eclipse版本:MyEclipse 8.5 SDK-3.4-win32 3.2 系統功能設計
3.2.1 手工處理業務的基本流程
本游戲的設計以娛樂為初衷,以益智為目的,在綜合研究以往俄羅斯方塊經典游戲功能的基礎上推陳出新,加之新的功能,賦以新的生機和活力。圖3-1為游戲基本流程圖具體闡述游戲的基本流程。
運行說明:
1>運行程序,點擊右側控制面板內的“開始”或“控制”菜單內的“開始”按鈕開始游戲。
2>使用上、下、左、右鍵或I、K、J、L鍵控制方塊的變形、下落、向左和向右移動。
3>方塊滿行消除,分數自動增加,分數每滿100等級自動增加一級。
4>等級增加、方塊下落速度增加,按右側控制面板或“游戲”菜單內的“提高等級”、“降低等級”按鈕,來手動改變游戲等級。也可點擊“顏色”菜單內的選項,更改前景色、背景色。
5>按右側控制面板或“控制”菜單內的“暫停”可以控制游戲暫停,然后按“繼續”可以控制游戲繼續上次游戲。按“停止”按鈕,游戲會徹底停止正在進行的當局游戲,再按“開始”或“控制”菜單內的“重新開始”會開始新游戲。
6>當方塊占滿整個窗口,不能再有新方塊下落時,游戲會彈出“Game Over”的對話框提示游戲結束。
開始初始化方塊否玩家更改前景色、背景色、等級等玩家操作方塊是否到達底部暫停、繼續、停止、重新開始是是否滿行是玩家積分增加否積分達到100否是玩家等級增加是否到達頂部是顯示Game Over游戲結束結束
圖3-1 游戲基本流程圖
3.2.2 基本流程的功能模塊
本系統基于游戲的各項功能來設計游戲的各個功能模塊。圖3-2為本游戲的系統功能模塊示意圖,如圖所示,本游戲主要有兩大模塊:游戲界面區,游戲控制區。游戲界
面區分顯示玩家可選操作、顯示玩家操作結果兩個部分。游戲控制區分更改顏色、開始、暫停、繼續、停止、重新開始、提高等級、降低等級、退出等功能模塊。
顯示玩家可選操作游戲界面區顯示玩家操作結果更改顏色開始俄羅斯方塊游戲暫停、繼續停止游戲控制區重新開始提高等級降低等級退出 圖3-2 系統功能模塊示意圖
圖3-3為游戲界面區模塊設計示意圖,如圖所示,游戲界面區模塊可細分為闖進新游戲界面、處理玩家操作、顯示玩家操作結果三個功能模塊。
創建新游戲界面游戲界面區處理玩家操作顯示玩家操作結果 圖3-3 界面模塊示意圖
圖2-4為游戲控制區設計示意圖,如圖所示,游戲控制區模塊分為開始、暫停、繼續、初始游戲級別設置、初始顏色設置、退出等功能模塊。
開始暫停游戲控制區初始級別設置初始顏色設置退出 圖3-4 控制區模塊示意圖 系統的詳細設計與實現
Java是一種純面向對象(Object-Oriented)的程序語言,它的諸多優點在此就不作詳細論述了。從面向對象的觀念出發,本程序主要可分為以下幾個模塊: ? 游戲主界面顯示模塊 ? 方塊及數據顯示模塊 ? 方塊移動控制模塊 ? 游戲界面顏色控制模塊 ? 游戲進度、等級控制模塊
分析對象的技巧在于它的功能的擴展性及維護效率。試想,如果因為外部環境或者用戶需求的變化需要對程序進行功能擴展或者維護,就要對代碼作大幅度的更動甚至重寫,這樣就失去了面向對象的優勢,所以在本程序分析時將獨立性高的模塊作為一個對象,以提高程序的可擴展性和可維護性。以下該游戲中類的設計:
ControlMainGame類:繼承自JFrame類,作為游戲的主類,負責對游戲的主體全局進行控制,連接與指揮各個類的樞紐。
ControlPanel類:繼承自JPanel類,作為操作面板類,負責安放主游戲窗口,積分板,級別控制按鈕等窗口用以控制游戲進程。
ChangeBlockColor類:繼承自JPanel類,ChangeBlockColor線程類動態改變畫布類的方格顏色,畫布類通過檢查方格顏色來體現ChangeBlockColor方塊的移動情況與消去狀況。
BlockPaint類:方格類,組成方塊的基本元素,主要表達方式為顏色。BlockOperation類:繼承自Thread類,作為操控方塊的類,控制方塊的移動,下落以及變形。
4.1 游戲主界面顯示模塊
一個優秀的軟件系統不僅體現在核心的功能的多樣性和強大上,如果使用者所面對的是枯燥的、陳舊的界面的話,那么這個的軟件系統是不成功的,所以好的、精美的界面設計是極為重要的環節。為玩家設計制作布局合理、視覺效果良好的界面的重要性就不言而喻了。
游戲主界面采用Swing組件開發,并且向其注冊監聽器,以實現各種控制功能,綜合游戲窗體的設計,其上至少需要注冊三個監聽器,分別是動作監聽器(ActionListener)、鍵盤監聽器(KeyListener)、選項監聽器(ItemListener)。
根據初步設計,可以確定客戶端上所要用到的Swing組件對象有JFrame對象、JPanel對象,JLabel對象、JButton對象、JMenuBar對象、JMenu對象、JMenuItem對象、JTextField對象、JTextArea對象、JDialog對象等,至少十個Swing組件對象。下圖4-1為游戲主界面截圖。
圖4-1 游戲主界面截圖
本游戲主界面設計的初始顏色搭配基于對比鮮明的原則,默認背景色為深綠色,左上角設置俄羅斯方塊圖標,得分初始值為0,等級初始值為1,最高分記錄初始值為0。游戲主窗體尺寸設置為(520,580),方塊移動范圍窗格由一個20行、12列的二維數組控制,且左上角圖標設置為方塊圖案,起標識作用。4.2 畫布、方塊顯示模塊
本游戲中將畫布底色默認設計成深綠色,在方塊下落過程中,根據顏色的變化識別下落的方塊。
4.2.1 背景畫布模塊設計
該游戲的主背景畫布是一個20行、12列的二維數組,方塊顯示是由相應顏色變化來標識,主窗體用顏色填充后可形成呈現出來背景樣式和方塊。本游戲用繼承自JPanel的ChangeBlockColor類控制背景畫布的顯示,用rows代表畫布的行數,cols代表畫布的列數,行數和列數決定著畫布擁有方格的數目。背景畫布實現代碼如下: /* ChangeBlockColor 類
畫布類的構造函數 rows int, 畫布的行數 cols int, 畫布的列數
行數和列數決定著畫布擁有方格的數目 */ class ChangeBlockColor extends JPanel { private Color backColor = new Color(0,51,0), 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 BlockPaint[rows][cols];
for(int i = 0;i < boxes.length;i++)
{
for(int j = 0;j < boxes[i].length;j++)
{
boxes[i][j] = new BlockPaint(false);//
}
} } //畫布類的構造函數
public ChangeBlockColor(int rows, int cols, Color backColor, Color frontColor){
this(rows, cols);
this.backColor = backColor;//背景色
this.frontColor = frontColor;//前景色
} //覆蓋JComponent類的函數,畫組件
// g 圖形設備環境
public void paintComponent(Graphics g){
super.paintComponent(g);g.setColor(frontColor);
for(int i = 0;i < boxes.length;i++)
{
for(int j = 0;j < boxes[i].length;j++)
{
g.setColor(boxes[i][j].isColorBox()? frontColor : backColor);
g.fill3DRect(j * boxWidth, i * boxHeight,boxWidth, boxHeight, true);
}
} } 4.2.2 預覽方塊模塊設計
方塊和數據信息是游戲中最基本的功能模塊。ShowBeforePanel這個類提供方塊預顯圖形,blockkindnum用來控制隨機產生的方塊編號,blockstatusnum用來控制方塊的四種旋轉狀態。定義一個4x4方陣,共16個小格。用“0”和“1”來表示每個方格是繪制新顏色還是保留底色。
每得到一個新方塊,都是隨機從七種形態的方塊中選取一種。游戲定義了一個變量,代表新方塊的模型。比如定義int型數組STYLE代表28中方塊類型,7行4列,每個元素代表其中一種方塊。即0<=blockkindnum<=6,0= Java語言包中的Math類提供了一個生成隨機數的方法random(),調用這個方法會產生一個在0-1之間的雙精度浮點數。所以每次要得到新方塊時,只需調用一次這個方法,得到一個0-1的雙精度浮點數,然后用該數乘以7,之后強轉成整型,即可得到1—7的整數,用來控制行。用該數乘以4,之后強轉成整型,即可得到1—4的整數,用來控制列。 由此可以組合出多種圖形定義然后用代碼實現下列功能: 1>每次執行首先為隨機數產生不同的初值。 style=BlockOperation.STYLES[(int)(Math.random()*7)][(int)(Math.random()* 4)]; 長條形T形反Z形隨機數STYLES的下標Z形7形反7形方塊形 圖4-2 隨機產生方塊圖 2>隨機選取一個圖形,圖3-1隨機產生方塊圖具體描述用生成的隨機數控制產生的圖形。 3>當前圖形在其4*4網格中的位置信息。 繪制4行4列的方塊預顯方格,隨機生成預顯示的方塊樣式。本游戲用二維數組存儲方塊的28種樣式。 public final static int[][] STYLES = {//分別對應對7種模型的28種狀態 {0x0f00, 0x4444, 0x0f00, 0x4444}, // 長條型的四種狀態 {0x04e0, 0x0464, 0x00e4, 0x04c4}, // 'T'型的四種狀態 {0x4620, 0x6c00, 0x4620, 0x6c00}, // 反'Z'型的四種狀態 {0x2640, 0xc600, 0x2640, 0xc600}, // 'Z'型的四種狀態 {0x6220, 0x1700, 0x2230, 0x0740}, // '7'型的四種狀態 {0x6440, 0x0e20, 0x44c0, 0x8e00}, // 反'7'型的四種狀態 {0x0660, 0x0660, 0x0660, 0x0660}, // 方塊的四種狀態}; 以下為與數組相對應的方塊樣式截圖。? 長條型的四種狀態 圖4-3 長條型狀態截圖 ? 'T'型的四種狀態 圖4-4 T型狀態截圖 ? 反'Z'型的四種狀態 圖4-5 反Z型狀態截圖 ? 'Z'型的四種狀態 圖4-6 Z型狀態截圖 ? '7'型的四種狀態 圖4-7 7型狀態截圖 ? 反'7'型的四種狀態 圖4-8 反7型狀態截圖 ? 方塊的四種狀態 圖4-9 方塊狀態截圖 4.2.3 方塊移動、旋轉設計 方塊的翻轉與移動比較容易實現,方塊移動只需要改變方塊的橫坐標或縱坐標,然后重新繪制方塊即可。方塊翻轉也只需要改變背景數組的值,重新繪制方塊即可。 本游戲方塊下落時,進行動態繪制,實現Cloneable接口, 以指示 Object.clone()方法可以合法地對該類實例進行按字段復制。方塊的操作類BlockOperation繼承Thread類,重寫run()方法,以實現方塊的動態正確下落。當然,在線程中要判定方塊是處于moving狀態還是pausing狀態。 public void run(){ //moving判定方塊是否在動態下落 while(moving){ try { //betweenleveltime指示相鄰等級之間相差時間 sleep(betweenleveltime *(ControlMainGame.maxlevel1][j].clone(); } // 每次消行加10分 score += ControlMainGame.scoreplus;// 等級更新 scoreForLevelUpdate += ControlMainGame.scoreplus;// 重繪畫布 repaint();} 控制面板中按鈕的功能在4.3.1中已給出代碼,在此不再贅述。系統的測試運行 5.1 測試的意義及注意事項 軟件測試是軟件設計過程中極其重要的一個環節,是保證軟件的質量的重要保障。測試的方法的好壞會直接影響到軟件的好壞,進行軟件測試可以找出其中的錯誤、不足并加以改進,從而得到一個高效、可靠的系統。 軟件應從多角度進行測試和分析,這樣才能找出其中錯誤的地方。測試的時間最好找一些與設計系統無關的人員,或者分析人員。因為在開發軟件的時候,開發人員已經形成了自己的思維定勢,在測試的時候始終受到這種思想的束縛,很難找出其中的錯誤而與設計無關的人員和那些分析人員很容易找出錯誤所在。 在程序調試過程中一定要耐心仔細,一個細微的錯誤將會導致整個功能不能實現導致浪費很多的時間去修改。應在以下幾方面加以注意: 1>語法錯誤 語法錯誤是經常碰到的錯誤。例如,命令拼寫錯誤或傳遞給函數的參數不正確都將產生錯誤。語法錯誤可能導致不能繼續編寫代碼。2>邏輯錯誤 邏輯錯誤通常可能是潛在和難以檢測的。當有因鍵入錯誤或程序邏輯流程引起的邏輯錯誤,可能會成功運行,但產生的結果卻是錯的。例如,當本應使用小于符號比較數值,但卻使用了大于符號時,那么將返回不正確的結果。 3>運行時錯誤 運行時錯誤是在執行過程中指令試圖執行不可能的動作而導致的,必須糾正運行時產生的錯誤,這樣才能保證軟件運行的可靠性。 本游戲在開發過程中采用了多種有效措施進行測試以保證軟件質量,對本游戲進行了邊界處旋轉、方塊翻轉越界等方面的測試,極大的保證了軟件質量和出錯幾率。但是系統中可能還存在著一些其他的錯誤和缺陷,因此,游戲必須要經過反復的運行測試,盡最大量將bug減到最少。5.2 游戲代碼、算法的測試 1>寫get()方法時需要有返回值,但是程序中沒有寫return語句,使程序在編譯時出現錯誤。解決方法是,在方法中加入return語句,返回相應的內容即可。 2>使用隨機函數產生方塊時沒有給各個方塊傳入參數,編譯不能通過。解決方法是,根據各個方塊的構造傳入相應的參數。 3>寫T字形方塊各方格的默認位置時,將控制方塊位置的變量i,初始化為0,運行的結果是丁字形方塊默認成了豎形方塊。解決方法是,將變量i的初始化數值改為1,即可達到設計的效果。 4>運行程序時,統計的分數只是每一次消除滿行后的分數,而以前的分數就會被覆蓋,沒有累計。解決方法是,將程序中的“score=”改為“score+=”,就可以使分數累加。 5>算法流程的錯誤主要集中在如何檢測及消去方塊,還有如何在通關之后對分數的累加進行處理,是否升級的判定這些方面,經過與同學的討論以及參考資料,都最終得到了解決。 5.3 游戲界面菜單選項的功能測試 1>“游戲”菜單測試 ①點擊“游戲”?“新游戲” 輸出:游戲重置 結果:正常 ②點擊“游戲”?“退出” 輸出:游戲結束 結果:正常 ③點擊“游戲”?“提高等級”?輸出:等級提高一級?結果:正常?④點擊“游戲”?“降低等級”?輸出:等級降低一級?結果:正常?2>點擊“背景”菜單測試 ①點擊“背景”?“前景色”?“黑色” 輸出:方塊顏色變成黑色 結果:正常 ② 點擊“背景”?“背景色”?“黑色” 輸出:背景顏色變成黑色 結果:正常 3>“控制”菜單測試 ①點擊“控制”?“開始” 輸出:開始游戲,方塊開始下落 結果:正常 ②點擊“控制”?“暫停” 輸出:暫停游戲,方塊停止下落 結果:正常 ③點擊“控制”?“重新開始” 輸出:重新開始新游戲 結果:正常 ④點擊“控制”?“停止” 輸出:游戲停止 結果:正常 4>“幫助”菜單測試 ①點擊“幫助”?“游戲幫助” 輸出:彈出對話框,提示游戲規則 結果:正常 圖5-1 游戲幫助菜單運行截圖 ②點擊“幫助”?“關于” 輸出:彈出對話框,提示游戲軟件版本相關信息 結果:正常 圖5-2 游戲關于菜單運行截圖 5.4 按鍵事件的功能測試 1>方塊移動測試 游戲過程中,點擊“左、右、下”方向鍵 輸出:方塊正常移動,不會移出邊界 結果:正常 2>方塊旋轉測試 游戲過程中,點擊向上方向鍵 輸出:方塊無邊界和障礙物阻擋的情況下可反轉 結果:正常 5.5 方塊堆砌與消行測試 1>方塊堆砌測試 當方塊下落到最底面或與障礙物接觸時 輸出:方塊成功堆砌在底部 結果:正常 2>游戲消行測試 當出現滿行現象時 輸出:所有滿行被消除,方塊依次下移 結果:正常 圖 5-3 游戲結束狀態截圖 3>游戲結束測試 當出現滿屏現象時 輸出:彈出會話窗口,提示“Game Over”,如圖5-3所示。5.6 測試結果分析 經過本次系統測試,本游戲實現預設的基本功能,不過整體功能還不夠強大,創新方面做的稍微遜色,作為開發的第一個版本,游戲在功能、界面設計等很多方面還需要進一步完善。結 論 在做畢業設計之前,我對Java相關的開發只是停留在理論知識的水平上,此次畢業設計讓我明白“紙上得來終覺淺,絕知此事要躬行”的道理。缺乏實際的軟件開發經驗,是我給自己下的定論。通過這次畢業設計,我完成了俄羅斯方塊游戲的全部開發任務。在整個開發過程中遇到了很多問題,如方塊的繪制和變形、線程的創建問題、同步的控制、滿行判斷、消行的處理以及最高分數記錄的功能實現,但最終都被我一一解決,對其中比較主要的幾點體會總結如下: 第一,為了熟悉俄羅斯方塊的相關功能和設計,我時常從各大游戲下載網站下載單機版俄羅斯方塊游戲,并研究其中功能的實現和界面的設計,思考和查閱資料進行分析,經過逐步的設計與反復的修改論證,才完成了整個游戲的開發。 第二,在游戲設計過程中,我采用從粗到精的設計模式,從小到大測試的原則。先設計游戲框架,并逐層測試,而后再添加具體實現代碼并逐步進行更細化的測試。設計過程中,經常會遇到難題,我會通過反復思考和測試,然后找出自己的錯誤并加以改正,再進行下一個步驟,確保萬無一失,盡力減輕最后的調試工作量。 第三,畢業設計業可以作為一個不斷學習新鮮事物的過程,從設計初的不懂到最后能夠圓滿完成,我體會到在實踐中不斷學習的重要性,這對于將來我走上工作崗位具有重要的教育意義。通過畢業設計的創作,我對Java這門課程有了更深一步的了解,也對我今后的就業之路打下了一定的基礎。 參考文獻 [1](美)Paul Hyde.Java線程編程[M].北京:人們郵電出版社,2003 [2]Martin dejode.Symbian OS J2ME[M].北京:人民郵電出版社,2005.10 [3]朱福喜.Java程序設計技巧與開發實例[M].北京:人民郵電出版社,2004.2 [4]袁海燕 王文濤.Java實用程序設計100例[M].北京:人民郵電出版社,2005.2:51~96 [5]高凌琴 陳青華.俄羅斯方塊游戲關鍵技術探討[J].信息技術與信息化討,2008年第二期 [6]黃復賢.俄羅斯方塊游戲的敏捷設計與開發[J].電腦編程技巧與維護,2005.4 [7]艾克爾.Java編程思想[M].北京:機械工業出版社,2005.2 [8](美)Paul Hyde.Java線程編程[M].北京:人們郵電出版社,2003 [9](美)Bill Venners.深入Java虛擬機[M].北京:機械工業出版社,2003.9.63~98 [10]聞怡洋.J2ME MIDP 1.0/2.0無線設備編程指南[M].北京:北京大學出版社,2004.5:393~420 [11]趙東躍.俄羅斯方塊編程[J].電腦編程技巧與維護,1998年第六期 [12]殷兆麟.Java網絡編程基礎[M].北京:北方交通大學出版社,2004 [13](美)John Zukowski.Java 2 從入門到精通[M].北京:電子工業出版社,1999 [14]宋波.Java應用開發教程[M].北京:電子工業出版社,2002 [15]托普雷.J2ME技術手冊[M].北京:中國電力出版社,2004.6:259~312 致 謝 在這次畢業設計制作和畢業論文寫作過程中,老師在論文寫作過程、相關專業知識的指導等方面,給予了我大力的支持和幫助,還有安博實訓基地實習導師林紅星老師在代碼實現過程中對我的多方面指導,以及各位同學在論文詳細設計流程圖制作等對我的幫助。同時向四年來教我知識、育我成長的河南財經政法大學計算機與信息工程學院的全體教師致以最衷心的謝意! 由于我的學識有限,加之時間倉促,文中不免有錯誤和待改、不足之處,真誠歡迎各位師長、同學提出寶貴意見。我會以身作則,嚴于律己、奮勇拼搏,以母校為榮,走出一條屬于自己的陽關大道。最后,祝愿所有的教師和同學們,愿你們身體健康,工作順利! JAVA俄羅斯方塊實訓總結 通過這次實訓即有收獲,也有失落: 1、俄羅斯方塊程序勿促完成,有很多的bug,架構也有很多不合理的地方。雖然把所有的邏輯都進行的封裝,但總感覺有些牽強附會。上課時,并沒有講任何的面向對象的內容,這樣的代碼讓學生去理解實在是勉為其難。其實先讓學生以面向過程的方法去編程,過一段時間再學面向對象或許對學生更為有利。 2、代碼和邏輯過于復雜,一方面學生難于理解,以至于使很多的學生喪失了繼續學習程序的勇氣,打擊了一大片。另一方面,學生敲錯代碼找老師解決,如果是語法錯誤還容易解決掉,但如果是邏輯錯誤就麻煩了,有時,一個加減號的錯誤就要花掉很多時間,這導至了教師的工作量大增。 3、實現分數顯示功能非常困難(這點是我沒想到的)有幾種解決方案,第一種是在界面上直接畫分數,但需要傳遞多一個畫板。第二種是使用事件(這樣比較合理,但太難),事件本身就很難理解了。由于使用的Timer本身是一個多線程的Timer,還需掌握多線程的知識才能做出來,我的《C#語言參考視頻》還沒有做到多線程,這樣就變得難上加難了。但這樣也有一個好處,如果能實現,能學到并理解不少的東西。 4、在做程序時一直在考慮是否應該使用靜態類,說白了就是把靜態類當全局變量使用。最后是決定i 用。但現在感覺還是應該使用的,至少改變參數時不用寫任何代碼就可以馬上見到效果,也可以減少幾百行的代碼,有效使程序減肥。 5、實訓時看到每個學生都在埋頭敲代碼感到很欣慰,有部分同學回到宿舍還繼續奮戰。雖然代碼完全是照視頻抄的,可能不會理解到太多的東西,但至少讓他們找到了學習和互助的感覺,這一點才是最重要的。 這次實訓有很多不足之處,需要改進。想了一下,大概制定了初步的解決方案,首先,程序代碼不超過1000行,其次,不使用面向對象的編程方法: 1、繼續使用俄羅斯方塊,去掉設置界面,XML存儲,也就是把磚塊樣式和快捷鍵寫死在程序里面。這樣一半的代碼就沒了。另外再使用單色的磚塊樣式,這樣就可以使用位運算實現部份邏輯,這樣不但加快了程序的運行速度,算法變得簡單,也減少了部份的代碼。但這樣做這個游戲就變得沒有特點了,可玩性大大降低。而且再重做一遍這個視頻好象也不太好。 【網站源代碼】 旅游系統數據庫部分代碼: Static conn = DriverManager.getConnection(“jdbc:odbc:sql:sqlserver://localhost:1433/travel?useUnicode=true&characterEncoding =gb2312”, “ ”, “ ”);String password=“";Connection conn= DriverManager.getConnection(url,user,password);Statement stmt=conn.createStatement();executeQuery()方法對數據庫進行查詢操作。 sql=”SELECT count(*)c FROM `hotpoint` where `id`=0 and `hotelID`=“+hotel_Id;rs=stmt.executeQuery(sql);while(rs.next()){ count1 = rs.getInt(”c“);} 模塊中關鍵代碼(實現表單的驗證并提交到數據庫的代碼): sql=”select ID from Users where UserName='“+username+”'“;ResultSet rs=statement.executeQuery(sql);if(rs.next()){ err+=”該用戶名己經存在,請更換用戶名!“;valid=false;} else{ String id=”select max(ID)as xxx from Users“;ResultSet a=statement.executeQuery(id);next();sql=”insertintoUsers(UserName,Password,Email,Sex,Phone,Address,Age,PostNumber, Rank,Face)values('“+username+”','“+password1+”','“+email+”','“+sex+”', '“+phone+”','“+address+”','“+age+”', '“+postnumber+”','“+rank+”','“+face+”')“; 用 exe 傳遞所要執行的操作: if(exe.equals(”write“)){ if(reid!=0){ rs.close();sql=”select ReplyNum from Articles where ID=“+reid;rs=statement.executeQuery(sql);rs.next();renum=rs.getInt(”ReplyNum“);renum++;//可以將上面的值進行自增 rs.close();//注意 close 的位置 sql=”updateArticlessetReplyNum='“+renum+”'whereID=“+reid;statement.executeUpdate(sql);} //此用戶的 PostNumber 加一 sql=”selectPostNumberfromUserswhereUserName='“+username+”'“;rs=statement.executeQuery(sql);rs.next();int postnum=rs.getInt(”PostNumber“);System.out.println(postnum);postnum++;rs.close(); sql=”updateUserssetPostNumber='“+postnum+”'whereUserName='“+username+”'“;statement.executeUpdate(sql);//將文章信息存入數據庫 renum=0;//在 上 面 的 內 容 中 可 以 得 到 authorid,title,content,bid,reid,posttime,emotion,renum sql=”insert into Articles(AuthorID,Title,Content,BoardID,ReplyID,Posttime,Emotion, ReplyNum)values('“+authorid+”','“+title+”','“+content+”','“+bid+”','“+ reid+”', '“+posttime+”','“+emotion+”','“+renum+”')“;} else if(exe.equals(”modify“)){ String id=request.getParameter(”id“);sql=”updateArticlessetPostTime='“+posttime+”',Content='“+content+”'whe re ID=“+id;} 網站頁面HTML代碼: 第二篇:JAVA俄羅斯方塊實訓總結.doc
第三篇:基于JAVA WEB技術的旅行社網站系統設計(含源文件)
name=description>
content=XX旅游,XX旅游,旅游網,旅行社,國內旅游,出境旅游,旅游,周邊游,休閑,會議,度假,自由人,簽證,機票,出差,酒店,訂房,在線預定,特色旅游,專題旅游,夕陽紅旅游,紅色旅游
name=keywords>
onload=”MM_preloadImages('5555.jpg')“ marginheight=”0“ marginwidth=”0“>