版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 畢 業(yè) 設(shè) 計(jì)</p><p> 題 目: 俄羅斯方塊單人游戲的實(shí)現(xiàn) </p><p> 院 、系: 軟件工程系 </p><p> 姓 名: </p><p> 指導(dǎo)教師: &l
2、t;/p><p> 系 主 任: </p><p> 2012 年 06 月 20 日</p><p> 俄羅斯方塊單人游戲的實(shí)現(xiàn)</p><p><b> 摘 要</b></p><p> 論文描述了電腦游戲的發(fā)展現(xiàn)狀,和開發(fā)此游戲的意義。遵循
3、軟件工程的知識,從軟件問題定義開始,接著進(jìn)行了主要功能的描述、實(shí)現(xiàn)原理的分析、詳細(xì)設(shè)計(jì),最后對軟件進(jìn)行了測試,整個(gè)開發(fā)過程貫穿軟件工程的知識體系。此次設(shè)計(jì)在Microsoft Windows XP系統(tǒng)下,以Java為開發(fā)語言,在Eclipse開發(fā)平臺上進(jìn)行游戲的設(shè)計(jì)與實(shí)踐。</p><p> 本游戲開發(fā)的總體任務(wù)就是實(shí)現(xiàn)游戲的可操作性,以及界面的簡單清晰性。整個(gè)開發(fā)過程遵循軟件工程規(guī)范,采用JAVA GUI編程
4、來實(shí)現(xiàn)界面以及事件的控制,用戶根據(jù)鍵盤的四個(gè)方向鍵控制翻轉(zhuǎn)、向左、向右和向下操作,通過菜單欄中的相應(yīng)菜單選項(xiàng)實(shí)現(xiàn)游戲的開始、結(jié)束、變換方塊、積分以及等級的功能。由于知識以及能力的限制,本游戲所實(shí)現(xiàn)的功能不夠強(qiáng)大,可對本游戲進(jìn)行改善,從而增強(qiáng)游戲的功能。通過研究分析俄羅斯方塊所具備的能力及實(shí)現(xiàn)的方法、確定主體結(jié)構(gòu)。利用現(xiàn)階段我所能達(dá)到的能力,以最簡潔、最容易的辦法,邊開發(fā)邊測試邊修改,實(shí)現(xiàn)一個(gè)初級游戲軟件。</p><
5、p> 關(guān)鍵詞 電腦游戲;俄羅斯方塊游戲;Java語言</p><p> Single game of Tetris</p><p><b> Abstract</b></p><p> The paper describes the development status of the computer game, and the
6、 development of the significance of this game. Follow the knowledge of software engineering, start from the definition of a software problem, followed by a description of the main functions of the principle of analysis,
7、detailed design, the final test of the software throughout the development process throughout the software engineering body of knowledge. The design of the Microsoft Windows XP systems, the Java development l</p>
8、<p> The development of the overall mission of this game is to achieve operability of the game, as well as clear and simple interface. Throughout the development process follows the software engineering specificati
9、ons, using JAVA GUI programming interface and control of events, according to the four directions of the keyboard keys to control flip, left, right and down operation, selected through the menu bar of the corresponding m
10、enuthe game start, end, transform the box score and level of functional</p><p> Keywords Computer game;Tetris game;Java language</p><p><b> 目錄</b></p><p><b> 摘
11、 要I</b></p><p> AbstractII</p><p><b> 第1章 緒論1</b></p><p> 1.1 電腦游戲的發(fā)展現(xiàn)狀1</p><p> 1.2 開發(fā)意義2</p><p> 第2章 主要功能的描述3</p>&
12、lt;p> 2.1 游戲的主要功能3</p><p> 2.2 Java GUI功能3</p><p> 2.3 多線程的功能4</p><p> 第3章 實(shí)現(xiàn)的原理5</p><p> 3.1 Java GUI實(shí)驗(yàn)原理5</p><p> 3.1.1基本窗口類5</p>&
13、lt;p> 3.1.2原子構(gòu)件7</p><p> 3.1.3菜單類8</p><p> 3.1.4事件處理9</p><p> 3.1.5布局管理10</p><p> 3.1.6圖形類與圖形的繪制11</p><p> 3.2 Java多線程機(jī)制11</p><p&
14、gt; 第4章 設(shè)計(jì)的方案及實(shí)現(xiàn)12</p><p> 4.1設(shè)計(jì)方案12</p><p> 4.1.1游戲界面設(shè)計(jì)12</p><p> 4.1.2游戲控制設(shè)計(jì)12</p><p> 4.1.3基本類設(shè)計(jì)12</p><p> 4.2 程序?qū)崿F(xiàn)17</p><p>
15、4.2.1菜單類的實(shí)現(xiàn)17</p><p> 4.2.2方格類的實(shí)現(xiàn)18</p><p> 4.2.3方塊類的實(shí)現(xiàn)18</p><p> 4.2.4主類的實(shí)現(xiàn)18</p><p> 4.2.5控制面板類的實(shí)現(xiàn)19</p><p> 4.2.6游戲畫布類的實(shí)現(xiàn)19</p><p&
16、gt;<b> 第5章 測試20</b></p><p> 5.1 菜單界面測試20</p><p> 5.2 功能測試23</p><p> 5.3 測試總結(jié)27</p><p><b> 結(jié)論28</b></p><p><b> 致謝3
17、0</b></p><p><b> 參考文獻(xiàn)32</b></p><p><b> 附錄33</b></p><p><b> 第1章 緒論</b></p><p> 1.1 電腦游戲的發(fā)展現(xiàn)狀</p><p> 游戲在一般人
18、眼中應(yīng)該是休閑娛樂的東西,尤其電腦游戲更為如此,在傳統(tǒng)觀念理念上,電腦游戲應(yīng)該是小孩子玩的東西,成年人再玩的話無非是玩物喪志,但是時(shí)代發(fā)展如此迅速的當(dāng)代,這個(gè)理念必須要有所改變,中國的游戲事業(yè)在全世界起步還算早,但是由于種種原因發(fā)展不是十分迅速,在成效上看來并不十分樂觀。</p><p> 電腦游戲是一種新興的文化現(xiàn)象,也是一個(gè)新型的朝陽企業(yè)。作為這么文化類別的后來者,我們與發(fā)達(dá)國家、發(fā)達(dá)地區(qū)相比,無論是理論、
19、開發(fā)、研究還是投入等方面仍有一段不算小的距離,但當(dāng)務(wù)之急需要解決的,也許還不僅僅是上述問題,游戲開發(fā)者們對所從事的這項(xiàng)工作的敬業(yè)態(tài)度,與自省、自重可能比玩家口袋里的銀子還要可貴得多。</p><p> 與單機(jī)游戲日益衰落正相反的是,網(wǎng)絡(luò)游戲方興未艾,遍地開花。國內(nèi)網(wǎng)絡(luò)游戲開發(fā)、制造商也有非常成功的,比如,九城、盛大、網(wǎng)易、金山、久游等等。但是,與此同時(shí),我們也看到了,在繁榮的背后,潛在的商機(jī),一是來自國內(nèi)游戲制
20、作者在是做理念上的不足和困乏,另外就是資金問題。這兩方面與歐美的制作距離很大,隨著魔獸世界的成功代理,接踵而來的是更多高品質(zhì),高水準(zhǔn),高制作的國外網(wǎng)絡(luò)游戲進(jìn)入中國,最近,“九域”即將代理的奇跡世界,卓越之劍,公會戰(zhàn)爭三款大制作,都是目前在歐美頂級的作品,這無疑對國產(chǎn)網(wǎng)絡(luò)游戲帶來巨大競爭壓力和市場的威脅。如果國內(nèi)制作游戲商還停留在紛紛推出所謂的“免費(fèi)”游戲而實(shí)際上是在變相收費(fèi)的運(yùn)營層面上,無疑是作繭自縛,相當(dāng)于自己在毀掉已取得的成績。&l
21、t;/p><p> 中國的游戲發(fā)展緩慢的原因有很多種,例如盜版的橫行,開發(fā)游戲人員的創(chuàng)新意識不強(qiáng),守舊的思想風(fēng)靡等等。例如現(xiàn)在PC游戲的行情就不十分景氣。因此我覺得創(chuàng)新方面還有很多改進(jìn)的余地和改進(jìn)的方面:</p><p> 1、著眼于品質(zhì):看到臺灣一個(gè)電玩節(jié)目,里面就回顧了DOS版的仙劍,這款游戲在全亞洲都很流行,可悲的是,這十幾年來,我們只有這一款。</p><p&g
22、t; 2、低價(jià)化:當(dāng)年暴雪很有想法的把魔獸爭霸3交給中國的奧美科技,推出只有20元的低價(jià)正版還能享受BATTLENET,何樂而不為呢。</p><p> 3、開闊眼界:騰訊官方統(tǒng)計(jì)QQ農(nóng)場最高日在線人數(shù)達(dá)到1600萬,而植物大戰(zhàn)僵尸僅一家游戲網(wǎng)站,中英版本合計(jì)下載數(shù)量可達(dá)到近百萬。這可是說是將WOW、DNF、CSOL等大眾網(wǎng)絡(luò)游戲遠(yuǎn)遠(yuǎn)地拋在了后面,這不能不說明一個(gè)問題,這兩款游戲是非常成功的。他們憑借的創(chuàng)新的
23、思維簡單的操作等方面吸引玩家。這也是游戲公司成功的案例,值得很多同樣的網(wǎng)絡(luò)游戲公司所借鑒。</p><p> 相信中國游戲的發(fā)展,是會有很光明的未來的。這在于我們這代的程序設(shè)計(jì)人員的創(chuàng)新與努力,我們已經(jīng)有很好的技術(shù)支持了,加上優(yōu)秀的思想定然會有很高的前景的[1]。</p><p><b> 1.2 開發(fā)意義</b></p><p> 在現(xiàn)
24、金電子信息高速發(fā)展的時(shí)代,電子游戲已深入人們的日常生活,由于經(jīng)典有趣,因而得到了廣泛的流行,成為老少皆宜的娛樂方式。俄羅斯方塊是一款風(fēng)靡全球的游戲,最初是由蘇聯(lián)人制作的,規(guī)則簡單,容易上手且游戲全過程變化無窮,可以讓玩家充分感受游戲中的樂趣。</p><p> 俄羅斯方塊游戲可以說是隨計(jì)算機(jī)的發(fā)展而發(fā)展,并不斷推陳出新演變出各種類似游戲, 深受廣大玩家喜愛。這個(gè)游戲有的簡單, 有的復(fù)雜, 但其根本原理是一樣的都
25、是對運(yùn)動的方塊進(jìn)行組合, 來訓(xùn)練玩家的反應(yīng)能力。談到游戲軟件, 大多數(shù)人都認(rèn)為其神妙莫測, 高不可及。而一般游戲軟件也確實(shí)具有很高的技術(shù)難度, 隨著開發(fā)工具及軟件開發(fā)方法學(xué)的不斷發(fā)展, 動手開發(fā)游戲也不是十分困難的。俄羅斯方塊游游戲軟件不計(jì)其數(shù), 網(wǎng)上就有好多關(guān)于實(shí)現(xiàn)的復(fù)雜算法和設(shè)計(jì), 其難度讓一般初學(xué)者望而卻步。而俄羅斯方塊是編程的入門項(xiàng)目,它可以檢驗(yàn)編輯人員的知識熟練程度。在游戲設(shè)計(jì)方面,俄羅斯方塊游戲的設(shè)計(jì)工作既復(fù)雜又富有挑戰(zhàn)性,
26、它包含的內(nèi)容多,涉及的知識廣泛,與圖形界面聯(lián)系比較大。在設(shè)計(jì)過程中必將涉及到各個(gè)方面的知識,這對于JAVA設(shè)計(jì)者而言,是個(gè)很好的鍛煉機(jī)會[2]。 </p><p> 游戲是一種新興的媒體,是一種新的設(shè)計(jì)領(lǐng)域,也是一種新的藝術(shù)形式。同時(shí)開發(fā)電腦游戲可以提高學(xué)生研究和學(xué)習(xí)的興趣,培養(yǎng)他們通過互聯(lián)網(wǎng)收集和獲得信息、分析整理信息、撰寫報(bào)告論文等能力。俄羅斯方塊的開發(fā)無疑是給電腦游戲的增加了色彩,拓寬了電腦游戲的平臺
27、,給人們帶來樂趣。</p><p> 第2章 主要功能的描述</p><p> 2.1 游戲的主要功能</p><p> 游戲開發(fā)至今已經(jīng)有30多年,在這個(gè)短暫的時(shí)期里,隨著硬件水平的提高,游戲開發(fā)新技術(shù)層出不窮,經(jīng)典游戲比比皆是。</p><p> 俄羅斯方塊是一個(gè)非常復(fù)雜但是比較有趣并且耐玩的,也是大家比較熟悉的單擊小游戲。游戲中
28、共有7種方塊,每種方塊由4個(gè)方格組成。這7種方塊可以旋轉(zhuǎn)90度、180度、270度,因此每種方塊有4種狀態(tài),7種方塊總共有28種狀態(tài)。28種狀態(tài)的方塊隨機(jī)產(chǎn)生,自由下落,落下時(shí)可由玩家用上、下、左、右控制鍵控制翻轉(zhuǎn)和移動,以便以玩家所需要的形態(tài)和位置落下。如果落下時(shí),方塊的方格能填滿某一行,則這一行可消去。消去一行后,游戲可給玩家加分,若由存在空格的方塊填滿整個(gè)窗口,則游戲失敗。游戲功能需求如下:</p><p>
29、; 游戲界面需求:設(shè)計(jì)良好的游戲界面可以讓玩家充分感受到游戲帶來的娛樂性,游戲的背景色和方塊的顏色都在設(shè)計(jì)之內(nèi),在一定的區(qū)域內(nèi)運(yùn)動和變形,落下后的障礙物用黃色顯示,這樣看起來會有一定的美感。</p><p> 游戲形狀需求:用數(shù)組作為存儲方塊28種狀態(tài)的數(shù)據(jù)結(jié)構(gòu),即長條形、Z字形、反Z形、田字形、7字形、反7形、T字型,各個(gè)方塊要能實(shí)現(xiàn)它的變形,可設(shè)為順時(shí)針或逆時(shí)針變形,一般為逆時(shí)針。</p>
30、<p> 處理事件需求:方塊下落時(shí),可通過鍵盤方向鍵(上、下、左、右鍵)對該方塊進(jìn)行向上(變形),向下(加速)、向左、向右移動。</p><p> 顯示需求:當(dāng)不同的方塊填滿一行時(shí)可以消行,剩余方塊向下移動并統(tǒng)計(jì)分?jǐn)?shù)。當(dāng)達(dá)到一定分?jǐn)?shù)的時(shí)候,會增加相應(yīng)的等級。</p><p> 2.2 Java GUI功能</p><p> 利用Java實(shí)現(xiàn)的俄羅斯
31、方塊游戲幾乎能用到Java GUI(Graphical User Interface)的所有方面,其中包括Sun公司為Java提供的兩個(gè)圖形界面類庫。</p><p> 1、AWT(Abstract Windowing Toolkit),中文譯為抽象窗口工具包,AWT是Sun公司最早推出的GUI類庫,其中提供了建立和設(shè)置Java的圖形用戶界面的基本工具。AWT由Java中的java.awt包提供,里面包含了許多
32、可用來建立與平臺無關(guān)的圖形用戶界面(GUI)的類,這些類被稱為構(gòu)件(Components)。</p><p> 2、Swing包是Java Foundation Classes(JFC)的一部分,與AWT的重量級構(gòu)件不同,Swing中大部分是輕量級構(gòu)件。正是這個(gè)原因,Swing幾乎無所不能,不但有各式各樣先進(jìn)的構(gòu)件,而且更為美觀易用。所以一開始使用AWT的程序員很快就轉(zhuǎn)向使用Swing了。</p>
33、<p> 本設(shè)計(jì)中俄羅斯方塊的實(shí)現(xiàn)的界面,主要是采用了Swing類庫。</p><p> (1) 本游戲的基本窗口類包括JFrame、JWindow、JPanel和JDialog等。</p><p> ?。?)在這里原子構(gòu)件會用到標(biāo)簽類JLabel、按鈕類JButton、JColorChooser類文本域JTextField。</p><p> ?。?/p>
34、3)對一個(gè)大的GUI程序而言通常包含各種菜單,俄羅斯方塊游戲中也包含許多種菜單,如JMenu、JMenuItem、JMenuBar等.</p><p> ?。?)俄羅斯方塊中的處理事件一般會用到ActionEvent類、ActionListener類、KeyEvent類、KeyEvent類、KeyListener接口、KeyAdapter類。</p><p> ?。?)俄羅斯方塊的主界面采
35、用的是BorderLayout布局。</p><p> BorderLayout由5個(gè)區(qū)域來放置構(gòu)件,分別標(biāo)記為North、South、East、West和Center。用add方法加入構(gòu)件時(shí)要用一個(gè)標(biāo)記來指定構(gòu)件放到5個(gè)區(qū)域中的哪一個(gè)。</p><p> ?。?)使用Graphics類提供的繪圖方法“public void paint(Graphics g)”可以畫出線條、矩形、圓形等
36、圖形[3]。</p><p> 2.3 多線程的功能</p><p> 俄羅斯方塊游戲的實(shí)現(xiàn)充分利用了Java的線程功能。由于游戲中方塊的動態(tài)性,每個(gè)方塊有一定的生命周期,所以選用線程來實(shí)現(xiàn)方塊。一個(gè)方塊用一個(gè)線程類對象實(shí)現(xiàn),該類繼承于Thread類,當(dāng)一個(gè)方塊出現(xiàn)時(shí)也就表示一個(gè)線程對象產(chǎn)生并開始運(yùn)行。通過對鍵盤消息的響應(yīng),實(shí)現(xiàn)移動、下落、變形等操作。</p><p
37、> 在Java中可通過run()方法為線程指明要完成的任務(wù),用繼承Thread類并覆蓋run方法和通過實(shí)現(xiàn)Runnable接口的類調(diào)用run()方法這兩種技術(shù)為線程提供run()方法[4]。</p><p><b> 第3章 實(shí)現(xiàn)的原理</b></p><p> 游戲塊的運(yùn)行采用多線程(Thread)機(jī)制,界面利用JavaSwing提供的圖形類實(shí)現(xiàn)。游戲
38、采用開源開發(fā)環(huán)境Eclipse。在整個(gè)游戲的開發(fā)過程中涉及了Java基本知識的大部分內(nèi)容。</p><p> 3.1 Java GUI實(shí)驗(yàn)原理</p><p> 3.1.1基本窗口類 </p><p> 圖形用戶界面的程序效果類似于Windows系統(tǒng)下運(yùn)行的程序。在俄羅斯方塊游戲中用到JFrame、JWindow、JPanel和JDialog等幾種窗口類:
39、 </p><p><b> 1、JFrame類</b></p><p> JFrame類與Frame類略微不兼容。與其他所有JFC/Swing頂層容器一樣,JFrame包含一個(gè)JRootPane作為其唯一的子容器,即ContentPane,該內(nèi)容面板直接或間接地容納其他可視構(gòu)件。為了方便地使用add方法及add方法的其他版本,JFrame類重寫了
40、remove和setLayout方法。</p><p> ContentPane始終一直都是是非NULL的。若試圖將其設(shè)置為NULL會導(dǎo)致JFrame拋出異常。默認(rèn)的內(nèi)容窗格上會設(shè)置有BorderLayout管理器。</p><p> 與Frame不同,當(dāng)用戶試圖關(guān)閉窗口時(shí)JFrame知道如何進(jìn)行響應(yīng)。用戶關(guān)閉窗口時(shí)默認(rèn)的行為僅僅是簡單地隱藏JFrame。若要更改默認(rèn)的行為可調(diào)用方法s
41、etDefaultCloseOperation(int)。</p><p> JFrame類的構(gòu)造方法有如下幾個(gè)版本。</p><p> JFrame():構(gòu)造一個(gè)初始時(shí)不可見的新窗口;JFrame(String title):創(chuàng)建一個(gè)新的、初始不可見的、具體指定標(biāo)題的JFrame;JFrame(GraphicsConfigurationgc):以屏幕設(shè)備的指定GraphicsCon
42、figuration和空白標(biāo)題創(chuàng)建一個(gè)JFrame;JFrame(String title,GraphicsConfiguration gc):創(chuàng)建一個(gè)具體的指定標(biāo)題和指定屏幕設(shè)備的GraphicsConfiguration 的 JFrame。</p><p> 2、JWindow類</p><p> JWindow類繼承于Window類。Window類表示一個(gè)沒有邊界和菜單的最高層的
43、窗口,默認(rèn)的是使用BoederLayout布局,在這個(gè)布局中可以包含AWT的其他構(gòu)件。窗口初始化時(shí)也是不可見的。一個(gè)基本的GUI程序應(yīng)該能夠在屏幕上顯示信息,而且至少要包含一個(gè)GUI構(gòu)件使得用戶能夠輕松地響應(yīng)用戶的要求,這就需要用到事件響應(yīng)類。</p><p><b> 3、JPanel類</b></p><p> JPanel類的構(gòu)造方法有如下幾個(gè)版本:<
44、/p><p> ?。?)Jpanel():創(chuàng)建具有雙緩沖和流布局的Jpanel。</p><p> ?。?)Jpanel(boolean isDoubleBuffered):創(chuàng)建具有FlowLayout布局和指定緩沖策略的Jpanel。</p><p> (3)Jpanel(LayoutManager layout):創(chuàng)建具有指定布局管理器的Jpanel。</p
45、><p> ?。?)Jpanel(LayoutManager layout,boolean isDoubleBuffered):創(chuàng)建具有指定布局管理器和緩沖策略的Jpanel。</p><p> 4、JDialog類</p><p> Dialog類具有兩種類型的對話窗口:</p><p> ?。?)模態(tài)對話框(Modal Dialog):這
46、種對話框阻塞它的父對象的輸入,并且必須在它的父對象再次獲得輸入之前被關(guān)閉或自動消失。</p><p> (2)非模態(tài)對話框(Non-modal Dialog):這種對話框并不阻塞它的父對象的輸入,它可以與父對象并存,除非特別聲明,否則一般的對話框是非模態(tài)的。</p><p> JDialog類也分為模態(tài)和非模態(tài)的,并且只能在Dialog和Frame的基礎(chǔ)上創(chuàng)建。若用JDialog作為對
47、話框,則必須實(shí)現(xiàn)對話框中的每一個(gè)構(gòu)件。可利用JOptionPane類顯示一段文字或作一些選擇,它包括一些靜態(tài)方法showxxxDialog,并可產(chǎn)生4種簡單的對話框。</p><p> JDialog類的構(gòu)造方法有如下幾個(gè)版本:</p><p> (1)JDialog():創(chuàng)建一個(gè)沒有標(biāo)題并且沒有指定Frame擁有者的無模式對話框。</p><p> ?。?)J
48、Dialog(Dialog owner):創(chuàng)建一個(gè)沒有標(biāo)題但將指定的Dialog作為其擁有者的無模式對話框。</p><p> ?。?)JDialog(Dialog owner,boolean modal):創(chuàng)建一個(gè)具有指定擁有者和模式的對話框。</p><p> ?。?)JDialog(Dialog owner,String title):創(chuàng)建一個(gè)具有指定標(biāo)題和指定擁有者的無模式對話框。
49、</p><p> ?。?)JDialog(Dialog owner,String title,boolean modal):創(chuàng)建一個(gè)具有指定標(biāo)題、模式和指定擁有者的對話框。</p><p> JDialog的構(gòu)造方法還具有將上述方法中的owner的對象的類型改為JFrame和JWindow的相應(yīng)各個(gè)版本:</p><p> ?。?)JDialog(Frame o
50、wner):創(chuàng)建一個(gè)沒有標(biāo)題但將指定的Frame作為其擁有者的無模式對話框。</p><p> (2)JDialog(Window owner):創(chuàng)建一個(gè)具體指定的Window類型的擁有者和空標(biāo)題的無模式對話框[5]。</p><p><b> 3.1.2原子構(gòu)件</b></p><p> 俄羅斯方塊游戲中用到的原子構(gòu)件很多,這些構(gòu)件的用
51、法比較簡單,下面對俄羅斯方塊游戲中用到的原子構(gòu)件進(jìn)行簡單介紹:</p><p> 1、標(biāo)簽類JLabel</p><p> JLabel類的構(gòu)造方法有如下幾個(gè)版本:</p><p> ?。?)JLabel():創(chuàng)建無圖像并且其標(biāo)題為空字符的JLabel。</p><p> ?。?)JLabel(Icon image):創(chuàng)建具有指定圖像的J
52、Label實(shí)例。</p><p> ?。?)JLabel(Icon image,int horizontalAlignment):創(chuàng)建具有指定圖像和水平對齊方式的JLabel實(shí)例。</p><p> ?。?)JLabel(String text):創(chuàng)建具有指定文本的JLabel實(shí)例。</p><p> ?。?)JlabelI(String text,Icon ico
53、n,int horizontalAlignment):創(chuàng)建具有指定文本、圖像和水平對齊方式的JLabel實(shí)例。</p><p> (6)JLabel(String text,int horizontalAlignment)創(chuàng)建具有指定文本和水平對齊方式的JLabel實(shí)例[6]。</p><p> 2、按鈕類JButton</p><p> JButton類的構(gòu)
54、造方法具有如下5個(gè)版本:</p><p> ?。?) JButton();創(chuàng)建不帶有設(shè)置文本或圖標(biāo)的按鈕。</p><p> (2) JButton(Action a):創(chuàng)建一個(gè)按鈕,其屬性從所提供的Action對象中獲取。</p><p> ?。?) JButton(Icon icon):創(chuàng)建一個(gè)帶圖標(biāo)的按鈕。</p><p> ?。?)
55、 JButton(String text):創(chuàng)建一個(gè)帶文本的按鈕。</p><p> ?。?) JButton(String text,Icon icon):創(chuàng)建一個(gè)帶初始文本和圖標(biāo)的按鈕。</p><p> 3、JColorChooser類</p><p><b> 三個(gè)級別的API:</b></p><p>
56、(1)顯示具有模式顏色選擇器的對話框并返回用戶所選的靜態(tài)方法。</p><p> ?。?)創(chuàng)建顏色選擇器對話框的靜態(tài)方法,可以指定當(dāng)用戶按下其中一個(gè)對話框按鈕時(shí)要調(diào)用的ActionListener。</p><p> ?。?)能直接在任何容器中創(chuàng)建JColorChooser窗格實(shí)例??梢蕴砑覲ropertyChange監(jiān)聽器以檢測當(dāng)前“顏色”屬性何時(shí)更改。</p><p
57、> JcolorChooser類的構(gòu)造方法有如下三個(gè)版本:</p><p> JcolorChooser():創(chuàng)建初始顏色為白色的顏色選擇器窗格; JcolorChooser(Color initialColor):創(chuàng)建具有指定初始顏色的顏色選擇器窗格;JcolorChooser(ColorSelectionModel model):創(chuàng)建具有指定ColorSelection -Model的顏色選擇器窗
58、格。</p><p> 4、文本域JTextField</p><p> JTextField是JTextComponent類的一個(gè)子類,JTextComponent類又是JComponent的一個(gè)子類。JTextField與java.awt.TextField應(yīng)具有源代碼兼容性,當(dāng)光標(biāo)移動到文本域并且按回車鍵時(shí),它觸發(fā)一個(gè)ActionEvent事件。JTextField類構(gòu)造方法有如
59、下4個(gè)版本:</p><p> ?。?)JTextField():構(gòu)造一個(gè)TextField對象。</p><p> ?。?)JTextField(Document doc,String text,int columns):構(gòu)造一個(gè)JTextField,它使用給定的文本存儲模型和給定的列數(shù)。</p><p> ?。?)JTextField(String text)構(gòu)
60、造一個(gè)指定文本初始化的TextField。</p><p> ?。?)JTextField(String text,int columns):構(gòu)造一個(gè)用指定文本和列初始化的TextField。</p><p> 3.1.3菜單類 </p><p><b> 菜單類包括:</b></p><p><b>
61、 1、JMenu</b></p><p> 一個(gè)菜單(JMenu)由多個(gè)菜單項(xiàng)組成并具有一個(gè)標(biāo)題,這個(gè)標(biāo)題出現(xiàn)在菜單條上,當(dāng)單擊這個(gè)標(biāo)題時(shí)這些菜單項(xiàng)立即彈出。選擇一個(gè)菜單項(xiàng)就可以引起一個(gè)動作事件。多個(gè)菜單又可以組合成一個(gè)新的菜單或菜單條,增加在最頂層的窗口(Frame或JFrame)上。</p><p> 菜單的實(shí)現(xiàn)是一個(gè)包含JMenuItem的彈出窗口,用戶選擇JMenu
62、Bar上的項(xiàng)時(shí)會顯示該JMenuItem。除JMenuItem之外,JMenu還可以包含JSeparator。</p><p> 菜單在本質(zhì)上是帶有關(guān)聯(lián)JPopupMenu的按鈕。當(dāng)單擊按鈕時(shí)就會顯示JPopupMenu。如果按鈕位于JMenuBar上則該菜單為頂層窗口。如果按鈕時(shí)另一個(gè)菜單項(xiàng),則JPopupMenu就是右拉菜單。</p><p> 菜單中的菜單項(xiàng)也可以是菜單,可使用它
63、自身的add方法來增加菜單項(xiàng)或菜單對象。</p><p> 2、JMenuItem</p><p> 菜單項(xiàng)在本質(zhì)上是位于列表中的按鈕。當(dāng)用戶單擊按鈕時(shí)則執(zhí)行與菜單項(xiàng)關(guān)聯(lián)的操作。</p><p> 3、JMenuBar</p><p> 一個(gè)菜單條可包含多個(gè)菜單,通過add方法可增加這些菜單對象。菜單條可通過JFrame的setJMe
64、nuBar方法加入到一個(gè)JFrame中。</p><p> 將JMenu對象添加到菜單條以構(gòu)造菜單。當(dāng)用戶選擇JMenu對象時(shí)就會顯示其關(guān)聯(lián)的JPopupMenu,并允許用戶選擇其上的某一個(gè)JMenuItem對象。</p><p> 3.1.4事件處理 </p><p> 大多數(shù)的Java程序通過GUI構(gòu)件(例按鈕、窗口、菜單等)與用戶進(jìn)行交互,俄羅斯方塊游
65、戲也是如此。俄羅斯方塊游戲與用戶最重要的交互活動是用戶通過鍵盤來控制游戲、通過按鈕和菜單來設(shè)置游戲。前者在Java中表現(xiàn)為鍵盤事件,后者變現(xiàn)為動作時(shí)間。在Java中事件由分層的事件類表示,而接口則描述了對特定事件響應(yīng)的方法。想要處理這些事件的類就必須實(shí)現(xiàn)一個(gè)或多個(gè)接口以及這些接口中的方法。下面就討論表示這兩種事件的Java類和相應(yīng)的監(jiān)聽和處理接口:</p><p> 1、ActionEvent類</p&g
66、t;<p> 產(chǎn)生事件的構(gòu)件稱為事件源,每個(gè)事件源可以產(chǎn)生多個(gè)特定類型的事件,這些事件可進(jìn)入到系統(tǒng)級事件隊(duì)列中。構(gòu)件可以注冊監(jiān)聽這些事件的監(jiān)聽接口,并且必須實(shí)現(xiàn)該接口特定的方法以響應(yīng)來自事件源的事件。只有那些已注冊事件監(jiān)聽的構(gòu)件所產(chǎn)生的事件才能傳給Java虛擬機(jī)。如果一個(gè)事件源注冊了多個(gè)監(jiān)聽接口,那么每個(gè)監(jiān)聽接口都會接收到原始事件發(fā)送的信息。</p><p> 2、ActionListener類
67、</p><p> 接口用來說明一些抽象方法,然后由類來實(shí)現(xiàn)這些方法。ActionListener是java.Awt.event包中的一個(gè)接口,它定義了事件的處理方法actionPerformed。</p><p> 一個(gè)實(shí)現(xiàn)ActionListener的類必須包含一個(gè)actionPerformed方法。為了保持這個(gè)方法的簡單性,在if—else—if語句的相應(yīng)分支內(nèi)部將事件交給一些
68、相應(yīng)處理模塊來完成。如果某個(gè)處理方法對其他類是有用的并且不會產(chǎn)生副作用,則應(yīng)使其成為public方法:</p><p> 一個(gè)動作事件的監(jiān)聽與處理可以使用如下規(guī)則:</p><p> ?。?)聲明一個(gè)ActionListener類型的Listener變量并存儲監(jiān)聽接口的引用。</p><p> ?。?)使用某個(gè)構(gòu)件的addActionListener方法將list
69、ener設(shè)置為監(jiān)聽者。 </p><p> (3)創(chuàng)建(或用戶的交互行為產(chǎn)生)一個(gè)action事件,然后調(diào)用listener的ationPerformed方法。</p><p> 在俄羅斯方塊游戲中產(chǎn)生動作事件的構(gòu)件有菜單項(xiàng)和按鈕。這兩個(gè)事件源上的監(jiān)聽者都是通過匿名類產(chǎn)生的,并且在增加監(jiān)聽者(addActionListener)的同時(shí)生成(new)監(jiān)聽者對象,而這個(gè)匿名類主要是定義了
70、相應(yīng)actionPerformed方法。該監(jiān)聽者對象直接綁定到事件源上之后就可以監(jiān)聽該構(gòu)件上的事件。有三個(gè)典型的菜單項(xiàng)和按鈕的處理方式(見附錄)。</p><p> 3、KeyEvent類</p><p> 對于按下鍵和釋放鍵事件,getKeyCode方法將返回事件的KeyCode。對于鍵入事件,getKeyCode方法將返回VK_UNDEFINED。</p><p
71、> 按下鍵和釋放鍵事件是低級別事件,依賴于平臺和鍵盤布局。只要按下或釋放鍵就會生成該事件,它們是發(fā)現(xiàn)不生成字符輸入鍵(如動作鍵、修改鍵等)的唯一方式。通過getKeyCode方法可指出按下或釋放的鍵,該方法返回一個(gè)虛擬鍵碼。</p><p> 按下和釋放鍵盤上的鍵會導(dǎo)致(依次)生成以下鍵事件:</p><p> ?。?)KEY_PRESSED</p><p&g
72、t; (2)KEY_TYPED(只在可生成有效Unicode字符時(shí)產(chǎn)生)。</p><p> ?。?)KEY_RELEASED。</p><p> 但在某些情況下(例如在激活自動重復(fù)或輸入方法時(shí)),該順序可能會有所不同(并且與平臺有關(guān))。</p><p> 4、KeyListener接口</p><p> KeyListener包含的
73、主要抽象方法如下:</p><p> ?。?)void keyPressed(KeyEvent e):按下某個(gè)鍵時(shí)調(diào)用此方法。</p><p> ?。?)void keyPeleased(KeyEvent e):釋放某個(gè)鍵時(shí)調(diào)用此方法。</p><p> ?。?)void keyTyped(KeyEvent e):鍵入某個(gè)鍵時(shí)調(diào)用此方法。</p>&l
74、t;p> 5、KeyAdapter類</p><p> 使用擴(kuò)展KeyAdapter的類創(chuàng)建監(jiān)聽器對象,然后使用組建的addKeyListener方法向該組件注冊此監(jiān)聽器對象。當(dāng)按下、釋放或鍵入某個(gè)鍵時(shí)將調(diào)用監(jiān)聽器對象中的相應(yīng)方法,并將KeyEvent傳遞給它。俄羅斯方塊游戲就是以這種方式實(shí)現(xiàn)游戲的按鈕控制鍵的監(jiān)聽器,如下代碼定義了ControlKeylListener類:</p><
75、;p> private class ControlKeyListener extends KeyAdapter {}。</p><p> 然后可在該類中實(shí)現(xiàn)KeyAdapter的方法[7]。</p><p> 3.1.5布局管理 </p><p> Java使用布局管理起來管理版面布局。布局管理器按照布局說明選擇構(gòu)件的最佳位置,保證布局的總體外觀在不
76、同的操作系統(tǒng)下與Java程序的描述保持一致。在游戲中用到的三個(gè)布局管理器,如表3-1所示。</p><p> 表 3-1 AWT的三個(gè)常用布局管理器</p><p> 3.1.6圖形類與圖形的繪制 </p><p> 由于Frame類繼承于Component類,所以可以通過覆蓋所繼承的paint方法來進(jìn)行繪圖。還有一種很流行的繪圖方法,即創(chuàng)建一個(gè)單獨(dú)的類,這個(gè)
77、類繼承于Canvas類并且覆蓋paint方法。俄羅斯方塊游戲采用的是繼承于Canvas類的方式。</p><p> Canvas繼承于Component類,并繼承了它的paint(Graphics g)、update(Graphics g)以及repaint()方法。Cavas作為圖形對象時(shí),自動調(diào)用repaint方法進(jìn)行更新。在repaint中需要調(diào)用update方法,update方法在清除屏幕后再調(diào)用pai
78、nt方法。使用Cavas作為繪圖工具時(shí)首先創(chuàng)建一個(gè)繼承于Cavas類并且覆蓋paint方法,再將這個(gè)類作為一個(gè)成員加入到類似于Frame或Applet的類中,用某種布局管理器對其進(jìn)行定位[8]。</p><p> 3.2 Java多線程機(jī)制</p><p> 在游戲過程中需要對玩家的控制進(jìn)行實(shí)時(shí)處理,這就涉及到了Java的一個(gè)重要的特性:多線程。在此就不做介紹了。</p>
79、<p> 第4章 設(shè)計(jì)的方案及實(shí)現(xiàn)</p><p><b> 4.1設(shè)計(jì)方案</b></p><p> 4.1.1游戲界面設(shè)計(jì)</p><p> 俄羅斯方塊的游戲界面分為兩個(gè)窗口,即Canvas和Panel。這兩個(gè)窗口并列,但所占的寬度比例不一樣。兩個(gè)窗口之上是菜單條。</p><p><b&g
80、t; 1、菜單的設(shè)計(jì)</b></p><p> 為了方便運(yùn)行,本設(shè)計(jì)將俄羅斯方塊游戲的菜單系統(tǒng)去掉每個(gè)菜單項(xiàng)的具體功能,僅保留菜單的框架和退出功能。</p><p> 它的菜單項(xiàng)沒有實(shí)際功能。</p><p><b> 2、游戲塊的設(shè)計(jì)</b></p><p> 游戲塊是俄羅斯方塊游戲的最基本元素。
81、設(shè)計(jì)思路為:利用Java中提供的圖形類對象并對著色來實(shí)現(xiàn)游戲塊。</p><p> 首先定義一個(gè)類ErsBox來表示一個(gè)游戲單元方格,然后定義一個(gè)游戲方塊,該游戲方塊由4*4個(gè)ErsBox單元格組成,定義4*4的游戲方塊是為了便于實(shí)現(xiàn)前面提到的7種不同的俄羅斯方塊,因?yàn)?種俄羅斯方塊的旋轉(zhuǎn)變化恰好都在長、寬各4個(gè)單元格之內(nèi)。通過著色方式可輕松實(shí)現(xiàn)方塊的28種不同的形態(tài),并對后續(xù)的游戲運(yùn)行控制提供便利。</
82、p><p><b> 3、游戲畫布的設(shè)計(jì)</b></p><p> 游戲畫布是游戲的背景窗口,方塊的運(yùn)動、變形都在畫布中進(jìn)行,畫布的大小為20*12個(gè)ErsBox單元格。另外,游戲畫布還要響應(yīng)鍵盤消息。</p><p><b> 4、控制面板的設(shè)計(jì)</b></p><p> 游戲的控制面板是整個(gè)
83、游戲的框架,其中包括游戲畫布、菜單、游戲提示面板(提示下一個(gè)方塊信息)、控制按鈕(控制游戲的開始,使菜單生效)等[9]。</p><p> 4.1.2游戲控制設(shè)計(jì)</p><p> 游戲中的方塊采用線程實(shí)現(xiàn),一個(gè)方塊由4*4個(gè)ErsBox單元格構(gòu)成,它可以由鍵盤控制移動、下落、變形等。游戲控制由兩個(gè)主要的Thread完成。</p><p> 4.1.3基本類設(shè)
84、計(jì)</p><p> 1、方格類ErsBox</p><p> 實(shí)現(xiàn)Cloneable接口后,使用Object.clone()在一個(gè)類的實(shí)例之間進(jìn)行域?qū)τ虻膹?fù)制。如果沒有實(shí)現(xiàn)這個(gè)接口又調(diào)用了Object的clone()方法將會拋出CloneNotSupportedException異常。通常的作法是:一個(gè)類在實(shí)現(xiàn)Cloneable的接口的同時(shí)用一個(gè)public類型的方法覆蓋Object
85、.clone()方法(Object.clone()在Object中定義為protected類型)[10]。</p><p> 在ErsBox類設(shè)計(jì)中,其主要成員變量和成員方法的說明如表4-1和表4-2所示:</p><p> 表4-1 Ersbox類主要成員變量</p><p> 表4-2 ErsBox類主要成員方法</p><p>
86、 方格類中用一個(gè)Dismension對象表示一個(gè)方格的大小,另外方格類還使用了兩個(gè)與Dismension類有關(guān)的方法,分別用來獲得和設(shè)置方格的大小。Dismension類封裝了一個(gè)構(gòu)件的高度和寬度。</p><p> 2、方塊類ErsBlock</p><p> 游戲的主要實(shí)體俄羅斯方塊由4*4個(gè)方格(ErsBox)構(gòu)成。這個(gè)塊不斷產(chǎn)生和消失,并且還要不斷變化(翻轉(zhuǎn)),因此可用線程來實(shí)
87、現(xiàn),該類繼承于線程類Thread。</p><p> 該類用4位16進(jìn)制數(shù)表示一個(gè)4*4個(gè)方格組成的方塊,即一個(gè)方塊的狀態(tài)。在這里1為被補(bǔ)充,0為不被補(bǔ)充。這28種狀態(tài)可用一個(gè)STYLES數(shù)組表示出來。</p><p> 一個(gè)STYLES中的元素使用一個(gè)整數(shù)表示的,如橫長條是用0x0f00表示,再用key=0z08000與STYLES的某個(gè)元素style進(jìn)行“與”運(yùn)算,即取出了styl
88、e中的第一位,這一位如果是1,則表示對應(yīng)的方格在該方塊中是要用色彩來顯示大的,因此產(chǎn)生一個(gè)方格,即一個(gè)ErsBox對象。檢查之后再作位移運(yùn)算key>>=1,如0x8000移位后變成0x4000,再利用它進(jìn)行檢查與style第二位對應(yīng)方塊的位置是否應(yīng)該產(chǎn)生一個(gè)有色彩的方格,如此下去,這個(gè)二重for循環(huán)一共要檢查方塊的16個(gè)方塊的位置。</p><p> 鑒于上面的表示方法,ErsBlock類的構(gòu)造方法
89、以一個(gè)STYLES、該方塊所在的畫布及其在畫布中的坐標(biāo)、游戲等級作為參數(shù)。</p><p> 構(gòu)造方法中的二循環(huán)就是在創(chuàng)建16個(gè)方格。利用display()方法可將當(dāng)前方塊在畫布的對應(yīng)位置上顯示出來。ErsBlock類的主要成員變量和主要成員方法分別由表4-3和表4-4所示。</p><p> 表4-3 ErsBlock的主要成員變量</p><p> 表4-
90、4 ErsBlock主要成員方法</p><p> 由于游戲中方塊的動態(tài)性,每個(gè)方塊有一定的生命期,用線程實(shí)現(xiàn)方塊是最好不過了。方塊用一個(gè)類實(shí)現(xiàn),該類直接繼承線程類Thread,所以一個(gè)方塊的出現(xiàn)就是一個(gè)線程對象的產(chǎn)生并運(yùn)行。它可以由鍵盤控制移動、下落、變形等。</p><p> 該線程類的主體是run()方法,該方法主要控制方塊的下落,其中下落的速度由sleep方法的參數(shù)來控制,該參
91、數(shù)的值又是由一個(gè)基本值和游戲的級別來控制,級別越高則休眠的時(shí)間越短且下落越快。</p><p> 在這個(gè)類里利用moving變量控制方塊的下落過程,moveTo()方法移動到某個(gè)位置時(shí)不成功或stopMove()要停止方塊移動時(shí)都是設(shè)置moving變量為假,這樣該線程即可正常終止。</p><p> 3、游戲主類ErsBlocksGame負(fù)責(zé)游戲的全局控制。它是一個(gè)JFrame類,即以
92、窗口的形式出現(xiàn)的。JFrame是Swing包中與Frame對應(yīng)的類,功能與Frame類似。從界面上來講主類中包含一個(gè)GrameCanvas畫布類的實(shí)例和一個(gè)控制面板的實(shí)例。</p><p> 4、控制面板類ControlPanel</p><p> 控制面板是俄羅斯方塊的主要控制部分,從前面的總體結(jié)構(gòu)可以看出該窗口是一個(gè)面板,繼承于JPanel類,該面板分為三個(gè)部分,即提示下一個(gè)游戲方
93、塊的面板、顯示游戲當(dāng)前信息的面板、存放控制按鈕的面板。</p><p> 5、畫布類GameCanvas</p><p> 畫布類GameCanva是該游戲中的一個(gè)窗口。它是用一個(gè)面板來實(shí)現(xiàn)的,是一個(gè)繼承于JPanel的類。它的大小完全是根據(jù)方格來拼接起來的。</p><p><b> 4.2 程序?qū)崿F(xiàn)</b></p>&l
94、t;p> 4.2.1菜單類的實(shí)現(xiàn)</p><p><b> 1、菜單系統(tǒng)</b></p><p> 菜單系統(tǒng)分為兩部分,一部分是菜單聲明,另一部分是菜單的創(chuàng)建:</p><p> ?。?)菜單的聲明部分</p><p> 菜單的聲明部分的代碼見附錄。</p><p><b>
95、; ?。?)菜單的創(chuàng)建</b></p><p> 菜單具體的創(chuàng)建過程以及菜單觸發(fā)的動作定義由下面的createMenu方法進(jìn)行設(shè)置,其細(xì)節(jié)在程序的注釋中說明。(代碼見附錄)</p><p> 2、菜單項(xiàng)對應(yīng)的操作設(shè)置:</p><p> (1)快捷鍵的設(shè)置菜單</p><p> 首先為“暫?!焙汀崩^續(xù)”菜單項(xiàng)設(shè)置快捷鍵,該
96、功能要用KeyStroke類,該類表示一個(gè)鍵盤或等價(jià)的設(shè)備上的一個(gè)動作,它可以對應(yīng)一個(gè)特定的鍵的按下和松開操作,就像KeyEvent類中的KEY_PRESSED和KEY_Event動作一樣;也可以對應(yīng)鍵入一個(gè)特定的Java字符,就像KeyEvent類中的KEY_TYPED動作一樣;KeyStroke還可說明在特定動作中匹配出現(xiàn)的組合鍵,如Alt、Shift、Control等鍵的修飾符。</p><p> ?。?)
97、方塊顏色和背景顏色的選擇菜單</p><p> 該程序中用到了JColorChooser類,該類可以讓用戶自己手工選擇色彩,這個(gè)類提供了三個(gè)級別API:</p><p> 一個(gè)靜態(tài)方法顯示一個(gè)模態(tài)的色彩選擇對話框,然后返回用戶選擇的色彩。一個(gè)靜態(tài)方法創(chuàng)建一個(gè)色彩選擇對話框,對這個(gè)對話框ActionListener監(jiān)聽用戶按下的色彩選擇按鈕。在任何容器內(nèi)直接創(chuàng)建JColorChooser
98、邊條的實(shí)例,可加入PropertyChange監(jiān)聽接口來檢測當(dāng)前色彩的變化。</p><p> 這些功能在俄羅斯方塊游戲的方塊顏色和背景顏色的選擇菜單中得到了很好地應(yīng)用。其具體代碼見附錄。</p><p> 無論是選擇方塊的顏色還是選擇背景顏色,選中相應(yīng)的菜單項(xiàng)后都會彈出一個(gè)對話框,該對話框上有三個(gè)標(biāo)簽,分別是HSB、樣品和RGB。</p><p> ?。?)菜
99、單響應(yīng)的設(shè)置</p><p> 設(shè)置菜單的響應(yīng),即指定的當(dāng)用戶某種行為后應(yīng)采取相應(yīng)的動作。完成該功能的語句如下:</p><p> 菜單項(xiàng).addActionListerner(動作監(jiān)聽機(jī)器);</p><p> 而動作監(jiān)聽器又是以匿名類的形式實(shí)現(xiàn)的。其語句形式為:</p><p> New ActionListerner(){ /
100、監(jiān)聽方法的描述/ }</p><p> 各菜單項(xiàng)增加監(jiān)聽器和監(jiān)聽接口具體的描述語句見附錄。</p><p> 4.2.2方格類的實(shí)現(xiàn)</p><p> 俄羅斯方塊游戲的<行數(shù)><列數(shù)>個(gè)方格是用復(fù)制的方法產(chǎn)生的,因此要使方格類實(shí)現(xiàn)Cloneable接口。</p><p> 這里可以看出方格類并沒有畫出方格,只是
101、用顏色代表這是一個(gè)什么樣的方格。方格的畫出實(shí)在方塊類中進(jìn)行的。</p><p> 4.2.3方塊類的實(shí)現(xiàn) </p><p> 方塊類的實(shí)現(xiàn)主要使用位運(yùn)算和位移運(yùn)算取出表示一個(gè)方塊的信息,然后根據(jù)這些信息用前景顏色或背景顏色畫出方塊。</p><p> ErsBlock類的構(gòu)造的方法可用位運(yùn)算或位移運(yùn)算產(chǎn)生一個(gè)與STYLES中的元素對應(yīng)的方塊。</p>
102、;<p> 除了給出的程序注釋外,下面再對幾個(gè)重要的方法進(jìn)行討論。</p><p> ErsBlock類作為一個(gè)線程類,它最重要的方法就是run方法。不難看出整個(gè)run方法是由一個(gè)whlie循環(huán)控制的,而whlie循環(huán)式根據(jù)moving布爾變量控制的。這是一個(gè)線程的技巧,其一般形式如下:</p><p> Public void run()</p>&l
103、t;p> { while (moving)</p><p> { / your code here /}</p><p><b> }</b></p><p> 由于線程中不再使用stop()方法,因此要使用一個(gè)moving布爾變量作為循環(huán)的控制變量,如有必要可在任何時(shí)候設(shè)置moving為假,這樣即可終止線程的執(zhí)行。<
104、/p><p> 在這個(gè)類里也正是利用moving變量控制方塊的下落過程,moveTo()方法移動到某個(gè)位置時(shí)不成功或stopMove()要停止方塊移動時(shí),都是設(shè)置moving變量為假,這樣即可使線程正常終止。</p><p> 該類的moveTo(int newRow,int newCol)方法也值得注意,這是一個(gè)同步方法,該方法通過對成員變量x、y進(jìn)行操作來控制方塊。由于不能同時(shí)都來控制
105、方塊,要有序地進(jìn)行,所以設(shè)置為同步方法。該方法在通過isMoveAble檢驗(yàn)可以移動并且moving為真時(shí)才把方塊定位在新的位置。</p><p> 4.2.4主類的實(shí)現(xiàn) </p><p> 俄羅斯方塊游戲的主類ErsBlocksGrame的輪廓是一個(gè)JFrame類,初始化的許多工作都是圍繞窗口展開的。在它的主要方法和內(nèi)部類中構(gòu)造方法完成了窗口標(biāo)題的顯示、窗口的調(diào)整、菜單的創(chuàng)建、游戲面
106、板和控制面板的創(chuàng)建、窗口的布局、窗口及其窗口中構(gòu)建監(jiān)聽器的加載:私有類Game描述了一輪游戲的過程:main方法調(diào)用構(gòu)造方法初始化當(dāng)前類的實(shí)例,從而啟動了整個(gè)程序的執(zhí)行[11]。</p><p> 4.2.5控制面板類的實(shí)現(xiàn) </p><p> 控制面板類ControlPanel主要按照前面的設(shè)計(jì)框架填入響應(yīng)的內(nèi)容。</p><p> 提示面板TipPanel
107、類的要點(diǎn)是兩個(gè)類的構(gòu)造方法,構(gòu)造方法1創(chuàng)建沒有顏色的方塊,構(gòu)造方法2調(diào)用構(gòu)造方法1創(chuàng)建一個(gè)方塊后,再設(shè)置前景色和背景色。setStyle方法設(shè)置預(yù)顯窗口的方塊樣式,即ErsBlock類的STYLES中的28個(gè)值之一,然后由paintComponent方法繪制出這個(gè)即將出現(xiàn)的方塊。</p><p> 4.2.6游戲畫布類的實(shí)現(xiàn) </p><p> 游戲畫布類GrameCanvas是該游戲
108、的窗口,該窗口完全是根據(jù)方格拼接起來的,畫布類GrameCanvas的主要功能是逐行繪制方格,如果某個(gè)方格不顯示設(shè)置這個(gè)方格顏色為背景顏色,否則置為前景色。</p><p><b> 第5章 測試</b></p><p> 5.1 菜單界面測試</p><p> 1、下圖為16進(jìn)制數(shù)0*0f00表示的方塊,此方塊在游戲界面中能顯示出下一個(gè)
109、方塊的形狀:</p><p> 2、此游戲的菜單欄中共有四個(gè)菜單,其中“游戲”這個(gè)菜單下有六個(gè)菜單項(xiàng),每個(gè)菜單項(xiàng)都有它自己的功能。點(diǎn)擊新游戲可以結(jié)束上次的游戲進(jìn)入下一次的新的游戲;設(shè)置方塊顏色和背景顏色是根據(jù)自己的喜好給方塊和背景改顏色的;增加難度和降低難度也是根據(jù)自己的情況來選擇難度級別的;點(diǎn)擊退出鍵時(shí),游戲結(jié)束并且退出,此界面將關(guān)閉。如下圖:</p><p> 3、無論是方塊的顏色
110、還是背景的顏色都可以進(jìn)行設(shè)置,“游戲”菜單下的第二個(gè)和第三個(gè)菜單項(xiàng)就是實(shí)現(xiàn)該功能的。選中相應(yīng)的菜單項(xiàng)都會彈出一個(gè)對話框,該對話框上有五個(gè)標(biāo)簽,分別是示例、HSV、HSL、RGB和CMYK。在這里就不一一給出。如下圖所示:</p><p> 4、“控制”菜單下有四個(gè)菜單項(xiàng),分別有開始、暫停、繼續(xù)、停止。按開始時(shí),可以使暫停的游戲接著上回的地方繼續(xù)游戲。如下圖:</p><p> 5、“窗
111、口風(fēng)格”菜單下有三個(gè)菜單項(xiàng),每個(gè)菜單項(xiàng)可以設(shè)置窗口的風(fēng)格。此時(shí)的界面顯示的是Metal風(fēng)格。</p><p> 6、“幫助”菜單下可以看到有兩個(gè)菜單項(xiàng),作者和版本。如下圖所示:</p><p><b> 5.2 功能測試</b></p><p> 1、俄羅斯方塊游戲未開始時(shí)的界面:</p><p> 2、點(diǎ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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 俄羅斯方塊游戲畢業(yè)論文
- 俄羅斯方塊游戲java畢業(yè)論文
- 俄羅斯方塊游戲開發(fā)畢業(yè)論文
- 畢業(yè)論文(java游戲俄羅斯方塊)
- 俄羅斯方塊分組對抗游戲的實(shí)現(xiàn)畢業(yè)論文
- 俄羅斯方塊分組對抗游戲的實(shí)現(xiàn)畢業(yè)論文
- 俄羅斯方塊畢業(yè)論文
- 畢業(yè)論文俄羅斯方塊的實(shí)現(xiàn)系統(tǒng)
- java俄羅斯方塊畢業(yè)論文
- 畢業(yè)論文----java俄羅斯方塊
- 基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲畢業(yè)論文
- 畢業(yè)論文-java俄羅斯方塊
- 基于fpga的俄羅斯方塊游戲設(shè)計(jì)畢業(yè)論文
- 基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲-畢業(yè)論文
- 基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲-畢業(yè)論文
- 畢業(yè)論文——基于單片機(jī)實(shí)現(xiàn)的俄羅斯方塊游戲
- 基于fpga的俄羅斯方塊游戲設(shè)計(jì)畢業(yè)論文
- 俄羅斯方塊游戲畢業(yè)設(shè)計(jì)
- 畢業(yè)論文范文——俄羅斯方塊游戲課程設(shè)計(jì)
- 俄羅斯方塊論文
評論
0/150
提交評論