java俄羅斯方塊畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  第1章 緒論</b></p><p><b>  1.1 游戲的歷史</b></p><p>  游戲是人類生活的重要組成部分,從第一個(gè)電子游戲開(kāi)發(fā)至今已經(jīng)有30多年,在這個(gè)短暫的時(shí)期里,隨著硬件水平的提高,游戲開(kāi)發(fā)新技術(shù)層出不窮,經(jīng)典游戲比比皆是。</p><p>  1.1.1 從頭談起

2、</p><p>  真正的電子游戲機(jī)產(chǎn)生于20世紀(jì)70年代。1971年,麻省理工學(xué)院的學(xué)生Nolan Bushnell設(shè)計(jì)了世界上的第一個(gè)業(yè)務(wù)用游戲機(jī)(俗名街機(jī)),叫做《電腦空間》。這臺(tái)游戲機(jī)用一臺(tái)黑白電視機(jī)作為顯示屏,用一個(gè)控制柄作為操縱器,不過(guò)由于市場(chǎng)因素這款游戲以失敗告終。但是最后他在電子游戲的發(fā)展上取得了非凡的成就。</p><p>  上面介紹的是專用機(jī)游戲的歷史,而最早的電腦

3、游戲可以追溯到1972年,一個(gè)叫Crowther的工程師用當(dāng)時(shí)最流行的主機(jī)――DEC公司的PDP-10編寫一段簡(jiǎn)單的FORTRAN程序。在這個(gè)程序里,Crowther設(shè)計(jì)了一張地圖,地圖上不規(guī)則的分布著陷阱,游戲者必須尋找路徑避開(kāi)陷阱。這個(gè)程序被公認(rèn)為是最早的電腦游戲程序。</p><p>  1989年,BroderBund公司的設(shè)計(jì)師喬丹.麥克納根據(jù)阿拉伯民族的古老傳說(shuō)《一千零一夜》在Apple平臺(tái)上制作了一

4、部動(dòng)作冒險(xiǎn)相結(jié)合的電腦游戲――波斯王子。這個(gè)游戲獲得了第一作,它代表了當(dāng)時(shí)電腦技術(shù)的最高水平。</p><p>  1986年,任天堂公司發(fā)售了一款真正的游戲巨作――超級(jí)馬里奧。</p><p>  20世紀(jì)80年代IBM PC兼容機(jī)的出現(xiàn)打破了Apple公司的壟斷地位。</p><p>  到了20世紀(jì)90年代,游戲業(yè)才真正成熟起來(lái),成為了一種產(chǎn)業(yè)。</p&

5、gt;<p>  由于PC機(jī)價(jià)格非常低而且硬件速度越來(lái)越快,游戲逐漸成為人們生活中不可缺少的一部分。游戲產(chǎn)業(yè)也逐漸發(fā)展成熟。</p><p>  1.1.2 圖形硬件的革命</p><p>  圖形硬件的飛速發(fā)展是近些年來(lái)的事情,部分原因是來(lái)自工業(yè)方面的壓力,例如在軍事和醫(yī)療方面對(duì)于實(shí)時(shí)圖形的需求很強(qiáng)烈,而交互娛樂(lè)產(chǎn)業(yè)也極大的推動(dòng)了圖形硬件的發(fā)展。技術(shù)上的因素同樣也推動(dòng)著圖形

6、硬件的發(fā)展,許多圖形算法可以很容易地表達(dá)為并行方式,這樣硬件執(zhí)行的效率變得很高。摩樂(lè)定律也起了作用,越來(lái)越多的晶體管可以集成到一塊單獨(dú)的芯片上。</p><p>  在所謂的GPU(圖形處理器)概念出現(xiàn)以前,特殊的圖形硬件只出現(xiàn)在諸如SGI和E&S系統(tǒng)里面,這些硬件價(jià)格太昂貴,不過(guò)這些公司提供了第一代基于硬件的頂點(diǎn)變換和紋理映射的解決方案。</p><p>  1.2游戲的意義與內(nèi)

7、涵</p><p>  游戲這個(gè)名稱一直就存在于每個(gè)人的日常生活中,如猜拳游戲、猜謎游戲、大地游戲、球類游戲等,林林總總,不勝枚舉,甚至于有些流行歌曲把人生也比喻為游戲,好比“一場(chǎng)游戲一場(chǎng)夢(mèng)” 。因此,游戲?qū)τ诂F(xiàn)代人的成長(zhǎng)歷程,絕對(duì)是一個(gè)不可或缺的重要角色。</p><p>  1.2.1 游戲的組成要素</p><p>  “游戲”,最簡(jiǎn)單的定義,就是一種供人們娛

8、樂(lè)休閑的快樂(lè)元素。從更專業(yè)的角度形容, “游戲”是具有特定行為模式、規(guī)則條件、身心娛樂(lè)及輸贏的一種行為表現(xiàn)。這種行為表現(xiàn)具備以下4個(gè)要素。</p><p>  行為模式:“游戲”最簡(jiǎn)單的要素就是游戲有特定的流程模式,這種流程模式貫穿于整個(gè)游戲的行為,用戶必須依照它的模式流程來(lái)執(zhí)行。倘若一種游戲沒(méi)有了特定的行為模式,那么就沒(méi)有執(zhí)行的行為;在沒(méi)有執(zhí)行的行為之后,這個(gè)游戲也玩不下去了。舉個(gè)例子來(lái)說(shuō),如果猜拳游戲沒(méi)有了剪

9、刀、石頭、布等行為模式,那么這還能叫做“猜拳游戲” 嗎?所以不管游戲的流程有多么復(fù)雜還是多么簡(jiǎn)單,一定要有特定的行為模式。</p><p>  條件規(guī)則:當(dāng)游戲有了一定的行為模式后,接著就必須制定出一系列的條件規(guī)則。簡(jiǎn)單來(lái)說(shuō),這些游戲的條件規(guī)則就是大家必須去遵守的游戲行為守則,只要是大家一致以為的游戲行為,在游戲中,玩家就必須遵守它,如果不遵守這種游戲行為,那么就失去了公平性。如同一種簡(jiǎn)單的球賽,打球的英文解釋可

10、以用PLAY GAME來(lái)加以說(shuō)明,按照英文字面上的解釋,它就是執(zhí)行游戲的行為,而球賽必須有一定的條件規(guī)則,并且參與者都要必須去遵守它,不能遵守它就叫作“犯規(guī)”。所以不管是什么游戲,它都會(huì)具備一組規(guī)則條件,在游戲進(jìn)行的時(shí)候才會(huì)有足夠的公平性。</p><p>  娛樂(lè)身心:一種游戲所帶來(lái)的娛樂(lè)性,關(guān)鍵就在于為玩家所帶來(lái)的刺激感,這也是游戲的精華所在。簡(jiǎn)單來(lái)說(shuō),不管是很多人玩的游戲,還是一個(gè)人玩的單機(jī)游戲,游戲本身就

11、會(huì)存在它的娛樂(lè)和刺激性,使得玩家們想要去玩它。</p><p>  輸贏:其實(shí)針對(duì)游戲而言,輸贏是所有游戲的最終目的。一個(gè)沒(méi)有輸贏的游戲,也就沒(méi)有了它存在的意義,如同我們常常接觸到的猜拳游戲,說(shuō)穿了最終目的就是為了分出勝負(fù)而己。</p><p>  一般而言,游戲又可以分為動(dòng)態(tài)和靜態(tài)兩種形態(tài)。動(dòng)態(tài)的游戲必須配合肢體動(dòng)作,如猜拳游戲;而靜態(tài)游戲則是較偏向思考的行為,如同紙上游戲。然而不管是動(dòng)

12、態(tài)或是靜態(tài)游戲,只要具備上述4項(xiàng)組成要素,都可以將它稱為“游戲”。</p><p>  1.3 俄羅斯方塊游戲</p><p>  俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,它曾經(jīng)造成的轟動(dòng)與造成的經(jīng)濟(jì)價(jià)值可以說(shuō)是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人Alex Pajitnov制作的,它看似簡(jiǎn)單但卻變化無(wú)窮,令人上癮。</p><p>  

13、但是經(jīng)過(guò)時(shí)代的變遷,當(dāng)初簡(jiǎn)單卻變化無(wú)窮的俄羅斯方塊游戲如今卻已失去了它的市場(chǎng),究其原因,主要是因?yàn)橛螒蛴布约凹夹g(shù)的革新使得優(yōu)秀的游戲接二連三地推出,而俄羅斯方塊游戲作為一款形式、內(nèi)容過(guò)于簡(jiǎn)單的游戲勢(shì)必經(jīng)受不住時(shí)間的沖擊的。</p><p>  現(xiàn)在作者將改寫這個(gè)固定的游戲模式,通過(guò)增加一系列的新功能,開(kāi)發(fā)出一種全新的俄羅斯方塊游戲,使游戲用戶重新燃起對(duì)俄羅斯方塊游戲的熱愛(ài)。</p><p&g

14、t;  第2章 可行性研究</p><p><b>  2.1 設(shè)計(jì)目的</b></p><p>  綜合運(yùn)用在校期間所學(xué)理論知識(shí)和技能,設(shè)計(jì)開(kāi)發(fā)俄羅斯方塊,使自己熟悉應(yīng)用系統(tǒng)的開(kāi)發(fā)過(guò)程,培養(yǎng)獨(dú)立思考能力,檢驗(yàn)學(xué)習(xí)效果和動(dòng)手能力,提高工程實(shí)踐能力,為將來(lái)實(shí)際工作打下堅(jiān)實(shí)的基礎(chǔ)。</p><p>  2.2 可行性研究前提</p>

15、<p>  基本需求:系統(tǒng)開(kāi)發(fā)的總體任務(wù)是實(shí)現(xiàn)游戲的可操作性、美觀性、及時(shí)性,及適當(dāng)?shù)墓δ軘U(kuò)展。</p><p>  主要開(kāi)發(fā)目標(biāo):采用結(jié)構(gòu)化設(shè)計(jì)方法,開(kāi)發(fā)出一個(gè)可操作性、美觀性、及時(shí)性的游戲,并通過(guò)此次軟件開(kāi)發(fā)過(guò)程全面提高自身的綜合素質(zhì)。</p><p>  可行性研究所采用的方法和步驟:通過(guò)研究分析俄羅斯方塊所具備的能力及實(shí)現(xiàn)的方法、確定主體結(jié)構(gòu)。利用現(xiàn)階段我所能達(dá)到的能力

16、,以最簡(jiǎn)潔、最容易的辦法,邊開(kāi)發(fā)邊測(cè)試邊修改,實(shí)現(xiàn)一個(gè)有一定可玩性的游戲軟件。</p><p>  評(píng)價(jià)尺度:本游戲盡量追求游戲操作的合理性及正確性,但是仍不排除會(huì)出現(xiàn)一些偶然性的錯(cuò)誤;同時(shí)游戲也盡量追求界面的美觀性及功能的豐富性,但是基于時(shí)間的關(guān)系,可能會(huì)有極少數(shù)的拓展功能不能實(shí)現(xiàn)。</p><p><b>  2.3 可行性分析</b></p>&l

17、t;p>  管理可行性: 本游戲設(shè)計(jì)的目的只在于提高自身實(shí)踐水平,并不對(duì)外發(fā)布,因此完全具有管理可行性。</p><p>  經(jīng)濟(jì)可行性:由于本游戲的主要背景是畢業(yè)課程設(shè)計(jì),不注重直接的經(jīng)濟(jì)效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對(duì)自身的經(jīng)濟(jì)要求也不高,只要有一臺(tái)電腦便可,所以不用考慮到經(jīng)濟(jì)問(wèn)題。</p><p>  技術(shù)可行性:可用與本游戲的編程語(yǔ)言有VB,VC,Jav

18、a,Delphi等,考慮到用于編寫程序的困難度,和對(duì)語(yǔ)言的了解程度,選擇JAVA作為編程語(yǔ)言。需要對(duì)圖形界面設(shè)計(jì)、事件處理、多媒體、網(wǎng)絡(luò)編程等有一定了解。</p><p>  社會(huì)可行性:本游戲的開(kāi)發(fā)作為畢業(yè)課程設(shè)計(jì)以鞏固先前所學(xué)的知識(shí),以個(gè)人為單位,僅供個(gè)人平常娛樂(lè)所用,無(wú)須考慮有可能造成的社會(huì)影響,不用考慮到法律、版權(quán)等的社會(huì)因素,所以在這方面是完全可行的。</p><p><b

19、>  2.4 結(jié)論</b></p><p>  綜上所述,本游戲軟件的技術(shù)成熟、完備。各方面均無(wú)重大問(wèn)題,因此本游戲軟件可開(kāi)始著手編寫</p><p><b>  第3章 需求分析</b></p><p><b>  3.1 引言</b></p><p>  對(duì)軟件需求完全理解對(duì)于

20、軟件開(kāi)發(fā)工作的成功是至關(guān)重要的,需求說(shuō)明的任務(wù)是發(fā)現(xiàn)、規(guī)范的過(guò)程,有益于提高軟件開(kāi)發(fā)過(guò)程中的能見(jiàn)度,便于對(duì)軟件開(kāi)發(fā)過(guò)程中的控制與管理,便于采用工程方法開(kāi)發(fā)軟件,提高軟件的質(zhì)量,便于開(kāi)發(fā)人員、維護(hù)人員、管理人員之間的交流、協(xié)作,并作為工作成果的原始依據(jù),并且在向潛在用戶傳遞軟件功能、性能需求,使其能夠判斷該軟件是否與自己的需求相關(guān)。</p><p>  3.2 游戲功能需求</p><p>

21、  3.2.1 游戲界面需求</p><p>  良好的用戶界面設(shè)計(jì)。本游戲主要有三個(gè)界面,一是用于主游戲區(qū)的游戲畫布,用來(lái)顯示游戲時(shí)運(yùn)動(dòng)和落下去的方塊,二是用于控制游戲的各種控件以及顯現(xiàn)游戲信息的一些組件,這是一個(gè)面板,三是進(jìn)行網(wǎng)絡(luò)對(duì)戰(zhàn)時(shí)用以顯示對(duì)方游戲信息的面板。</p><p>  3.2.2 游戲控制需求</p><p>  方塊下落時(shí),可通過(guò)鍵盤方向鍵(上

22、、下、左、右鍵)對(duì)該方塊進(jìn)行向上(變形),向下(加速)、向左、向右移動(dòng)。</p><p>  3.2.3 圖形顯示需求</p><p>  隨機(jī)給出不同的形狀(長(zhǎng)條形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充給定的區(qū)域,若填滿一條便消掉,記分,當(dāng)達(dá)到一定的分?jǐn)?shù)時(shí),過(guò)關(guān),一共設(shè)置十關(guān),每關(guān)方塊下落的速度不同,游戲中先結(jié)束的一方為本局輸家,十關(guān)過(guò)后,勝出局?jǐn)?shù)多的為贏家。<

23、/p><p>  3.2.4 音樂(lè)播放需求</p><p>  本游戲,應(yīng)該具備播放背景音樂(lè)和發(fā)生相應(yīng)操作時(shí)的音效的功能,比如,方塊落下、滿行消除時(shí)的音效。</p><p>  3.2.5 道具使用需求</p><p>  本游戲,可以具備幾種道具的使用功能,比如,這些道具可以是某些特殊的方塊,比如,可以定義一種旋轉(zhuǎn)的方塊,也可以定義一種炸彈,能

24、夠炸毀一定數(shù)量的方塊,以增強(qiáng)游戲的趣味性。</p><p>  3.2.6 網(wǎng)絡(luò)對(duì)戰(zhàn)需求</p><p>  本游戲,具備網(wǎng)絡(luò)對(duì)戰(zhàn)功能,所以要求玩家能夠看到對(duì)方的游戲信息。</p><p>  3.3 運(yùn)行環(huán)境及系統(tǒng)性能的需求</p><p>  本游戲?qū)\(yùn)行環(huán)境及系統(tǒng)性能的需求如表3.1所示:</p><p>  表

25、3.1 游戲?qū)\(yùn)行環(huán)境及系統(tǒng)性能需求分析表</p><p><b>  3.4 接口需求</b></p><p>  本軟件需求通過(guò)鍵盤進(jìn)行操作,在Windows的操作系統(tǒng)下,利用鍵盤的上、下、左、右鍵對(duì)方塊進(jìn)行移動(dòng)變形,要使用鍵盤的接口事件。</p><p><b>  3.5 方案論證</b></p>&

26、lt;p>  可用于較好地實(shí)現(xiàn)俄羅斯方塊的語(yǔ)言有C++、VB、JAVA,所以客觀上說(shuō)來(lái),可用Jave,VB和C++這三種語(yǔ)言編寫俄羅斯方塊程序。下面結(jié)合自身實(shí)際情況分別論述三種語(yǔ)言的優(yōu)缺點(diǎn)并從中選擇一種適合的編寫語(yǔ)言。</p><p>  3.6.1 VB的特點(diǎn)</p><p>  VB是完全中文化的環(huán)境使用,語(yǔ)句生成器和快速提示幫助使用戶不必記憶成千上萬(wàn)的屬性和方法,在較短的時(shí)間內(nèi)

27、就能開(kāi)發(fā)出功能強(qiáng)大的應(yīng)用程序。Internet應(yīng)用程序的開(kāi)發(fā)功能更加強(qiáng)大和容易,支持動(dòng)態(tài)HTML技術(shù)的應(yīng)用程序。種類繁多,功能強(qiáng)大的多媒體控件,能幫助用戶在較短的時(shí)間內(nèi)用較少的語(yǔ)句編寫出圖文聲像并茂的多媒體程序。能對(duì)多種數(shù)據(jù)庫(kù)進(jìn)行讀寫操作。它所提供的可視化數(shù)據(jù)管理器能幫助用戶構(gòu)造多種類型的數(shù)據(jù)庫(kù)。用戶自定義類型可以作為參數(shù)或作為公共屬性和方法的返回值,函數(shù)可以返回?cái)?shù)組變量,動(dòng)態(tài)數(shù)組可以賦值,文件系統(tǒng)對(duì)象,按名調(diào)用,增強(qiáng)創(chuàng)建對(duì)象函數(shù)和St

28、rConv函數(shù)。應(yīng)用程序安裝向?qū)軒椭脩糇詣?dòng)生成具有一定功能的應(yīng)用程序,加快了程序的開(kāi)發(fā)速度。</p><p>  3.6.2 C++的特點(diǎn)</p><p>  C++是對(duì)C語(yǔ)言的擴(kuò)充,擴(kuò)充的絕大部分來(lái)自著名語(yǔ)言中的最佳特性:從SIMULA 67中吸取了類,從ALGOL 68中吸取了運(yùn)算符一名多用、引用和在分程序中任何地方說(shuō)明變量,綜合了Ada的類屬和Clu的模塊特點(diǎn),從BCPL中吸取異

29、常處理,從BCPL中吸取了用//表示注釋。</p><p>  C++保持了C的緊湊、靈活、高效和易移植強(qiáng)的優(yōu)點(diǎn),它對(duì)數(shù)據(jù)抽象的支持主要在于類概念和機(jī)制,對(duì)面向?qū)ο箫L(fēng)范的支持主要通過(guò)虛擬函數(shù)。C++既有數(shù)據(jù)抽象和面向?qū)ο竽芰?,語(yǔ)言運(yùn)行性能高多,加上C語(yǔ)言的普及,而從C至C++的過(guò)渡較為平滑,以及C++與C的兼容程度可使數(shù)據(jù)巨大的C程序能方便地在C++環(huán)境中重用。</p><p>  盡管C

30、++當(dāng)初的設(shè)計(jì)本意是幫助管理大型程序,但其用途并不僅限于此。C++的面向?qū)ο蟮奶匦钥捎行У赜糜趯?shí)際的程序設(shè)計(jì)工作。C++常常用于設(shè)計(jì)編輯器、數(shù)據(jù)庫(kù)、個(gè)人文件系統(tǒng)以及通訊程序等。而且,由于C++共享C的效率,所以用C++可以構(gòu)成很多高性能的系統(tǒng)軟件。</p><p>  3.6.3 Java的特點(diǎn)</p><p>  Java是定義位于網(wǎng)絡(luò)計(jì)算的計(jì)算機(jī)語(yǔ)言,它幾乎所有的特點(diǎn)也是圍繞著這一中心

31、展開(kāi)的并為之服務(wù)的,這些特點(diǎn)使得Java語(yǔ)言特別適全于用來(lái)開(kāi)發(fā)網(wǎng)絡(luò)上的應(yīng)用程序;另外,作為一種面世較晚的語(yǔ)言,Java也集中體現(xiàn)和充分利用了若于當(dāng)代軟件技術(shù)新成果,如面向?qū)ο蟆⒍嗑€程等,這些也都在它的特點(diǎn)中有所反映。</p><p>  平臺(tái)無(wú)關(guān)性:如前所述,Java語(yǔ)言獨(dú)特的運(yùn)行機(jī)制使得它具有良好的可移植性,利用Java,開(kāi)發(fā)人員可以編寫出與具體平臺(tái)無(wú)關(guān)、普遍適用的應(yīng)用程序,大大降低了開(kāi)發(fā)、維護(hù)和管理的開(kāi)銷。&

32、lt;/p><p>  面向?qū)ο螅篔ava是純面向?qū)ο蟮木幊陶Z(yǔ)言。面向?qū)ο蠹夹g(shù)較好地適應(yīng)了當(dāng)今軟件開(kāi)發(fā)過(guò)程中新出現(xiàn)的種種傳統(tǒng)面向過(guò)程語(yǔ)言所不能處理的問(wèn)題,包括軟件開(kāi)發(fā)的規(guī)模擴(kuò)大、升級(jí)加快、維護(hù)量增大經(jīng)及開(kāi)發(fā)分工日趨細(xì)化、專業(yè)化和標(biāo)準(zhǔn)化等,是一種迅速成熟、推廣的軟件開(kāi)發(fā)方法。面向?qū)ο蠹夹g(shù)的核心是以更接近人類思維的方式建立計(jì)算機(jī)邏輯模型,它利用類和對(duì)象的機(jī)制將數(shù)據(jù)與其上的操作封裝在一起,并通過(guò)統(tǒng)一的接口與外界交互,使反映

33、現(xiàn)實(shí)世界實(shí)體的各個(gè)類在程序中能夠獨(dú)立、自治、繼承;這種方法非常有利于提高程序的可維護(hù)性和可重用性,大大提高了開(kāi)發(fā)效率和程序的可管理性,使得面向過(guò)程語(yǔ)言難于操縱的大規(guī)模軟件可以很方便的創(chuàng)建、使用和維護(hù)。</p><p>  多線程機(jī)制:多線程是當(dāng)今軟件技術(shù)的又一重要成果,已成功應(yīng)用在操作系統(tǒng)、應(yīng)用開(kāi)發(fā)等多個(gè)領(lǐng)域。多程序技術(shù)允許同一個(gè)程序有兩個(gè)執(zhí)行線索,即同時(shí)做兩件事情,滿足了一些復(fù)雜軟件的需求。Java不但內(nèi)置多線

34、程功能,而且提供語(yǔ)言級(jí)的多線程支持,即定義了一些用于建立、管理多線程的類和方法,使得開(kāi)發(fā)具有多線程功能的程序變得簡(jiǎn)單、容易和有效。</p><p>  簡(jiǎn)單易學(xué):如前所述,衍生自C++的Java語(yǔ)言,出于安全穩(wěn)定性的考慮,去除了C++中不容不得易理解和掌握的部分,如最典型的指針操作等,降低了學(xué)習(xí)的難度;同時(shí) Java還有一個(gè)特點(diǎn)就是它的基本語(yǔ)法部分與C語(yǔ)言幾乎一模一樣。這樣,無(wú)論是學(xué)過(guò)Java再學(xué)C,還

35、是已經(jīng)掌握了C語(yǔ)言再業(yè)學(xué)Java,都會(huì)感到易于入門。</p><p><b>  3.6.方案選擇</b></p><p>  面向?qū)ο笫且环N認(rèn)識(shí)世界的方法,是一種程序設(shè)計(jì)方法。面向?qū)ο蟮挠^點(diǎn)認(rèn)為,客觀世界是由各種各樣的實(shí)體,即對(duì)象組成的。每種對(duì)象都有自己的內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律,不同對(duì)象間的相互聯(lián)系和相互作用就構(gòu)成了各種不同的系統(tǒng),并進(jìn)而構(gòu)成整個(gè)客觀世界。按照這樣的思想

36、設(shè)計(jì)程序,就是面向?qū)ο蟮某绦蛟O(shè)計(jì)。</p><p>  面向?qū)ο蟮某绦蛟O(shè)計(jì)吸取了結(jié)構(gòu)化程序設(shè)計(jì)的先進(jìn)思想,并把它們同幾個(gè)支持用戶用新方法進(jìn)行程序設(shè)計(jì)的有力概念結(jié)合在一起。</p><p>  所有面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言一般都包含三個(gè)概念:封裝、多態(tài)性和繼承性。</p><p>  這種方法要求語(yǔ)言必須具備抽象、封裝、繼承和多態(tài)性這幾個(gè)關(guān)鍵要素。</p>

37、<p>  面向?qū)ο蟮某绦蛟O(shè)計(jì),是通過(guò)數(shù)據(jù)和代碼建立分塊的內(nèi)存區(qū)域,以便提供對(duì)程序進(jìn)行模塊化的一種程序設(shè)計(jì)方法,這些模塊可以被用作樣板,在需要時(shí)再建立其副本。</p><p>  C++和Java在面向?qū)ο筮@方面比VB要強(qiáng),所以我排除了用VB做的可能性。但是C++主觀上在校期間學(xué)校并沒(méi)有這方面的授課內(nèi)容,雖然自學(xué)了一些內(nèi)容,對(duì)C++也有一定了解,但是若用C++實(shí)現(xiàn),必定是基于windows應(yīng)用程序的V

38、isual C++設(shè)計(jì),對(duì)于windows編程,我還有待提高,而我對(duì)JAVA的掌握,相對(duì)而言,比較熟悉,綜合考慮,決定采用Java語(yǔ)言編寫俄羅斯方塊。</p><p><b>  第4章 概要設(shè)計(jì)</b></p><p>  4.1 游戲設(shè)計(jì)所要遵循的規(guī)范</p><p>  一個(gè)良好的程序,在編寫之前,必須要制定各種編寫規(guī)范,以便組內(nèi)各成員協(xié)

39、調(diào)工作。當(dāng)然,本游戲只是一個(gè)小程序,過(guò)多的規(guī)范制定顯得沒(méi)有必要,但是,也必須制定一個(gè)對(duì)于變量的命名規(guī)則,這有利于設(shè)計(jì)出一個(gè)可讀性高的程序。</p><p>  本程序變量的命名規(guī)則為:</p><p>  ·所有變量一律使用相應(yīng)的英文單詞命名</p><p>  ·如果同一類中需要?jiǎng)?chuàng)建多個(gè)同一類型,功能相似的變量,變量的前綴應(yīng)使用統(tǒng)一的英文單詞,

40、后綴為下劃線“_”加數(shù)字。</p><p>  比如,從JButton對(duì)象創(chuàng)建開(kāi)始按鈕,可以命名為:startbutton。再如,創(chuàng)建多個(gè)道具按鈕,可以命名為toolbutton_1,toolbutton_2等等。</p><p>  ·方法命名盡量使用能夠描述本方法功能的英文單詞</p><p>  比如,游戲初始化可以用gameinitial。<

41、/p><p>  ·類名字命名也應(yīng)當(dāng)使用能夠描述本類功能的英文單詞。</p><p>  如方塊類,可以用class block。</p><p>  4.2 游戲總體設(shè)計(jì)分析</p><p>  Java為純面向?qū)ο螅∣bject-Oriented,OO)的程序語(yǔ)言,它的諸多優(yōu)點(diǎn)在此就不作論述了。從面向?qū)ο蟮挠^念出發(fā),本程序主要可分為

42、以下幾個(gè)模塊:</p><p><b>  客戶端GUI模塊</b></p><p><b>  方塊及地圖數(shù)據(jù)模塊</b></p><p><b>  音頻文件播放模塊</b></p><p><b>  道具使用模塊</b></p>&l

43、t;p><b>  網(wǎng)絡(luò)傳輸模塊</b></p><p>  分析對(duì)象的技巧在于它的功能的擴(kuò)展性及維護(hù)效率。試想,如果因?yàn)橥獠凯h(huán)境或者用戶需求的變化需要對(duì)程序進(jìn)行功能擴(kuò)展或者維護(hù),就要對(duì)代碼作大幅度的更動(dòng)甚至重寫,這樣就失去了面向?qū)ο蟮膬?yōu)勢(shì),所以在本程序分析時(shí)將獨(dú)立性高的模塊作為一個(gè)對(duì)象,以提高程序的可擴(kuò)展性和可維護(hù)性。</p><p>  4.3 各模塊的算法

44、設(shè)計(jì)</p><p>  4.3.1客戶端接口的設(shè)計(jì)</p><p>  “客戶端控制器”是指游戲界面上顯示游戲相關(guān)信息及排布游戲控件的面板。游戲客戶端控制器上集合了游戲的各種事件處理,包括游戲定時(shí)控制,鍵盤控制,道具控制,音樂(lè)播放,選擇網(wǎng)絡(luò)對(duì)戰(zhàn)等各種控制命令。本模塊是程序的主模塊,其它四個(gè)模塊都由本模塊進(jìn)行控制。</p><p>  1 客戶端接口的結(jié)構(gòu),如圖4.

45、1所示:</p><p>  圖4.1 客戶端結(jié)構(gòu)圖</p><p>  2 客戶端接口的實(shí)現(xiàn)</p><p>  一個(gè)程序,在追求程序性能的同時(shí),應(yīng)該同時(shí)注重GUI的美觀度,基于此,本游戲應(yīng)該采用JAVA中swing組件包,swing組件是一組完全由JAVA語(yǔ)言編寫的輕量級(jí)組件,沒(méi)有本地代碼,不依賴本機(jī)操作系統(tǒng)的支持,所以swing比AWI具有更強(qiáng)的實(shí)用性,比起A

46、WI組件,swing組件在美觀度和控制性能方面具有如下幾方面的優(yōu)點(diǎn):</p><p><b>  ·可插入的外觀感覺(jué)</b></p><p>  在AWI組件中,猶豫控制組件外形惡對(duì)等類與具體平臺(tái)相關(guān),使得AWI組件總是只有與本機(jī)相關(guān)的單一的L&F。swing對(duì)PL&F的支持改變了單一圖形界面的觀感,即實(shí)現(xiàn)了在任意平臺(tái)上運(yùn)行同一個(gè)swing程

47、序能有不同惡L&F。變成人員可以在GUI程序設(shè)計(jì)中加入相應(yīng)的開(kāi)關(guān),使得程序運(yùn)行時(shí)可以根據(jù)喜好選擇不同的L&F,呈現(xiàn)不同個(gè)性化界面。</p><p><b>  ·設(shè)置邊框</b></p><p>  可以使用相應(yīng)的方法為swing組件設(shè)置一個(gè)或多個(gè)邊框。Swing中提供了各種各樣的邊框供用戶選用,也能夠給通過(guò)變成人員的組合來(lái)設(shè)計(jì)個(gè)性邊框。充分

48、利用邊框設(shè)計(jì),可以協(xié)助布局管理器對(duì)組件進(jìn)行合理的布局。</p><p><b>  ·使用圖標(biāo)</b></p><p>  此特性使得swing組件較之AWI組件具有更強(qiáng)的外觀感受。與AWT組件不同,許多swing組件如按鈕、標(biāo)簽,不僅可以使用文字,還可以使用圖標(biāo)來(lái)加強(qiáng)外觀效果。</p><p><b>  ·支持

49、鍵盤操作</b></p><p>  在swing組件中,使用Jcomponent類的registerKeyboardAction方法,能使用戶通過(guò)鍵盤操作來(lái)替代鼠標(biāo)驅(qū)動(dòng)GUI上swing組件的相應(yīng)動(dòng)作。</p><p><b>  ·可存取性支持</b></p><p>  所有swing組件都實(shí)現(xiàn)了可存取性接口,提供對(duì)

50、可存取性的支持,使得輔助功能如屏幕閱讀器、語(yǔ)音識(shí)別系統(tǒng),能十分方便地從swing組件中得到信息。</p><p><b>  ·MVC體系結(jié)構(gòu)</b></p><p>  Swing組件設(shè)置三個(gè)通訊對(duì)象:模型、視圖和控件,并將模型與視圖奮力開(kāi)來(lái),這樣可以方便用戶直接通過(guò)模型管理數(shù)據(jù),實(shí)現(xiàn)基于一種模型的多種視圖處理。</p><p> 

51、 基于swing組件的優(yōu)點(diǎn),結(jié)合本程序的設(shè)計(jì)目標(biāo),程序的界面將使用swing組件實(shí)現(xiàn)。</p><p>  4.3.2方塊及地圖數(shù)據(jù)模塊的設(shè)計(jì)</p><p>  這是俄羅斯方塊游戲最基本的功能模塊,本游戲的設(shè)計(jì)思想是只要有客戶端控制器及方塊地圖數(shù)據(jù)模塊,就能實(shí)現(xiàn)游戲的基本功能。本模塊其實(shí)可以分開(kāi)為方塊和地圖兩個(gè)模塊,但考慮到二者聯(lián)系緊密,需要共享數(shù)據(jù)結(jié)構(gòu),屬于公共耦合,耦合性過(guò)高,將二者

52、分開(kāi)也有悖于作者設(shè)計(jì)的游戲算法,增加了程序的編寫難度,故把它們并作了一個(gè)對(duì)象。</p><p><b>  1.方塊數(shù)據(jù)</b></p><p>  方塊數(shù)據(jù)存儲(chǔ)了七種不同形態(tài)的方塊,以及每個(gè)方塊的四種形態(tài),可用一個(gè)7x4x4x4的四維數(shù)組表示,例如,定義一個(gè)四維數(shù)組block[7][4][4][4],數(shù)組block的第一維表示七種不同形態(tài)的方塊,第二維代表方塊的四種

53、不同翻轉(zhuǎn)狀態(tài)。數(shù)組的第三維和第四維代表某一種形態(tài)的方塊的某一狀態(tài)。</p><p>  假定,block[0][0][i][j]的值如以下:</p><p><b>  1,1,0,0</b></p><p><b>  0,1,0,0</b></p><p><b>  0,1,0,0&

54、lt;/b></p><p><b>  0,0,0,0</b></p><p>  則,block[0][0][i][j]代表“7”字型的方塊。當(dāng)方塊翻轉(zhuǎn)時(shí),只需改變第二維的下標(biāo)即可,即,block[0][0][i][j]變?yōu)閎lock[0][1][i][j]。而如果更改方塊形態(tài),就改變數(shù)組第一維坐標(biāo)。 </p><p><b&g

55、t;  2.地圖數(shù)據(jù)</b></p><p>  本游戲的游戲地圖為25x15格,故應(yīng)當(dāng)用一個(gè)25行15列的二維數(shù)組存儲(chǔ)游戲地圖數(shù)據(jù),但是考慮到本游戲嵌入了方塊越界自動(dòng)糾正功能,而方塊越界,實(shí)際上就是游戲地圖數(shù)組越界。假定,方塊數(shù)據(jù)有以下數(shù)據(jù)模式,代表長(zhǎng)條形的一種方塊:</p><p><b>  0,0,0,1</b></p><p&

56、gt;<b>  0,0,0,1</b></p><p><b>  0,0,0,1</b></p><p><b>  0,0,0,1</b></p><p>  當(dāng)以上數(shù)據(jù)模式所代表的方塊處在游戲的左邊界區(qū),并且發(fā)生翻轉(zhuǎn)時(shí),方塊可能翻出游戲地圖外,在這種情況下,就發(fā)生了游戲地圖數(shù)組越界,JAVA異

57、常處理系統(tǒng)會(huì)拋出ArrayIndexOutOfBoundsException,為避免這種情況的發(fā)生,游戲地圖數(shù)組應(yīng)當(dāng)適當(dāng)增大,故本游戲?qū)⒌貓D數(shù)組長(zhǎng)度和寬度各擴(kuò)大了三個(gè)單位,定義成為28x18模式的數(shù)組。</p><p>  3.建立游戲的坐標(biāo)系統(tǒng)</p><p>  俄羅斯方塊,最終是要將方塊繪到游戲地圖中,如何確定方塊在地圖上的位置,就需要一個(gè)方塊數(shù)組與游戲地圖數(shù)組的映射關(guān)系。建立一個(gè)合

58、理的坐標(biāo)系統(tǒng),對(duì)于游戲的設(shè)計(jì)有莫大的方便。結(jié)合JAVA的坐標(biāo)系統(tǒng),綜合游戲設(shè)計(jì)上的考慮,本程序最終確定了將游戲地圖的左上角坐標(biāo)表示為(0,0),同樣,方塊在游戲地圖中表示為記錄方塊左上角在游戲地圖中的坐標(biāo)。</p><p>  4.對(duì)方塊數(shù)據(jù)和游戲數(shù)據(jù)的操作</p><p>  確定了方塊數(shù)據(jù)與地圖數(shù)據(jù)的映射關(guān)系,對(duì)方塊和游戲數(shù)據(jù)的操作就變得簡(jiǎn)便了。對(duì)方塊的操作包括方塊的左移、右移、下移等

59、,當(dāng)方塊左移時(shí),只需將方塊數(shù)組左上角的坐標(biāo)往左方向移動(dòng)一個(gè)單位即可,同理,方塊右移、下移時(shí),只需將坐標(biāo)往右、往下移動(dòng)一個(gè)單位。</p><p>  如果以X代表方塊左上角的橫坐標(biāo),以Y代表縱坐標(biāo),方塊左移,執(zhí)行的操作是X--,方塊右移,執(zhí)行的操作是X++,方塊下落,執(zhí)行的操作是Y++。</p><p><b>  5.游戲繪圖</b></p><p

60、>  俄羅斯方塊具有七種不同形態(tài)的方塊,而方塊又分別有正在下落和已經(jīng)落下固定兩種不同狀態(tài),如何在游戲地圖中實(shí)現(xiàn)靜態(tài)和動(dòng)態(tài)地繪制出七種不同形態(tài)的方塊,具有一定的挑戰(zhàn)性。經(jīng)過(guò)反復(fù)思考論證,本游戲決定采用不同的繪制模式來(lái)分別實(shí)現(xiàn)繪制動(dòng)態(tài)和靜態(tài)方塊。</p><p>  ·遍歷方塊數(shù)組繪制動(dòng)態(tài)方塊</p><p>  假定調(diào)用Graphics類中的fill3DRect(int x,

61、int y,int width,int height,Boolean raised)方法繪制方塊,再假定方塊數(shù)組左上角在地圖中的坐標(biāo)為x和y,則繪制動(dòng)態(tài)方塊可采用如下方式實(shí)現(xiàn)。</p><p>  for(int i=0;i<=3;i++)</p><p>  for(int j=0;j<=3;j++)</p><p>  if(Block[block

62、type][turnstate][i][j]==1)</p><p>  g.fill3DRect((y+j)*width,(x+i)*width,width,width,raised);</p><p>  這種繪制方式的原理是每一次繪制一個(gè)單位長(zhǎng)度的正方形格子,在將這些格子組合成某一種的形態(tài)方塊。這里面,某一種形態(tài)的方塊是由方塊數(shù)組中的參數(shù)i和j決定的,具體是哪種形態(tài)的方塊,方塊的哪一

63、種翻轉(zhuǎn)狀態(tài),是由參數(shù)blocktype和turnstate決定的。而參數(shù)y+j表示的當(dāng)前格子的左上角在游戲地圖中的橫坐標(biāo),x+i表示的是小格子的縱坐標(biāo)。</p><p>  ·遍歷游戲地圖數(shù)組實(shí)現(xiàn)墜下方塊的消行繪制</p><p>  當(dāng)墜下的方塊有滿行需要重新繪制時(shí),需要進(jìn)行消行繪制。首先,可用一個(gè)數(shù)值代表游戲地圖數(shù)組的某一個(gè)區(qū)域是否有方塊填充,假定這個(gè)數(shù)值是2,即如果地圖數(shù)組

64、中某一個(gè)元素的值為2,則表示這個(gè)元素所代表的地圖區(qū)域存在方塊。進(jìn)行消行繪制時(shí)需要判斷地圖數(shù)組的某一行是否全為2,如果全為2,則可以認(rèn)為這行被方塊填滿,需要進(jìn)行消行,然后再繼續(xù)往下判斷下一行,直到所有滿行被消除為止。</p><p>  圖4.2 消行流程圖</p><p>  4.3.3音樂(lè)播放模塊的設(shè)計(jì)</p><p>  音頻文件的播放涉及到IO操作,不管是何種

65、系統(tǒng),對(duì)于IO操作,都是比較慢的,如果當(dāng)程序運(yùn)行到需要播放音效時(shí),再?gòu)奈募腥〉靡纛l數(shù)據(jù),然后播放,很可能會(huì)造成一種“卡”的感覺(jué),影響用戶體驗(yàn)?;诖?,經(jīng)過(guò)反復(fù)論證,本游戲決定采用以剪輯的方式來(lái)播放音頻文件。</p><p>  JAVA語(yǔ)言中的剪輯Clip,是一種在播放之前就提前加載于內(nèi)存中的特殊的音頻數(shù)據(jù)流,當(dāng)需要用時(shí),只需直接從內(nèi)存中調(diào)出即可,省去了IO讀取所需的大量時(shí)間,而且剪輯播放完畢后,仍舊存儲(chǔ)在內(nèi)存

66、中,對(duì)于游戲的背景音樂(lè)及音效這類需要反復(fù)多次播放的音頻,這種方式是非常有用的。</p><p>  單單采用剪輯還是不夠的,音頻文件的播放,應(yīng)當(dāng)另外開(kāi)啟線程來(lái)控制,這樣既可以更方便地控制音頻的播放、暫停等操作,也不會(huì)程序執(zhí)行其它的操作。</p><p><b>  1.音效播放</b></p><p>  在游戲開(kāi)始、暫停,方塊落下及消行時(shí)添加

67、相應(yīng)的音效既可以提醒用戶發(fā)生某種變化,又能增強(qiáng)程序的表現(xiàn)效果。音效,相對(duì)來(lái)說(shuō)是比較小的音頻文件,對(duì)于音效,可選取wav格式的音頻文件,不但音頻質(zhì)量好,在系統(tǒng)支持、存儲(chǔ)性方面也占有優(yōu)勢(shì)。</p><p>  根據(jù)多線程及剪輯的思想,首先在程序初始化時(shí)應(yīng)該把音效載入內(nèi)存,游戲開(kāi)始后開(kāi)啟一個(gè)線程,當(dāng)滿足音效播放的條件時(shí),即播放音效,音效播放完畢后,應(yīng)當(dāng)將相應(yīng)的音頻文件的剪輯位置重新置為開(kāi)始處。</p>&

68、lt;p><b>  2.背景音樂(lè)播放</b></p><p>  同音效的播放,背景音樂(lè)的播放也應(yīng)當(dāng)采用剪輯的形式,以方便音樂(lè)的循環(huán)多次播放,同樣,背景音樂(lè)播放可能是貫穿于整個(gè)游戲過(guò)程,背景音樂(lè)的播放必須采用單獨(dú)的線程控制,以不影響程序執(zhí)行其它操作。</p><p>  因?yàn)楸尘耙魳?lè)采用單獨(dú)線程播放,這里面會(huì)出現(xiàn)一個(gè)問(wèn)題,當(dāng)用戶選擇暫停背景音樂(lè)播放時(shí),背景音樂(lè)

69、播放線程是進(jìn)入wait狀態(tài)還是以另一種方式實(shí)現(xiàn)暫停?如果背景音樂(lè)進(jìn)入wait狀態(tài),則當(dāng)用戶取消暫停播放時(shí),必須再創(chuàng)建一個(gè)線程去喚醒它,新建一個(gè)線程只是控制背景音樂(lè)播放,不免浪費(fèi)資源,而且也增加程序編寫難度。</p><p>  考慮到背景音樂(lè)極可能在玩家的整個(gè)游戲過(guò)程中都處在播放狀態(tài),當(dāng)暫停時(shí),玩家也隨時(shí)會(huì)取消暫停,故而在游戲結(jié)束之前,本程序會(huì)將背景音樂(lè)播放線程一直處在執(zhí)行狀態(tài),如果玩家暫停音樂(lè)播放,則讓線程轉(zhuǎn)去

70、處理檢測(cè)玩家是否取消暫停,當(dāng)檢測(cè)到暫停取消后,繼續(xù)播放音樂(lè)。</p><p>  4.3.4道具使用模塊</p><p>  目前已經(jīng)存在的俄羅斯方塊游戲鮮有能夠使用道具的,開(kāi)發(fā)一款能夠使用道具功能的俄羅斯方塊游戲具有一定挑戰(zhàn)度,因?yàn)榈谰叩拈_(kāi)發(fā)不僅涉及到游戲策劃等創(chuàng)意性的內(nèi)容,也與圖形圖像處理等美工技術(shù)息息相關(guān),而作者對(duì)美工卻是不擅長(zhǎng)的,基于此,本游戲最初版本的道具可能只有一個(gè),但是為了將

71、來(lái)版本提升的方便,本程序另外預(yù)留了三種道具的使用接口。</p><p>  本游戲一共設(shè)計(jì)了五種道具,旋轉(zhuǎn)方塊、炸彈、地雷、仙女、惡魔,這四種道具是程序現(xiàn)今或?qū)?lái)版本提升后要使用到的,暫時(shí),本游戲?qū)⒅粚?shí)現(xiàn)旋轉(zhuǎn)方塊和炸彈兩種道具。</p><p><b>  1.旋轉(zhuǎn)方塊</b></p><p>  旋轉(zhuǎn)方塊是一種增加游戲難度的道具,它本身其實(shí)就

72、是方塊,和正常的方塊的不同之處就在于,正常方塊在下落時(shí),如果沒(méi)有接受到用戶的控制命令是不會(huì)旋轉(zhuǎn)的,而旋轉(zhuǎn)方塊則會(huì)不斷地旋轉(zhuǎn)下降。這樣,用戶便很難控制旋轉(zhuǎn)方塊下墜到指定的位置。</p><p>  對(duì)于旋轉(zhuǎn)方塊的定時(shí)下落,可以借用方塊控制線程,但是旋轉(zhuǎn)方塊的定時(shí)旋轉(zhuǎn),則只能依靠另一個(gè)線程實(shí)現(xiàn)。</p><p><b>  2.炸彈</b></p><

73、p>  本游戲定義的炸彈能夠像方塊一樣從地圖的頂部墜落,當(dāng)下墜到地圖下部與堆積的方塊碰撞時(shí)會(huì)發(fā)生“爆炸”,爆炸將炸毀一定數(shù)量的方塊。</p><p>  炸彈的視圖模型以現(xiàn)成的方塊模型為依據(jù),即除了添加的“炸彈”標(biāo)記,它和七種方塊在外形上是沒(méi)有任何區(qū)別的。炸彈,可以看成是一種特殊類型的方塊。</p><p>  對(duì)于炸彈的殺傷力,有一個(gè)規(guī)則,如果炸彈能夠沒(méi)入已經(jīng)墜下的方塊中,則可以將

74、這個(gè)“炸彈”所占的行數(shù)全部炸毀,并增加相應(yīng)的積分,如果本身已經(jīng)能夠消行,則額外再獎(jiǎng)勵(lì)一倍的積分。否則,炸彈將只炸毀它左右各兩個(gè)格子范圍內(nèi)的方塊。</p><p>  4.3.5網(wǎng)絡(luò)對(duì)戰(zhàn)模塊</p><p>  目前的俄羅斯方塊游戲中,也鮮有具備網(wǎng)絡(luò)對(duì)戰(zhàn)功能的,這是因?yàn)榇祟愋∮螒虿痪邆湓诰W(wǎng)絡(luò)對(duì)戰(zhàn)方面的可玩性,當(dāng)然,如果能夠利用道具進(jìn)行網(wǎng)絡(luò)對(duì)攻,那就另當(dāng)別論了。就如QQ上的火并俄羅斯方塊一樣,

75、要實(shí)現(xiàn)利用道具進(jìn)行網(wǎng)絡(luò)對(duì)攻,其中一方玩家必須能夠看到他的對(duì)手的游戲信息,但這并限于看到對(duì)手的道具數(shù)量,下一個(gè)方塊預(yù)告。所以,本游戲要求將游戲地圖中方塊的實(shí)時(shí)信息遠(yuǎn)程傳輸?shù)搅硪环酵婕业娘@示平臺(tái)。</p><p>  圖像的遠(yuǎn)程傳輸首先要求將游戲地圖中的方塊信息轉(zhuǎn)化為圖像資源,然后將圖像資源轉(zhuǎn)化成基于某種圖片格式的數(shù)據(jù)流,進(jìn)行打包發(fā)送,在接收端上,再把圖像數(shù)據(jù)從數(shù)據(jù)包上提取出來(lái),進(jìn)行解碼,生成相應(yīng)的圖像,然后再把圖像

76、繪制到游戲畫布中。</p><p>  進(jìn)行網(wǎng)絡(luò)傳輸,首先應(yīng)當(dāng)選定一種網(wǎng)絡(luò)傳輸協(xié)議。TCP套接字協(xié)議和UDP數(shù)據(jù)報(bào)協(xié)議二者中前者傳輸速率慢,但是提供可靠性保證,準(zhǔn)確率高,后者傳輸速率快,但是并提供可靠性保證。對(duì)于游戲的網(wǎng)絡(luò)對(duì)戰(zhàn)來(lái)說(shuō),對(duì)網(wǎng)絡(luò)傳輸?shù)膶?shí)時(shí)性要求比較高,一方玩家必須能夠看到另一方玩家游戲狀況的實(shí)時(shí)信息,這就要求圖像的傳輸速率必須要快,同樣因?yàn)樗膶?shí)時(shí)性,即使某一次傳輸錯(cuò)誤,后面一幀圖像也會(huì)馬上覆蓋前面的圖

77、像,人的肉眼基本上不能辨別出這種錯(cuò)誤,基于此,本游戲的網(wǎng)絡(luò)對(duì)戰(zhàn)傳輸方式應(yīng)該采用基于UDP的用戶數(shù)據(jù)報(bào)協(xié)議。</p><p><b>  4.4 可靠性設(shè)計(jì)</b></p><p>  游戲在設(shè)計(jì)時(shí)應(yīng)當(dāng)盡量注意降低各個(gè)模塊之間的耦合性,增強(qiáng)模塊的獨(dú)立性,以便將來(lái)需求時(shí)進(jìn)行游戲版本的提升以及相關(guān)維護(hù)。</p><p>  4.5 概要設(shè)計(jì)評(píng)審<

78、;/p><p>  經(jīng)過(guò)反復(fù)論證,上面提出的設(shè)計(jì)方案,尤其是游戲設(shè)計(jì)的各個(gè)功能模塊間的算法確實(shí)可行,因此,本游戲可進(jìn)入詳細(xì)設(shè)計(jì)階段。</p><p><b>  第5章 詳細(xì)設(shè)計(jì)</b></p><p><b>  5.1 客戶端設(shè)計(jì)</b></p><p>  客戶端是游戲非常重要的一部分,它是所有游

79、戲功能的開(kāi)關(guān),上面集合了許多的圖像用戶接口,客戶端的實(shí)現(xiàn)應(yīng)該確定一種合理的組織架構(gòu)。圖5.1是客戶端的組織結(jié)構(gòu)圖:</p><p>  圖5.1 客戶端的組織架構(gòu)圖</p><p>  游戲客戶端采用swing組件開(kāi)發(fā),并且向其注冊(cè)監(jiān)聽(tīng)器,以實(shí)現(xiàn)各種控制功能,綜合游戲前面的設(shè)計(jì),客戶端上至少要注冊(cè)三個(gè)監(jiān)聽(tīng)器,分別是窗口監(jiān)聽(tīng)器(WindowListener)、動(dòng)作監(jiān)聽(tīng)器(ActionList

80、ener)、鍵盤監(jiān)聽(tīng)器(KeyListener)、選項(xiàng)監(jiān)聽(tīng)器(ItemListener)。</p><p>  根據(jù)初步設(shè)計(jì),可以確定客戶端上所要用到的Swing組件對(duì)象有JFrame對(duì)象、JPanel對(duì)象,JLabel對(duì)象、JButton對(duì)象、JMenuBar對(duì)象、JMenu對(duì)象、JMenuItem對(duì)象、JTextField對(duì)象、JTextArea對(duì)象、JDialog對(duì)象、JRadioButton對(duì)象、JTab

81、bedPane對(duì)象,至少十二個(gè)swing組件對(duì)象。</p><p>  JFrame用以創(chuàng)建窗體,考慮到本游戲具備單機(jī)和網(wǎng)絡(luò)對(duì)戰(zhàn),JFrame對(duì)象的大小并不是不變的,在單機(jī)游戲和網(wǎng)絡(luò)對(duì)戰(zhàn)時(shí),JFrame對(duì)象分別會(huì)呈現(xiàn)出不同大小,以適應(yīng)不同的游戲環(huán)境需求。</p><p>  在主界面上,可以確定有四個(gè)JPanel對(duì)象。第一個(gè)JPanel對(duì)象是用來(lái)繪制方塊的游戲地圖,第二個(gè)JPanel對(duì)象是

82、用來(lái)排列其它各種組件的容器組件,做游戲信息顯示面板,可以放在游戲地圖的左邊,第三個(gè)JPanel對(duì)象是用來(lái)顯示NEXT方塊的,應(yīng)該畫在第二個(gè)JPanel對(duì)象上,第三個(gè)JPanel對(duì)象是當(dāng)網(wǎng)絡(luò)對(duì)戰(zhàn)時(shí),用來(lái)繪制另一方玩家游戲地圖的繪圖面板,放在游戲信息顯示面板的右邊。</p><p>  可以確定,主界面上,本游戲的按鈕有五個(gè),一個(gè)“開(kāi)始游戲”按鈕,四個(gè)道具按鈕,排列在游戲信息顯示面板上,可以將“開(kāi)始游戲”按鈕放在頂端

83、,當(dāng)按下“開(kāi)始游戲”按鈕后,應(yīng)該改變“開(kāi)始游戲”按鈕的文本內(nèi)容為“暫停游戲”,按下“暫停游戲”按鈕后,再將其文本內(nèi)容重新設(shè)置為“開(kāi)始游戲”。至于四個(gè)道具按鈕,可以放在信息顯示面板的中部位置。</p><p>  JTextArea對(duì)象用來(lái)顯示游戲時(shí)的相關(guān)信息,比如網(wǎng)絡(luò)對(duì)戰(zhàn)時(shí)顯示雙方玩家的比分等信息。JTextArea應(yīng)該放在游戲信息面板的底部。</p><p>  JTextField對(duì)象

84、至少應(yīng)該有兩個(gè),用來(lái)顯示雙方玩家的分?jǐn)?shù)信息,考慮到對(duì)戰(zhàn)時(shí)的局時(shí)設(shè)置,還應(yīng)該增加一個(gè)文本框用來(lái)計(jì)時(shí),計(jì)時(shí)的文本框最好放在JTextArea對(duì)象的上方,這樣,兩個(gè)分?jǐn)?shù)文本框則布置在道具按鈕和計(jì)時(shí)文本框之間。</p><p>  本游戲主界面上的JLabel對(duì)象至少應(yīng)該有四個(gè)。首先,應(yīng)該為NEXT方塊畫布添加一個(gè)標(biāo)簽,然后在四個(gè)道具按鈕上也應(yīng)該添加一個(gè)道具標(biāo)簽,最后,在兩個(gè)顯示分?jǐn)?shù)的文本框上方也應(yīng)該添加一個(gè)標(biāo)簽最后,在

85、游戲主界面的頂端要添加一個(gè)菜單欄,菜單欄上添加幾個(gè)菜單對(duì)象。</p><p>  綜合以上信息,可以大概確定本游戲的主界面,如圖5.2所示:</p><p>  圖5.2 游戲界面圖</p><p>  5.2音效播放控制模塊設(shè)計(jì)</p><p>  本游戲的音效播放采用剪輯及多線程的方式實(shí)現(xiàn)。音頻播放需要用到JAVA中的sound包。首先,

86、利用AudioSystem這個(gè)音頻工廠的getAudioInputstream()方法從音頻文件中取得一個(gè)音頻輸入流,其次,從這個(gè)音頻輸入流創(chuàng)建一個(gè)Clip,然后打開(kāi)這個(gè)Clip。這樣,當(dāng)需要時(shí),就可以利用Clip中的start()方法播放這個(gè)剪輯,重復(fù)播放,可以用setFramePosition(0)這個(gè)方法將剪輯的位置重新置為0。</p><p>  音效剪輯的播放控制流程圖如圖5.3所示:</p>

87、;<p>  圖5.3 音效播放流程圖</p><p>  5.3背景音樂(lè)播放控制模塊設(shè)計(jì)</p><p>  同音效的播放,背景音樂(lè)的播放也應(yīng)當(dāng)采用剪輯的形式,以方便音樂(lè)的循環(huán)多次播放,同樣,背景音樂(lè)播放也要單獨(dú)的線程進(jìn)行控制。</p><p>  前面概要設(shè)計(jì)提出了一個(gè)問(wèn)題。因?yàn)楸尘耙魳?lè)采用單獨(dú)線程播放,當(dāng)用戶選擇暫停背景音樂(lè)播放時(shí),背景音樂(lè)播放線

88、程如果以進(jìn)入wait狀態(tài)來(lái)暫停的話,則當(dāng)用戶取消暫停時(shí)必須還需要一個(gè)線程來(lái)喚醒它,額外增加一個(gè)線程的話,不免浪費(fèi)系統(tǒng)資源,而且也會(huì)增加編寫的難度。</p><p>  從另一個(gè)角度來(lái)說(shuō),背景音樂(lè)極可能在玩家的整個(gè)游戲過(guò)程中都處在播放狀態(tài),當(dāng)暫停時(shí),玩家也隨時(shí)會(huì)取消暫停,因此,可以讓背景音樂(lè)線程從游戲開(kāi)始后就一直處在執(zhí)行狀態(tài),如果用戶暫停播放,可以讓線程轉(zhuǎn)去循環(huán)處理檢測(cè)用戶是否取消暫停,當(dāng)檢測(cè)到用戶取消暫停時(shí),繼續(xù)

89、播放音樂(lè)。</p><p>  背景音樂(lè)播放控制的算法流程如圖5.4所示:</p><p>  圖5.4 背景音樂(lè)播放控制流程圖</p><p>  5.4網(wǎng)絡(luò)對(duì)戰(zhàn)模塊設(shè)計(jì)</p><p>  如圖5.2游戲界面圖所示,可以在菜單欄中“游戲”菜單項(xiàng)中添加一個(gè)“網(wǎng)絡(luò)對(duì)戰(zhàn)”菜單選項(xiàng),當(dāng)用戶單擊“網(wǎng)絡(luò)對(duì)戰(zhàn)”菜單選項(xiàng)后,彈出一個(gè)對(duì)話框,提示用戶輸入要

90、連接的主機(jī)的IP地址,用戶輸入IP地址后,程序會(huì)記錄下這個(gè)IP地址,當(dāng)用戶開(kāi)啟游戲后,數(shù)據(jù)傳輸線程會(huì)將數(shù)據(jù)發(fā)送到這個(gè)IP地址的指定端口號(hào)上。</p><p>  對(duì)于實(shí)現(xiàn)網(wǎng)絡(luò)傳輸?shù)募夹g(shù),可以用UDP數(shù)據(jù)報(bào)傳輸方式。首先從AWT包中的Robot創(chuàng)建一個(gè)實(shí)例,這個(gè)類的實(shí)例是有關(guān)本機(jī)屏幕資源的信息,它有一個(gè)createScreenCapture()方法,可以用它來(lái)創(chuàng)建屏幕上指定坐標(biāo)位置,指定大小的一副圖像。</p

91、><p>  當(dāng)然,在此之前,我們還需要獲得游戲地圖所在屏幕的坐標(biāo)。Component類中提供了一個(gè)獲取組件屏幕坐標(biāo)的方法getLocationOnScreen(),我們可以利用這個(gè)方法獲取組件在屏幕上的坐標(biāo),然后把這個(gè)坐標(biāo)賦給一個(gè)Point對(duì)象,再?gòu)腞ectangle類中創(chuàng)建一個(gè)指定屏幕坐標(biāo)位置,指定寬和高的矩形,然后就可以用createScreenCapture()創(chuàng)建一副包含游戲地圖區(qū)域的圖像了。</p&

92、gt;<p>  創(chuàng)建圖像信息以后,可以利用imageio包ImageIO類中的write(RenderedImage im, String formatName, OutputStream output)方法將圖像文件寫入到一個(gè)輸出流中,然后可以用toByteArray()從輸出流中取得數(shù)據(jù),最后就是將數(shù)據(jù)打包發(fā)送了。</p><p>  對(duì)于接收端接收到的數(shù)據(jù)包,可

93、以先從數(shù)據(jù)包中將圖像字節(jié)數(shù)據(jù)提出出來(lái)放到一個(gè)字節(jié)數(shù)組中,然后利用Toolkit包中的createImage(byte[] imagedata)方法將圖像字節(jié)數(shù)據(jù)轉(zhuǎn)化成圖像,最后將圖像畫到游戲畫布中即可。</p><p>  相應(yīng)的算法流程如圖5.5所示:</p><p>  (a) 圖像發(fā)送流程 (b) 圖像接收流程</p>

94、<p>  圖5.5 圖像發(fā)送和接收流程圖</p><p><b>  5.5道具模塊設(shè)計(jì)</b></p><p>  5.5.1旋轉(zhuǎn)方塊的設(shè)計(jì)</p><p>  旋轉(zhuǎn)方塊的出現(xiàn)是隨機(jī)的,而隨著游戲級(jí)別的提升,每一關(guān)出現(xiàn)的旋轉(zhuǎn)方塊的數(shù)量也會(huì)不同,對(duì)于七種方塊來(lái)說(shuō),它們?cè)谌魏我欢螘r(shí)間內(nèi)出現(xiàn)的概率都是一致的,再者,旋轉(zhuǎn)方塊需要兩個(gè)定時(shí)器

95、,定時(shí)下落和定時(shí)旋轉(zhuǎn)。旋轉(zhuǎn)方塊的這個(gè)性質(zhì)要求它必須要兩個(gè)線程才能控制,但是為了充分利用資源,我們可以利用方塊控制線程去控制旋轉(zhuǎn)方塊定時(shí)下落,然后只需再創(chuàng)建一個(gè)線程控制它定時(shí)旋轉(zhuǎn)即可。</p><p>  確定了兩個(gè)線程共同控制旋轉(zhuǎn)方塊,就會(huì)出現(xiàn)一個(gè)線程協(xié)調(diào)工作的問(wèn)題。如果一個(gè)新方塊出現(xiàn)的時(shí)機(jī)正好也是旋轉(zhuǎn)方塊出現(xiàn)的時(shí)機(jī),程序就會(huì)出現(xiàn)紊亂,所以必須保證,在同一時(shí)間,正常方塊和旋轉(zhuǎn)方塊只能出現(xiàn)一個(gè)。</p>

96、<p>  因?yàn)閮蓚€(gè)線程需要共同控制旋轉(zhuǎn)方塊,所以不能用wait()和notify()這兩個(gè)方法去協(xié)調(diào)線程,而應(yīng)當(dāng)利用其它條件去協(xié)調(diào)兩個(gè)線程。</p><p>  首先,游戲開(kāi)始后,旋轉(zhuǎn)方塊控制線程可以隨機(jī)休眠一定時(shí)間(這個(gè)休眠時(shí)間應(yīng)該是隨著游戲級(jí)別的提升而縮短的)。休眠時(shí)間結(jié)束后,循環(huán)檢測(cè)正常方塊是否已經(jīng)落下,當(dāng)檢測(cè)到方塊落下后,馬上得到一個(gè)新方塊,然后開(kāi)啟一個(gè)循環(huán),在方塊沒(méi)有落下之前讓它按一定的

97、時(shí)間頻率旋轉(zhuǎn),成為一個(gè)旋轉(zhuǎn)方塊。</p><p>  對(duì)于方塊控制線程,在方塊落下時(shí)應(yīng)該休眠一定數(shù)量的時(shí)間,以讓旋轉(zhuǎn)方塊控制線程有得到旋轉(zhuǎn)方塊的機(jī)會(huì),如果超出這個(gè)休眠時(shí)間,旋轉(zhuǎn)方塊控制線程還沒(méi)有得到新方塊,則可以認(rèn)為旋轉(zhuǎn)方塊控制線程還處在休眠中,方塊控制線程得到一個(gè)新方塊。</p><p>  相應(yīng)的算法流程如圖5.6和圖5.7所示:</p><p>  圖5.6

98、旋轉(zhuǎn)方塊控制線程工作圖</p><p>  圖5.7 方塊控制線程對(duì)旋轉(zhuǎn)方塊的控制示意圖</p><p>  5.5.2炸彈的設(shè)計(jì)</p><p>  道具的出現(xiàn)是隨機(jī)的。本游戲中要實(shí)現(xiàn)的道具“炸彈”和方塊一樣,從游戲地圖頂部降落,每隔一個(gè)時(shí)間間隔,會(huì)自動(dòng)降落一格。對(duì)于炸彈的控制,可以添加到道具(旋轉(zhuǎn)方塊)控制線程中。</p><p>  炸

99、彈控制的算法流程如圖5.8所示:</p><p>  圖5.8 炸彈的算法流程圖</p><p>  綜合以上信息,道具的詳細(xì)設(shè)計(jì)如圖5.9所示:</p><p>  圖5.9 道具的詳細(xì)設(shè)計(jì)圖</p><p>  5.6 主模塊——方塊與地圖模塊設(shè)計(jì)</p><p>  方塊與地圖模塊是游戲中最主要的模塊,本模塊存儲(chǔ)

100、了游戲最重要的兩個(gè)數(shù)據(jù)結(jié)構(gòu)——方塊四維數(shù)組和地圖坐標(biāo)二維數(shù)組,以及對(duì)這兩個(gè)數(shù)據(jù)結(jié)構(gòu)的操作。這些操作就構(gòu)成了游戲中最基本也是最主要的功能,如得到方塊、方塊的翻轉(zhuǎn)移動(dòng)、滿行消除等等。</p><p>  本模塊中方塊的數(shù)據(jù)結(jié)構(gòu)用一個(gè)四維數(shù)組存儲(chǔ),數(shù)組的第一維代表方塊的形態(tài),即是哪一種方塊,第二維代表某種方塊的一個(gè)翻轉(zhuǎn)狀態(tài),第三和第四代表的是具體的方塊。</p><p>  例如,定義一個(gè)四維數(shù)

101、組,int block[blocktype][turnstate][i][j],這就是七種方塊、四種狀態(tài),一共二十八個(gè)方塊的模型。當(dāng)然,這其中,有一些方塊的幾種翻轉(zhuǎn)狀態(tài)是一樣的,比如,長(zhǎng)條形的方塊,只有兩種翻轉(zhuǎn)狀態(tài),田字形的方塊,只有一種翻轉(zhuǎn)狀態(tài),這些方塊在方塊數(shù)組中存儲(chǔ)的多種狀態(tài)也就是一樣的。</p><p>  如何將方塊繪制到地圖中去,可以說(shuō)是游戲主模塊中最大的難題,有了良好的方塊數(shù)據(jù)結(jié)構(gòu)和地圖數(shù)據(jù)結(jié)構(gòu),這

102、個(gè)難題也就變得簡(jiǎn)單了。只要得到方塊數(shù)組在游戲地圖中的坐標(biāo),然后遍歷方塊數(shù)組,將方塊數(shù)組中值為1的地方繪上一個(gè)單位的正方形格子,方塊數(shù)組遍歷完畢后,也就在地圖上繪制出了形狀不規(guī)則的方塊。</p><p>  良好的數(shù)據(jù)結(jié)構(gòu)讓方塊的移動(dòng),滿行消除等操作變得簡(jiǎn)單。方塊的移動(dòng)和滿行消除,涉及到的是對(duì)游戲地圖數(shù)據(jù)的操作,例如方塊往下移,需要將游戲地圖的橫坐標(biāo)也隨著往下移動(dòng)一個(gè)單位,往左往右移動(dòng)也同樣如此。</p>

103、;<p>  方塊滿行消除,需要遍歷游戲地圖數(shù)組,發(fā)現(xiàn)某一行數(shù)值全為2,即認(rèn)為這一行被方塊填滿,應(yīng)該消去,行消去之后,應(yīng)該把這行以上的數(shù)據(jù)全部向下移動(dòng)一行,然后再繼續(xù)往下檢測(cè),有滿行就消行,再把上面的數(shù)據(jù)整體往下移動(dòng)一行,如此重復(fù),直到將所墜下方塊占據(jù)的行數(shù)檢測(cè)完為止。最后得到的就是消行之后方塊的堆積狀況和游戲地圖數(shù)據(jù)了。</p><p>  本模塊的主流程圖如圖5.10所示:</p>

104、<p>  圖5.10 方塊和地圖數(shù)據(jù)模塊流程圖</p><p>  5.6.1 得到方塊</p><p>  如圖5.10所示,游戲中得到方塊分兩種,一是當(dāng)方塊落下后得到一個(gè)新方塊,顯示在游戲地圖中,接著得到一個(gè)NEXT方塊,顯示在NEXT方塊畫布中。這里,將要解決的問(wèn)題就是怎么得到一個(gè)新方塊,怎么得到一個(gè)NEXT方塊,又怎么將NEXT方塊作為下一個(gè)新方塊。</p>

105、;<p>  方塊是有模型和顏色的,在得到一個(gè)方塊前,還得先得到要出現(xiàn)的方塊的模型和顏色,然后才能在畫布中繪制出指定模型、指定顏色的方塊。</p><p><b>  1.方塊的模型</b></p><p>  每得到一個(gè)新方塊,都是隨機(jī)從七種形態(tài)的方塊中選取一種。由概要設(shè)計(jì)中可以得出分析,可以定義一個(gè)變量,代表新方塊的模型。比如定義int型變量bloc

106、ktype代表方塊模型,方塊的模型只有七種,所以blocktype的取值也只有七個(gè),可以設(shè)定blocktype取值從0到6。</p><p>  即,0<=blocktype<=6</p><p>  那么,當(dāng)方塊落下需要得到新方塊時(shí),只需隨機(jī)得到一個(gè)blocktype值,然后再把這個(gè)blocktype值賦給方塊數(shù)組的第一維即可。</p><p>  剩

107、下的問(wèn)題就是應(yīng)該怎么隨機(jī)到一個(gè)blocktype?</p><p>  JAVA語(yǔ)言包中的Math類提供了一個(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ù),然后把這個(gè)數(shù)乘以一個(gè)稍大的整數(shù),比如1000,得到的結(jié)果除以7,然后取余,最后將余數(shù)取整,取整后的結(jié)果就是一個(gè)大于等于0,小于等于6的block

108、type值了。</p><p><b>  2.方塊的顏色</b></p><p>  如果游戲中只有一種單色的方塊,游戲未免顯得過(guò)于單調(diào),因此本游戲期望能夠設(shè)計(jì)出彩色的方塊。</p><p>  對(duì)于色彩值的得到,也可以用上面的方法,比如可以預(yù)先定義幾種顏色,然后隨機(jī)得到某一個(gè)數(shù),這個(gè)數(shù)代表其中一種顏色,但是這樣游戲的色彩還是顯得有些單調(diào)。本

109、游戲的期望是設(shè)計(jì)出色彩繽紛的方塊,這個(gè)色彩繽紛甚至可以是整個(gè)游戲中出現(xiàn)的方塊顏色都可以不一樣。為了達(dá)到這個(gè)目的,在每次構(gòu)造一個(gè)新方塊時(shí),就需要從顏色庫(kù)中構(gòu)造一個(gè)新顏色。</p><p>  我們知道,顏色其實(shí)是由紅、綠、藍(lán)三種顏色復(fù)合成的,這三種顏色復(fù)合時(shí)每一種顏色分量的不同,都會(huì)產(chǎn)生一種不同視覺(jué)效果的顏色。所以,在構(gòu)造顏色時(shí),我們可以分別給紅、綠、藍(lán)隨機(jī)出一個(gè)不同的顏色值。</p><p&g

110、t;  JAVA抽象窗口工具包中提高了Color顏色類,其中有一個(gè)構(gòu)造方法,是通過(guò)指定紅綠藍(lán)三種顏色分量來(lái)構(gòu)造一個(gè)新color,有了這個(gè)構(gòu)造方法,再利用Math類中的random方法,就可以達(dá)到“色彩繽紛”的效果了。</p><p>  3.如何得到一個(gè)新方塊</p><p>  在隨機(jī)出一個(gè)新的blocktype值后,要得到新方塊就變得非常簡(jiǎn)單了,只需要將blocktype值傳遞給方塊數(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論