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