![[精品論文]JAVA俄羅斯方塊畢業(yè)論文正文_第1頁](http://file.renrendoc.com/FileRoot1/2019-7/13/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a1.gif)
![[精品論文]JAVA俄羅斯方塊畢業(yè)論文正文_第2頁](http://file.renrendoc.com/FileRoot1/2019-7/13/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a2.gif)
![[精品論文]JAVA俄羅斯方塊畢業(yè)論文正文_第3頁](http://file.renrendoc.com/FileRoot1/2019-7/13/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a3.gif)
![[精品論文]JAVA俄羅斯方塊畢業(yè)論文正文_第4頁](http://file.renrendoc.com/FileRoot1/2019-7/13/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a4.gif)
![[精品論文]JAVA俄羅斯方塊畢業(yè)論文正文_第5頁](http://file.renrendoc.com/FileRoot1/2019-7/13/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a/cc9ca716-a7ba-4dda-8a18-7d1ef6f2b15a5.gif)
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
畢業(yè)設(shè)計課程定做 QQ1714879127第1章 緒論1.1 游戲的歷史游戲是人類生活的重要組成部分,從第一個電子游戲開發(fā)至今已經(jīng)有30多年,在這個短暫的時期里,隨著硬件水平的提高,游戲開發(fā)新技術(shù)層出不窮,經(jīng)典游戲比比皆是。1.1.1 從頭談起真正的電子游戲機產(chǎn)生于20世紀(jì)70年代。1971年,麻省理工學(xué)院的學(xué)生Nolan Bushnell設(shè)計了世界上的第一個業(yè)務(wù)用游戲機(俗名街機),叫做電腦空間。這臺游戲機用一臺黑白電視機作為顯示屏,用一個控制柄作為操縱器,不過由于市場因素這款游戲以失敗告終。但是最后他在電子游戲的發(fā)展上取得了非凡的成就。上面介紹的是專用機游戲的歷史,而最早的電腦游戲可以追溯到1972年,一個叫Crowther的工程師用當(dāng)時最流行的主機DEC公司的PDP10編寫一段簡單的FORTRAN程序。在這個程序里,Crowther設(shè)計了一張地圖,地圖上不規(guī)則的分布著陷阱,游戲者必須尋找路徑避開陷阱。這個程序被公認為是最早的電腦游戲程序。1989年,BroderBund公司的設(shè)計師喬丹.麥克納根據(jù)阿拉伯民族的古老傳說一千零一夜在Apple平臺上制作了一部動作冒險相結(jié)合的電腦游戲波斯王子。這個游戲獲得了第一作,它代表了當(dāng)時電腦技術(shù)的最高水平。1986年,任天堂公司發(fā)售了一款真正的游戲巨作超級馬里奧。20世紀(jì)80年代IBM PC兼容機的出現(xiàn)打破了Apple公司的壟斷地位。到了20世紀(jì)90年代,游戲業(yè)才真正成熟起來,成為了一種產(chǎn)業(yè)。由于PC機價格非常低而且硬件速度越來越快,游戲逐漸成為人們生活中不可缺少的一部分。游戲產(chǎn)業(yè)也逐漸發(fā)展成熟。1.1.2 圖形硬件的革命圖形硬件的飛速發(fā)展是近些年來的事情,部分原因是來自工業(yè)方面的壓力,例如在軍事和醫(yī)療方面對于實時圖形的需求很強烈,而交互娛樂產(chǎn)業(yè)也極大的推動了圖形硬件的發(fā)展。技術(shù)上的因素同樣也推動著圖形硬件的發(fā)展,許多圖形算法可以很容易地表達為并行方式,這樣硬件執(zhí)行的效率變得很高。摩樂定律也起了作用,越來越多的晶體管可以集成到一塊單獨的芯片上。在所謂的GPU(圖形處理器)概念出現(xiàn)以前,特殊的圖形硬件只出現(xiàn)在諸如SGI和E&S系統(tǒng)里面,這些硬件價格太昂貴,不過這些公司提供了第一代基于硬件的頂點變換和紋理映射的解決方案。1.2游戲的意義與內(nèi)涵游戲這個名稱一直就存在于每個人的日常生活中,如猜拳游戲、猜謎游戲、大地游戲、球類游戲等,林林總總,不勝枚舉,甚至于有些流行歌曲把人生也比喻為游戲,好比“一場游戲一場夢” 。因此,游戲?qū)τ诂F(xiàn)代人的成長歷程,絕對是一個不可或缺的重要角色。1.2.1 游戲的組成要素“游戲”,最簡單的定義,就是一種供人們娛樂休閑的快樂元素。從更專業(yè)的角度形容, “游戲”是具有特定行為模式、規(guī)則條件、身心娛樂及輸贏的一種行為表現(xiàn)。這種行為表現(xiàn)具備以下4個要素。行為模式:“游戲”最簡單的要素就是游戲有特定的流程模式,這種流程模式貫穿于整個游戲的行為,用戶必須依照它的模式流程來執(zhí)行。倘若一種游戲沒有了特定的行為模式,那么就沒有執(zhí)行的行為;在沒有執(zhí)行的行為之后,這個游戲也玩不下去了。舉個例子來說,如果猜拳游戲沒有了剪刀、石頭、布等行為模式,那么這還能叫做“猜拳游戲” 嗎?所以不管游戲的流程有多么復(fù)雜還是多么簡單,一定要有特定的行為模式。條件規(guī)則:當(dāng)游戲有了一定的行為模式后,接著就必須制定出一系列的條件規(guī)則。簡單來說,這些游戲的條件規(guī)則就是大家必須去遵守的游戲行為守則,只要是大家一致以為的游戲行為,在游戲中,玩家就必須遵守它,如果不遵守這種游戲行為,那么就失去了公平性。如同一種簡單的球賽,打球的英文解釋可以用PLAY GAME來加以說明,按照英文字面上的解釋,它就是執(zhí)行游戲的行為,而球賽必須有一定的條件規(guī)則,并且參與者都要必須去遵守它,不能遵守它就叫作“犯規(guī)”。所以不管是什么游戲,它都會具備一組規(guī)則條件,在游戲進行的時候才會有足夠的公平性。娛樂身心:一種游戲所帶來的娛樂性,關(guān)鍵就在于為玩家所帶來的刺激感,這也是游戲的精華所在。簡單來說,不管是很多人玩的游戲,還是一個人玩的單機游戲,游戲本身就會存在它的娛樂和刺激性,使得玩家們想要去玩它。輸贏:其實針對游戲而言,輸贏是所有游戲的最終目的。一個沒有輸贏的游戲,也就沒有了它存在的意義,如同我們常常接觸到的猜拳游戲,說穿了最終目的就是為了分出勝負而己。一般而言,游戲又可以分為動態(tài)和靜態(tài)兩種形態(tài)。動態(tài)的游戲必須配合肢體動作,如猜拳游戲;而靜態(tài)游戲則是較偏向思考的行為,如同紙上游戲。然而不管是動態(tài)或是靜態(tài)游戲,只要具備上述4項組成要素,都可以將它稱為“游戲”。1.3 俄羅斯方塊游戲俄羅斯方塊是一款風(fēng)靡全球的電視游戲機和掌上游戲機游戲,它曾經(jīng)造成的轟動與造成的經(jīng)濟價值可以說是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人Alex Pajitnov制作的,它看似簡單但卻變化無窮,令人上癮。但是經(jīng)過時代的變遷,當(dāng)初簡單卻變化無窮的俄羅斯方塊游戲如今卻已失去了它的市場,究其原因,主要是因為游戲硬件以及技術(shù)的革新使得優(yōu)秀的游戲接二連三地推出,而俄羅斯方塊游戲作為一款形式、內(nèi)容過于簡單的游戲勢必經(jīng)受不住時間的沖擊的。現(xiàn)在作者將改寫這個固定的游戲模式,通過增加一系列的新功能,開發(fā)出一種全新的俄羅斯方塊游戲,使游戲用戶重新燃起對俄羅斯方塊游戲的熱愛。畢業(yè)設(shè)計課程定做 QQ1714879127沈陽工程學(xué)院畢業(yè)論文 第2章 可行性研究第2章 可行性研究2.1 設(shè)計目的綜合運用在校期間所學(xué)理論知識和技能,設(shè)計開發(fā)俄羅斯方塊,使自己熟悉應(yīng)用系統(tǒng)的開發(fā)過程,培養(yǎng)獨立思考能力,檢驗學(xué)習(xí)效果和動手能力,提高工程實踐能力,為將來實際工作打下堅實的基礎(chǔ)。2.2 可行性研究前提基本需求:系統(tǒng)開發(fā)的總體任務(wù)是實現(xiàn)游戲的可操作性、美觀性、及時性,及適當(dāng)?shù)墓δ軘U展。主要開發(fā)目標(biāo):采用結(jié)構(gòu)化設(shè)計方法,開發(fā)出一個可操作性、美觀性、及時性的游戲,并通過此次軟件開發(fā)過程全面提高自身的綜合素質(zhì)??尚行匝芯克捎玫姆椒ê筒襟E:通過研究分析俄羅斯方塊所具備的能力及實現(xiàn)的方法、確定主體結(jié)構(gòu)。利用現(xiàn)階段我所能達到的能力,以最簡潔、最容易的辦法,邊開發(fā)邊測試邊修改,實現(xiàn)一個有一定可玩性的游戲軟件。評價尺度:本游戲盡量追求游戲操作的合理性及正確性,但是仍不排除會出現(xiàn)一些偶然性的錯誤;同時游戲也盡量追求界面的美觀性及功能的豐富性,但是基于時間的關(guān)系,可能會有極少數(shù)的拓展功能不能實現(xiàn)。2.3 可行性分析管理可行性: 本游戲設(shè)計的目的只在于提高自身實踐水平,并不對外發(fā)布,因此完全具有管理可行性。經(jīng)濟可行性:由于本游戲的主要背景是畢業(yè)課程設(shè)計,不注重直接的經(jīng)濟效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經(jīng)濟要求也不高,只要有一臺電腦便可,所以不用考慮到經(jīng)濟問題。技術(shù)可行性:可用與本游戲的編程語言有VB,VC,Java,Delphi等,考慮到用于編寫程序的困難度,和對語言的了解程度,選擇JAVA作為編程語言。需要對圖形界面設(shè)計、事件處理、多媒體、網(wǎng)絡(luò)編程等有一定了解。社會可行性:本游戲的開發(fā)作為畢業(yè)課程設(shè)計以鞏固先前所學(xué)的知識,以個人為單位,僅供個人平常娛樂所用,無須考慮有可能造成的社會影響,不用考慮到法律、版權(quán)等的社會因素,所以在這方面是完全可行的。2.4 結(jié)論綜上所述,本游戲軟件的技術(shù)成熟、完備。各方面均無重大問題,因此本游戲軟件可開始著手編寫沈陽工程學(xué)院畢業(yè)論文 第3章 需求分析第3章 需求分析3.1 引言對軟件需求完全理解對于軟件開發(fā)工作的成功是至關(guān)重要的,需求說明的任務(wù)是發(fā)現(xiàn)、規(guī)范的過程,有益于提高軟件開發(fā)過程中的能見度,便于對軟件開發(fā)過程中的控制與管理,便于采用工程方法開發(fā)軟件,提高軟件的質(zhì)量,便于開發(fā)人員、維護人員、管理人員之間的交流、協(xié)作,并作為工作成果的原始依據(jù),并且在向潛在用戶傳遞軟件功能、性能需求,使其能夠判斷該軟件是否與自己的需求相關(guān)。3.2 游戲功能需求3.2.1 游戲界面需求良好的用戶界面設(shè)計。本游戲主要有三個界面,一是用于主游戲區(qū)的游戲畫布,用來顯示游戲時運動和落下去的方塊,二是用于控制游戲的各種控件以及顯現(xiàn)游戲信息的一些組件,這是一個面板,三是進行網(wǎng)絡(luò)對戰(zhàn)時用以顯示對方游戲信息的面板。3.2.2 游戲控制需求方塊下落時,可通過鍵盤方向鍵(上、下、左、右鍵)對該方塊進行向上(變形),向下(加速)、向左、向右移動。3.2.3 圖形顯示需求隨機給出不同的形狀(長條形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充給定的區(qū)域,若填滿一條便消掉,記分,當(dāng)達到一定的分數(shù)時,過關(guān),一共設(shè)置十關(guān),每關(guān)方塊下落的速度不同,游戲中先結(jié)束的一方為本局輸家,十關(guān)過后,勝出局數(shù)多的為贏家。3.2.4 音樂播放需求本游戲,應(yīng)該具備播放背景音樂和發(fā)生相應(yīng)操作時的音效的功能,比如,方塊落下、滿行消除時的音效。3.2.5 道具使用需求本游戲,可以具備幾種道具的使用功能,比如,這些道具可以是某些特殊的方塊,比如,可以定義一種旋轉(zhuǎn)的方塊,也可以定義一種炸彈,能夠炸毀一定數(shù)量的方塊,以增強游戲的趣味性。3.2.6 網(wǎng)絡(luò)對戰(zhàn)需求本游戲,具備網(wǎng)絡(luò)對戰(zhàn)功能,所以要求玩家能夠看到對方的游戲信息。3.3 運行環(huán)境及系統(tǒng)性能的需求 本游戲?qū)\行環(huán)境及系統(tǒng)性能的需求如表3.1所示:表3.1 游戲?qū)\行環(huán)境及系統(tǒng)性能需求分析表操作系統(tǒng)Windows98/me/2000/XP/2003內(nèi)存容量64MB顯卡要求8M聲卡要求支持DirectX 8.0 聲卡交互工具鍵盤/鼠標(biāo)CPU奔騰133以上光驅(qū)8倍速以上硬盤空間400MB顯示器VGA以上顯示器開發(fā)及運行軟件JDK1.5以上版本3.4 接口需求本軟件需求通過鍵盤進行操作,在Windows的操作系統(tǒng)下,利用鍵盤的上、下、左、右鍵對方塊進行移動變形,要使用鍵盤的接口事件。3.5 方案論證可用于較好地實現(xiàn)俄羅斯方塊的語言有C+、VB、JAVA,所以客觀上說來,可用Jave,VB和C+這三種語言編寫俄羅斯方塊程序。下面結(jié)合自身實際情況分別論述三種語言的優(yōu)缺點并從中選擇一種適合的編寫語言。3.6.1 VB的特點VB是完全中文化的環(huán)境使用,語句生成器和快速提示幫助使用戶不必記憶成千上萬的屬性和方法,在較短的時間內(nèi)就能開發(fā)出功能強大的應(yīng)用程序。Internet應(yīng)用程序的開發(fā)功能更加強大和容易,支持動態(tài)HTML技術(shù)的應(yīng)用程序。種類繁多,功能強大的多媒體控件,能幫助用戶在較短的時間內(nèi)用較少的語句編寫出圖文聲像并茂的多媒體程序。能對多種數(shù)據(jù)庫進行讀寫操作。它所提供的可視化數(shù)據(jù)管理器能幫助用戶構(gòu)造多種類型的數(shù)據(jù)庫。用戶自定義類型可以作為參數(shù)或作為公共屬性和方法的返回值,函數(shù)可以返回數(shù)組變量,動態(tài)數(shù)組可以賦值,文件系統(tǒng)對象,按名調(diào)用,增強創(chuàng)建對象函數(shù)和StrConv函數(shù)。應(yīng)用程序安裝向?qū)軒椭脩糇詣由删哂幸欢üδ艿膽?yīng)用程序,加快了程序的開發(fā)速度。3.6.2 C+的特點C+是對C語言的擴充,擴充的絕大部分來自著名語言中的最佳特性:從SIMULA 67中吸取了類,從ALGOL 68中吸取了運算符一名多用、引用和在分程序中任何地方說明變量,綜合了Ada的類屬和Clu的模塊特點,從BCPL中吸取異常處理,從BCPL中吸取了用/表示注釋。C+保持了C的緊湊、靈活、高效和易移植強的優(yōu)點,它對數(shù)據(jù)抽象的支持主要在于類概念和機制,對面向?qū)ο箫L(fēng)范的支持主要通過虛擬函數(shù)。C+既有數(shù)據(jù)抽象和面向?qū)ο竽芰?,語言運行性能高多,加上C語言的普及,而從C至C+的過渡較為平滑,以及C+與C的兼容程度可使數(shù)據(jù)巨大的C程序能方便地在C+環(huán)境中重用。盡管C+當(dāng)初的設(shè)計本意是幫助管理大型程序,但其用途并不僅限于此。C+的面向?qū)ο蟮奶匦钥捎行У赜糜趯嶋H的程序設(shè)計工作。C+常常用于設(shè)計編輯器、數(shù)據(jù)庫、個人文件系統(tǒng)以及通訊程序等。而且,由于C+共享C的效率,所以用C+可以構(gòu)成很多高性能的系統(tǒng)軟件。3.6.3 Java的特點Java是定義位于網(wǎng)絡(luò)計算的計算機語言,它幾乎所有的特點也是圍繞著這一中心展開的并為之服務(wù)的,這些特點使得Java語言特別適全于用來開發(fā)網(wǎng)絡(luò)上的應(yīng)用程序;另外,作為一種面世較晚的語言,Java也集中體現(xiàn)和充分利用了若于當(dāng)代軟件技術(shù)新成果,如面向?qū)ο蟆⒍嗑€程等,這些也都在它的特點中有所反映。平臺無關(guān)性:如前所述,Java語言獨特的運行機制使得它具有良好的可移植性,利用Java,開發(fā)人員可以編寫出與具體平臺無關(guān)、普遍適用的應(yīng)用程序,大大降低了開發(fā)、維護和管理的開銷。面向?qū)ο螅篔ava是純面向?qū)ο蟮木幊陶Z言。面向?qū)ο蠹夹g(shù)較好地適應(yīng)了當(dāng)今軟件開發(fā)過程中新出現(xiàn)的種種傳統(tǒng)面向過程語言所不能處理的問題,包括軟件開發(fā)的規(guī)模擴大、升級加快、維護量增大經(jīng)及開發(fā)分工日趨細化、專業(yè)化和標(biāo)準(zhǔn)化等,是一種迅速成熟、推廣的軟件開發(fā)方法。面向?qū)ο蠹夹g(shù)的核心是以更接近人類思維的方式建立計算機邏輯模型,它利用類和對象的機制將數(shù)據(jù)與其上的操作封裝在一起,并通過統(tǒng)一的接口與外界交互,使反映現(xiàn)實世界實體的各個類在程序中能夠獨立、自治、繼承;這種方法非常有利于提高程序的可維護性和可重用性,大大提高了開發(fā)效率和程序的可管理性,使得面向過程語言難于操縱的大規(guī)模軟件可以很方便的創(chuàng)建、使用和維護。多線程機制:多線程是當(dāng)今軟件技術(shù)的又一重要成果,已成功應(yīng)用在操作系統(tǒng)、應(yīng)用開發(fā)等多個領(lǐng)域。多程序技術(shù)允許同一個程序有兩個執(zhí)行線索,即同時做兩件事情,滿足了一些復(fù)雜軟件的需求。Java不但內(nèi)置多線程功能,而且提供語言級的多線程支持,即定義了一些用于建立、管理多線程的類和方法,使得開發(fā)具有多線程功能的程序變得簡單、容易和有效。簡單易學(xué):如前所述,衍生自C+的Java語言,出于安全穩(wěn)定性的考慮,去除了C+中不容不得易理解和掌握的部分,如最典型的指針操作等,降低了學(xué)習(xí)的難度;同時Java還有一個特點就是它的基本語法部分與C語言幾乎一模一樣。這樣,無論是學(xué)過Java再學(xué)C,還是已經(jīng)掌握了C語言再業(yè)學(xué)Java,都會感到易于入門。3.6.方案選擇面向?qū)ο笫且环N認識世界的方法,是一種程序設(shè)計方法。面向?qū)ο蟮挠^點認為,客觀世界是由各種各樣的實體,即對象組成的。每種對象都有自己的內(nèi)部狀態(tài)和運動規(guī)律,不同對象間的相互聯(lián)系和相互作用就構(gòu)成了各種不同的系統(tǒng),并進而構(gòu)成整個客觀世界。按照這樣的思想設(shè)計程序,就是面向?qū)ο蟮某绦蛟O(shè)計。面向?qū)ο蟮某绦蛟O(shè)計吸取了結(jié)構(gòu)化程序設(shè)計的先進思想,并把它們同幾個支持用戶用新方法進行程序設(shè)計的有力概念結(jié)合在一起。所有面向?qū)ο蟮某绦蛟O(shè)計語言一般都包含三個概念:封裝、多態(tài)性和繼承性。這種方法要求語言必須具備抽象、封裝、繼承和多態(tài)性這幾個關(guān)鍵要素。面向?qū)ο蟮某绦蛟O(shè)計,是通過數(shù)據(jù)和代碼建立分塊的內(nèi)存區(qū)域,以便提供對程序進行模塊化的一種程序設(shè)計方法,這些模塊可以被用作樣板,在需要時再建立其副本。C+和Java在面向?qū)ο筮@方面比VB要強,所以我排除了用VB做的可能性。但是C+主觀上在校期間學(xué)校并沒有這方面的授課內(nèi)容,雖然自學(xué)了一些內(nèi)容,對C+也有一定了解,但是若用C+實現(xiàn),必定是基于windows應(yīng)用程序的Visual C+設(shè)計,對于windows編程,我還有待提高,而我對JAVA的掌握,相對而言,比較熟悉,綜合考慮,決定采用Java語言編寫俄羅斯方塊。沈陽工程學(xué)院畢業(yè)論文 第4章 概要設(shè)計第4章 概要設(shè)計4.1 游戲設(shè)計所要遵循的規(guī)范一個良好的程序,在編寫之前,必須要制定各種編寫規(guī)范,以便組內(nèi)各成員協(xié)調(diào)工作。當(dāng)然,本游戲只是一個小程序,過多的規(guī)范制定顯得沒有必要,但是,也必須制定一個對于變量的命名規(guī)則,這有利于設(shè)計出一個可讀性高的程序。本程序變量的命名規(guī)則為:所有變量一律使用相應(yīng)的英文單詞命名如果同一類中需要創(chuàng)建多個同一類型,功能相似的變量,變量的前綴應(yīng)使用統(tǒng)一的英文單詞,后綴為下劃線“_”加數(shù)字。比如,從JButton對象創(chuàng)建開始按鈕,可以命名為:startbutton。再如,創(chuàng)建多個道具按鈕,可以命名為toolbutton_1,toolbutton_2等等。方法命名盡量使用能夠描述本方法功能的英文單詞比如,游戲初始化可以用gameinitial。類名字命名也應(yīng)當(dāng)使用能夠描述本類功能的英文單詞。如方塊類,可以用class block。4.2 游戲總體設(shè)計分析Java為純面向?qū)ο螅∣bject-Oriented,OO)的程序語言,它的諸多優(yōu)點在此就不作論述了。從面向?qū)ο蟮挠^念出發(fā),本程序主要可分為以下幾個模塊:l 客戶端GUI模塊l 方塊及地圖數(shù)據(jù)模塊l 音頻文件播放模塊l 道具使用模塊l 網(wǎng)絡(luò)傳輸模塊分析對象的技巧在于它的功能的擴展性及維護效率。試想,如果因為外部環(huán)境或者用戶需求的變化需要對程序進行功能擴展或者維護,就要對代碼作大幅度的更動甚至重寫,這樣就失去了面向?qū)ο蟮膬?yōu)勢,所以在本程序分析時將獨立性高的模塊作為一個對象,以提高程序的可擴展性和可維護性。4.3 各模塊的算法設(shè)計4.3.1客戶端接口的設(shè)計 “客戶端控制器”是指游戲界面上顯示游戲相關(guān)信息及排布游戲控件的面板。游戲客戶端控制器上集合了游戲的各種事件處理,包括游戲定時控制,鍵盤控制,道具控制,音樂播放,選擇網(wǎng)絡(luò)對戰(zhàn)等各種控制命令。本模塊是程序的主模塊,其它四個模塊都由本模塊進行控制。1 客戶端接口的結(jié)構(gòu),如圖4.1所示: 關(guān)客戶端控制器程 序 運 行網(wǎng) 絡(luò)對 戰(zhàn)背景音 樂游戲暫 停道具使 用游戲開始圖4.1 客戶端結(jié)構(gòu)圖2 客戶端接口的實現(xiàn)一個程序,在追求程序性能的同時,應(yīng)該同時注重GUI的美觀度,基于此,本游戲應(yīng)該采用JAVA中swing組件包,swing組件是一組完全由JAVA語言編寫的輕量級組件,沒有本地代碼,不依賴本機操作系統(tǒng)的支持,所以swing比AWI具有更強的實用性,比起AWI組件,swing組件在美觀度和控制性能方面具有如下幾方面的優(yōu)點:可插入的外觀感覺在AWI組件中,猶豫控制組件外形惡對等類與具體平臺相關(guān),使得AWI組件總是只有與本機相關(guān)的單一的L&F。swing對PL&F的支持改變了單一圖形界面的觀感,即實現(xiàn)了在任意平臺上運行同一個swing程序能有不同惡L&F。變成人員可以在GUI程序設(shè)計中加入相應(yīng)的開關(guān),使得程序運行時可以根據(jù)喜好選擇不同的L&F,呈現(xiàn)不同個性化界面。設(shè)置邊框可以使用相應(yīng)的方法為swing組件設(shè)置一個或多個邊框。Swing中提供了各種各樣的邊框供用戶選用,也能夠給通過變成人員的組合來設(shè)計個性邊框。充分利用邊框設(shè)計,可以協(xié)助布局管理器對組件進行合理的布局。使用圖標(biāo)此特性使得swing組件較之AWI組件具有更強的外觀感受。與AWT組件不同,許多swing組件如按鈕、標(biāo)簽,不僅可以使用文字,還可以使用圖標(biāo)來加強外觀效果。支持鍵盤操作在swing組件中,使用Jcomponent類的registerKeyboardAction方法,能使用戶通過鍵盤操作來替代鼠標(biāo)驅(qū)動GUI上swing組件的相應(yīng)動作??纱嫒⌒灾С炙衧wing組件都實現(xiàn)了可存取性接口,提供對可存取性的支持,使得輔助功能如屏幕閱讀器、語音識別系統(tǒng),能十分方便地從swing組件中得到信息。MVC體系結(jié)構(gòu)Swing組件設(shè)置三個通訊對象:模型、視圖和控件,并將模型與視圖奮力開來,這樣可以方便用戶直接通過模型管理數(shù)據(jù),實現(xiàn)基于一種模型的多種視圖處理?;趕wing組件的優(yōu)點,結(jié)合本程序的設(shè)計目標(biāo),程序的界面將使用swing組件實現(xiàn)。4.3.2方塊及地圖數(shù)據(jù)模塊的設(shè)計這是俄羅斯方塊游戲最基本的功能模塊,本游戲的設(shè)計思想是只要有客戶端控制器及方塊地圖數(shù)據(jù)模塊,就能實現(xiàn)游戲的基本功能。本模塊其實可以分開為方塊和地圖兩個模塊,但考慮到二者聯(lián)系緊密,需要共享數(shù)據(jù)結(jié)構(gòu),屬于公共耦合,耦合性過高,將二者分開也有悖于作者設(shè)計的游戲算法,增加了程序的編寫難度,故把它們并作了一個對象。1方塊數(shù)據(jù)方塊數(shù)據(jù)存儲了七種不同形態(tài)的方塊,以及每個方塊的四種形態(tài),可用一個7x4x4x4的四維數(shù)組表示,例如,定義一個四維數(shù)組block7444,數(shù)組block的第一維表示七種不同形態(tài)的方塊,第二維代表方塊的四種不同翻轉(zhuǎn)狀態(tài)。數(shù)組的第三維和第四維代表某一種形態(tài)的方塊的某一狀態(tài)。假定,block00ij的值如以下:1,1,0,0 0,1,0,0 0,1,0,0 0,0,0,0則,block00ij代表“7”字型的方塊。當(dāng)方塊翻轉(zhuǎn)時,只需改變第二維的下標(biāo)即可,即,block00ij變?yōu)閎lock01ij。而如果更改方塊形態(tài),就改變數(shù)組第一維坐標(biāo)。 2地圖數(shù)據(jù)本游戲的游戲地圖為25x15格,故應(yīng)當(dāng)用一個25行15列的二維數(shù)組存儲游戲地圖數(shù)據(jù),但是考慮到本游戲嵌入了方塊越界自動糾正功能,而方塊越界,實際上就是游戲地圖數(shù)組越界。假定,方塊數(shù)據(jù)有以下數(shù)據(jù)模式,代表長條形的一種方塊:0,0,0,10,0,0,10,0,0,10,0,0,1當(dāng)以上數(shù)據(jù)模式所代表的方塊處在游戲的左邊界區(qū),并且發(fā)生翻轉(zhuǎn)時,方塊可能翻出游戲地圖外,在這種情況下,就發(fā)生了游戲地圖數(shù)組越界,JAVA異常處理系統(tǒng)會拋出ArrayIndexOutOfBoundsException,為避免這種情況的發(fā)生,游戲地圖數(shù)組應(yīng)當(dāng)適當(dāng)增大,故本游戲?qū)⒌貓D數(shù)組長度和寬度各擴大了三個單位,定義成為28x18模式的數(shù)組。3建立游戲的坐標(biāo)系統(tǒng)俄羅斯方塊,最終是要將方塊繪到游戲地圖中,如何確定方塊在地圖上的位置,就需要一個方塊數(shù)組與游戲地圖數(shù)組的映射關(guān)系。建立一個合理的坐標(biāo)系統(tǒng),對于游戲的設(shè)計有莫大的方便。結(jié)合JAVA的坐標(biāo)系統(tǒng),綜合游戲設(shè)計上的考慮,本程序最終確定了將游戲地圖的左上角坐標(biāo)表示為(0,0),同樣,方塊在游戲地圖中表示為記錄方塊左上角在游戲地圖中的坐標(biāo)。4對方塊數(shù)據(jù)和游戲數(shù)據(jù)的操作確定了方塊數(shù)據(jù)與地圖數(shù)據(jù)的映射關(guān)系,對方塊和游戲數(shù)據(jù)的操作就變得簡便了。對方塊的操作包括方塊的左移、右移、下移等,當(dāng)方塊左移時,只需將方塊數(shù)組左上角的坐標(biāo)往左方向移動一個單位即可,同理,方塊右移、下移時,只需將坐標(biāo)往右、往下移動一個單位。如果以X代表方塊左上角的橫坐標(biāo),以Y代表縱坐標(biāo),方塊左移,執(zhí)行的操作是X-,方塊右移,執(zhí)行的操作是X+,方塊下落,執(zhí)行的操作是Y+。5游戲繪圖俄羅斯方塊具有七種不同形態(tài)的方塊,而方塊又分別有正在下落和已經(jīng)落下固定兩種不同狀態(tài),如何在游戲地圖中實現(xiàn)靜態(tài)和動態(tài)地繪制出七種不同形態(tài)的方塊,具有一定的挑戰(zhàn)性。經(jīng)過反復(fù)思考論證,本游戲決定采用不同的繪制模式來分別實現(xiàn)繪制動態(tài)和靜態(tài)方塊。遍歷方塊數(shù)組繪制動態(tài)方塊假定調(diào)用Graphics類中的fill3DRect(int x,int y,int width,int height,Boolean raised)方法繪制方塊,再假定方塊數(shù)組左上角在地圖中的坐標(biāo)為x和y,則繪制動態(tài)方塊可采用如下方式實現(xiàn)。for(int i=0;i=3;i+) for(int j=0;j=3;j+) if(Blockblocktypeturnstateij=1)g.fill3DRect(y+j)*width,(x+i)*width,width,width,raised);這種繪制方式的原理是每一次繪制一個單位長度的正方形格子,在將這些格子組合成某一種的形態(tài)方塊。這里面,某一種形態(tài)的方塊是由方塊數(shù)組中的參數(shù)i和j決定的,具體是哪種形態(tài)的方塊,方塊的哪一種翻轉(zhuǎn)狀態(tài),是由參數(shù)blocktype和turnstate決定的。而參數(shù)y+j表示的當(dāng)前格子的左上角在游戲地圖中的橫坐標(biāo),x+i表示的是小格子的縱坐標(biāo)。遍歷游戲地圖數(shù)組實現(xiàn)墜下方塊的消行繪制當(dāng)墜下的方塊有滿行需要重新繪制時,需要進行消行繪制。首先,可用一個數(shù)值代表游戲地圖數(shù)組的某一個區(qū)域是否有方塊填充,假定這個數(shù)值是2,即如果地圖數(shù)組中某一個元素的值為2,則表示這個元素所代表的地圖區(qū)域存在方塊。進行消行繪制時需要判斷地圖數(shù)組的某一行是否全為2,如果全為2,則可以認為這行被方塊填滿,需要進行消行,然后再繼續(xù)往下判斷下一行,直到所有滿行被消除為止。開始結(jié)束否地圖數(shù)組某一行是否全為2是消去這一行圖4.2 消行流程圖4.3.3音樂播放模塊的設(shè)計音頻文件的播放涉及到IO操作,不管是何種系統(tǒng),對于IO操作,都是比較慢的,如果當(dāng)程序運行到需要播放音效時,再從文件中取得音頻數(shù)據(jù),然后播放,很可能會造成一種“卡”的感覺,影響用戶體驗?;诖耍?jīng)過反復(fù)論證,本游戲決定采用以剪輯的方式來播放音頻文件。JAVA語言中的剪輯Clip,是一種在播放之前就提前加載于內(nèi)存中的特殊的音頻數(shù)據(jù)流,當(dāng)需要用時,只需直接從內(nèi)存中調(diào)出即可,省去了IO讀取所需的大量時間,而且剪輯播放完畢后,仍舊存儲在內(nèi)存中,對于游戲的背景音樂及音效這類需要反復(fù)多次播放的音頻,這種方式是非常有用的。單單采用剪輯還是不夠的,音頻文件的播放,應(yīng)當(dāng)另外開啟線程來控制,這樣既可以更方便地控制音頻的播放、暫停等操作,也不會程序執(zhí)行其它的操作。1音效播放在游戲開始、暫停,方塊落下及消行時添加相應(yīng)的音效既可以提醒用戶發(fā)生某種變化,又能增強程序的表現(xiàn)效果。音效,相對來說是比較小的音頻文件,對于音效,可選取wav格式的音頻文件,不但音頻質(zhì)量好,在系統(tǒng)支持、存儲性方面也占有優(yōu)勢。根據(jù)多線程及剪輯的思想,首先在程序初始化時應(yīng)該把音效載入內(nèi)存,游戲開始后開啟一個線程,當(dāng)滿足音效播放的條件時,即播放音效,音效播放完畢后,應(yīng)當(dāng)將相應(yīng)的音頻文件的剪輯位置重新置為開始處。2背景音樂播放同音效的播放,背景音樂的播放也應(yīng)當(dāng)采用剪輯的形式,以方便音樂的循環(huán)多次播放,同樣,背景音樂播放可能是貫穿于整個游戲過程,背景音樂的播放必須采用單獨的線程控制,以不影響程序執(zhí)行其它操作。因為背景音樂采用單獨線程播放,這里面會出現(xiàn)一個問題,當(dāng)用戶選擇暫停背景音樂播放時,背景音樂播放線程是進入wait狀態(tài)還是以另一種方式實現(xiàn)暫停?如果背景音樂進入wait狀態(tài),則當(dāng)用戶取消暫停播放時,必須再創(chuàng)建一個線程去喚醒它,新建一個線程只是控制背景音樂播放,不免浪費資源,而且也增加程序編寫難度。考慮到背景音樂極可能在玩家的整個游戲過程中都處在播放狀態(tài),當(dāng)暫停時,玩家也隨時會取消暫停,故而在游戲結(jié)束之前,本程序會將背景音樂播放線程一直處在執(zhí)行狀態(tài),如果玩家暫停音樂播放,則讓線程轉(zhuǎn)去處理檢測玩家是否取消暫停,當(dāng)檢測到暫停取消后,繼續(xù)播放音樂。4.3.4道具使用模塊目前已經(jīng)存在的俄羅斯方塊游戲鮮有能夠使用道具的,開發(fā)一款能夠使用道具功能的俄羅斯方塊游戲具有一定挑戰(zhàn)度,因為道具的開發(fā)不僅涉及到游戲策劃等創(chuàng)意性的內(nèi)容,也與圖形圖像處理等美工技術(shù)息息相關(guān),而作者對美工卻是不擅長的,基于此,本游戲最初版本的道具可能只有一個,但是為了將來版本提升的方便,本程序另外預(yù)留了三種道具的使用接口。本游戲一共設(shè)計了五種道具,旋轉(zhuǎn)方塊、炸彈、地雷、仙女、惡魔,這四種道具是程序現(xiàn)今或?qū)戆姹咎嵘笠褂玫降?,暫時,本游戲?qū)⒅粚崿F(xiàn)旋轉(zhuǎn)方塊和炸彈兩種道具。1旋轉(zhuǎn)方塊旋轉(zhuǎn)方塊是一種增加游戲難度的道具,它本身其實就是方塊,和正常的方塊的不同之處就在于,正常方塊在下落時,如果沒有接受到用戶的控制命令是不會旋轉(zhuǎn)的,而旋轉(zhuǎn)方塊則會不斷地旋轉(zhuǎn)下降。這樣,用戶便很難控制旋轉(zhuǎn)方塊下墜到指定的位置。對于旋轉(zhuǎn)方塊的定時下落,可以借用方塊控制線程,但是旋轉(zhuǎn)方塊的定時旋轉(zhuǎn),則只能依靠另一個線程實現(xiàn)。2炸彈本游戲定義的炸彈能夠像方塊一樣從地圖的頂部墜落,當(dāng)下墜到地圖下部與堆積的方塊碰撞時會發(fā)生“爆炸”,爆炸將炸毀一定數(shù)量的方塊。炸彈的視圖模型以現(xiàn)成的方塊模型為依據(jù),即除了添加的“炸彈”標(biāo)記,它和七種方塊在外形上是沒有任何區(qū)別的。炸彈,可以看成是一種特殊類型的方塊。對于炸彈的殺傷力,有一個規(guī)則,如果炸彈能夠沒入已經(jīng)墜下的方塊中,則可以將這個“炸彈”所占的行數(shù)全部炸毀,并增加相應(yīng)的積分,如果本身已經(jīng)能夠消行,則額外再獎勵一倍的積分。否則,炸彈將只炸毀它左右各兩個格子范圍內(nèi)的方塊。4.3.5網(wǎng)絡(luò)對戰(zhàn)模塊目前的俄羅斯方塊游戲中,也鮮有具備網(wǎng)絡(luò)對戰(zhàn)功能的,這是因為此類小游戲不具備在網(wǎng)絡(luò)對戰(zhàn)方面的可玩性,當(dāng)然,如果能夠利用道具進行網(wǎng)絡(luò)對攻,那就另當(dāng)別論了。就如QQ上的火并俄羅斯方塊一樣,要實現(xiàn)利用道具進行網(wǎng)絡(luò)對攻,其中一方玩家必須能夠看到他的對手的游戲信息,但這并限于看到對手的道具數(shù)量,下一個方塊預(yù)告。所以,本游戲要求將游戲地圖中方塊的實時信息遠程傳輸?shù)搅硪环酵婕业娘@示平臺。圖像的遠程傳輸首先要求將游戲地圖中的方塊信息轉(zhuǎn)化為圖像資源,然后將圖像資源轉(zhuǎn)化成基于某種圖片格式的數(shù)據(jù)流,進行打包發(fā)送,在接收端上,再把圖像數(shù)據(jù)從數(shù)據(jù)包上提取出來,進行解碼,生成相應(yīng)的圖像,然后再把圖像繪制到游戲畫布中。進行網(wǎng)絡(luò)傳輸,首先應(yīng)當(dāng)選定一種網(wǎng)絡(luò)傳輸協(xié)議。TCP套接字協(xié)議和UDP數(shù)據(jù)報協(xié)議二者中前者傳輸速率慢,但是提供可靠性保證,準(zhǔn)確率高,后者傳輸速率快,但是并提供可靠性保證。對于游戲的網(wǎng)絡(luò)對戰(zhàn)來說,對網(wǎng)絡(luò)傳輸?shù)膶崟r性要求比較高,一方玩家必須能夠看到另一方玩家游戲狀況的實時信息,這就要求圖像的傳輸速率必須要快,同樣因為它的實時性,即使某一次傳輸錯誤,后面一幀圖像也會馬上覆蓋前面的圖像,人的肉眼基本上不能辨別出這種錯誤,基于此,本游戲的網(wǎng)絡(luò)對戰(zhàn)傳輸方式應(yīng)該采用基于UDP的用戶數(shù)據(jù)報協(xié)議。4.4 可靠性設(shè)計游戲在設(shè)計時應(yīng)當(dāng)盡量注意降低各個模塊之間的耦合性,增強模塊的獨立性,以便將來需求時進行游戲版本的提升以及相關(guān)維護。4.5 概要設(shè)計評審經(jīng)過反復(fù)論證,上面提出的設(shè)計方案,尤其是游戲設(shè)計的各個功能模塊間的算法確實可行,因此,本游戲可進入詳細設(shè)計階段。沈陽工程學(xué)院畢業(yè)論文 第5章 詳細設(shè)計第5章 詳細設(shè)計5.1 客戶端設(shè)計客戶端是游戲非常重要的一部分,它是所有游戲功能的開關(guān),上面集合了許多的圖像用戶接口,客戶端的實現(xiàn)應(yīng)該確定一種合理的組織架構(gòu)。圖5.1是客戶端的組織結(jié)構(gòu)圖:游戲客戶端網(wǎng)絡(luò)對戰(zhàn)開 關(guān)背景音樂開 關(guān)游戲控制器游戲開 關(guān)道具控制器游戲定時控 制鍵盤控 制音效控制器圖5.1 客戶端的組織架構(gòu)圖游戲客戶端采用swing組件開發(fā),并且向其注冊監(jiān)聽器,以實現(xiàn)各種控制功能,綜合游戲前面的設(shè)計,客戶端上至少要注冊三個監(jiān)聽器,分別是窗口監(jiān)聽器(WindowListener)、動作監(jiān)聽器(ActionListener)、鍵盤監(jiān)聽器(KeyListener)、選項監(jiān)聽器(ItemListener)。根據(jù)初步設(shè)計,可以確定客戶端上所要用到的Swing組件對象有JFrame對象、JPanel對象,JLabel對象、JButton對象、JMenuBar對象、JMenu對象、JMenuItem對象、JTextField對象、JTextArea對象、JDialog對象、JRadioButton對象、JTabbedPane對象,至少十二個swing組件對象。JFrame用以創(chuàng)建窗體,考慮到本游戲具備單機和網(wǎng)絡(luò)對戰(zhàn),JFrame對象的大小并不是不變的,在單機游戲和網(wǎng)絡(luò)對戰(zhàn)時,JFrame對象分別會呈現(xiàn)出不同大小,以適應(yīng)不同的游戲環(huán)境需求。在主界面上,可以確定有四個JPanel對象。第一個JPanel對象是用來繪制方塊的游戲地圖,第二個JPanel對象是用來排列其它各種組件的容器組件,做游戲信息顯示面板,可以放在游戲地圖的左邊,第三個JPanel對象是用來顯示NEXT方塊的,應(yīng)該畫在第二個JPanel對象上,第三個JPanel對象是當(dāng)網(wǎng)絡(luò)對戰(zhàn)時,用來繪制另一方玩家游戲地圖的繪圖面板,放在游戲信息顯示面板的右邊??梢源_定,主界面上,本游戲的按鈕有五個,一個“開始游戲”按鈕,四個道具按鈕,排列在游戲信息顯示面板上,可以將“開始游戲”按鈕放在頂端,當(dāng)按下“開始游戲”按鈕后,應(yīng)該改變“開始游戲”按鈕的文本內(nèi)容為“暫停游戲”,按下“暫停游戲”按鈕后,再將其文本內(nèi)容重新設(shè)置為“開始游戲”。至于四個道具按鈕,可以放在信息顯示面板的中部位置。JTextArea對象用來顯示游戲時的相關(guān)信息,比如網(wǎng)絡(luò)對戰(zhàn)時顯示雙方玩家的比分等信息。JTextArea應(yīng)該放在游戲信息面板的底部。JTextField對象至少應(yīng)該有兩個,用來顯示雙方玩家的分數(shù)信息,考慮到對戰(zhàn)時的局時設(shè)置,還應(yīng)該增加一個文本框用來計時,計時的文本框最好放在JTextArea對象的上方,這樣,兩個分數(shù)文本框則布置在道具按鈕和計時文本框之間。本游戲主界面上的JLabel對象至少應(yīng)該有四個。首先,應(yīng)該為NEXT方塊畫布添加一個標(biāo)簽,然后在四個道具按鈕上也應(yīng)該添加一個道具標(biāo)簽,最后,在兩個顯示分數(shù)的文本框上方也應(yīng)該添加一個標(biāo)簽最后,在游戲主界面的頂端要添加一個菜單欄,菜單欄上添加幾個菜單對象。綜合以上信息,可以大概確定本游戲的主界面,如圖5.2所示:圖5.2 游戲界面圖5.2音效播放控制模塊設(shè)計本游戲的音效播放采用剪輯及多線程的方式實現(xiàn)。音頻播放需要用到JAVA中的sound包。首先,利用AudioSystem這個音頻工廠的getAudioInputstream()方法從音頻文件中取得一個音頻輸入流,其次,從這個音頻輸入流創(chuàng)建一個Clip,然后打開這個Clip。這樣,當(dāng)需要時,就可以利用Clip中的start()方法播放這個剪輯,重復(fù)播放,可以用setFramePosition(0)這個方法將剪輯的位置重新置為0。音效剪輯的播放控制流程圖如圖5.3所示:開始滿足音效播放條件Notify音效播放線程,游戲線程進入wait狀態(tài)播放音效Notify游戲線程,音效播放線程進入wait狀態(tài)結(jié)束圖5.3 音效播放流程圖5.3背景音樂播放控制模塊設(shè)計同音效的播放,背景音樂的播放也應(yīng)當(dāng)采用剪輯的形式,以方便音樂的循環(huán)多次播放,同樣,背景音樂播放也要單獨的線程進行控制。前面概要設(shè)計提出了一個問題。因為背景音樂采用單獨線程播放,當(dāng)用戶選擇暫停背景音樂播放時,背景音樂播放線程如果以進入wait狀態(tài)來暫停的話,則當(dāng)用戶取消暫停時必須還需要一個線程來喚醒它,額外增加一個線程的話,不免浪費系統(tǒng)資源,而且也會增加編寫的難度。從另一個角度來說,背景音樂極可能在玩家的整個游戲過程中都處在播放狀態(tài),當(dāng)暫停時,玩家也隨時會取消暫停,因此,可以讓背景音樂線程從游戲開始后就一直處在執(zhí)行狀態(tài),如果用戶暫停播放,可以讓線程轉(zhuǎn)去循環(huán)處理檢測用戶是否取消暫停,當(dāng)檢測到用戶取消暫停時,繼續(xù)播放音樂。背景音樂播放控制的算法流程如圖5.4所示:開始否背景音樂播放控制線程是否接受到恢復(fù)信息是否處在暫停狀態(tài)是否是播放背景音樂接受到暫停信息暫停播放結(jié)束圖5.4 背景音樂播放控制流程圖5.4網(wǎng)絡(luò)對戰(zhàn)模塊設(shè)計如圖5.2游戲界面圖所示,可以在菜單欄中“游戲”菜單項中添加一個“網(wǎng)絡(luò)對戰(zhàn)”菜單選項,當(dāng)用戶單擊“網(wǎng)絡(luò)對戰(zhàn)”菜單選項后,彈出一個對話框,提示用戶輸入要連接的主機的IP地址,用戶輸入IP地址后,程序會記錄下這個IP地址,當(dāng)用戶開啟游戲后,數(shù)據(jù)傳輸線程會將數(shù)據(jù)發(fā)送到這個IP地址的指定端口號上。對于實現(xiàn)網(wǎng)絡(luò)傳輸?shù)募夹g(shù),可以用UDP數(shù)據(jù)報傳輸方式。首先從AWT包中的Robot創(chuàng)建一個實例,這個類的實例是有關(guān)本機屏幕資源的信息,它有一個createScreenCapture()方法,可以用它來創(chuàng)建屏幕上指定坐標(biāo)位置,指定大小的一副圖像。當(dāng)然,在此之前,我們還需要獲得游戲地圖所在屏幕的坐標(biāo)。Component類中提供了一個獲取組件屏幕坐標(biāo)的方法getLocationOnScreen(),我們可以利用這個方法獲取組件在屏幕上的坐標(biāo),然后把這個坐標(biāo)賦給一個Point對象,再從Rectangle類中創(chuàng)建一個指定屏幕坐標(biāo)位置,指定寬和高的矩形,然后就可以用createScreenCapture()創(chuàng)建一副包含游戲地圖區(qū)域的圖像了。創(chuàng)建圖像信息以后,可以利用imageio包ImageIO類中的write(RenderedImageim, StringformatName, OutputStreamoutput)方法將圖像文件寫入到一個輸出流中,然后可以用toByteArray()從輸出流中取得數(shù)據(jù),最后就是將數(shù)據(jù)打包發(fā)送了。對于接收端接收到的數(shù)據(jù)包,可以先從數(shù)據(jù)包中將圖像字節(jié)數(shù)據(jù)提出出來放到一個字節(jié)數(shù)組中,然后利用Toolkit包中的createImage(byte imagedata)方法將圖像字節(jié)數(shù)據(jù)轉(zhuǎn)化成圖像,最后將圖像畫到游戲畫布中即可。相應(yīng)的算法流程如圖5.5所示:開始開始確定游戲地圖在屏幕上的坐標(biāo)構(gòu)造一個指定坐標(biāo)大小的Rectangle對象從指定的端口號接收數(shù)據(jù)包將Rectangle對象指定的屏幕區(qū)域轉(zhuǎn)化為圖像資源從數(shù)據(jù)包中取得字節(jié)數(shù)據(jù)將此圖像資源以某種格式寫入輸出流以此字節(jié)數(shù)據(jù)創(chuàng)建一副圖像從輸出流獲取字節(jié)數(shù)據(jù)將圖像繪制到游戲畫布中將字節(jié)數(shù)據(jù)打包發(fā)送結(jié)束結(jié)束(a) 圖像發(fā)送流程 (b) 圖像接收流程圖5.5 圖像發(fā)送和接收流程圖5.5道具模塊設(shè)計5.5.1旋轉(zhuǎn)方塊的設(shè)計旋轉(zhuǎn)方塊的出現(xiàn)是隨機的,而隨著游戲級別的提升,每一關(guān)出現(xiàn)的旋轉(zhuǎn)方塊的數(shù)量也會不同,對于七種方塊來說,它們在任何一段時間內(nèi)出現(xiàn)的概率都是一致的,再者,旋轉(zhuǎn)方塊需要兩個定時器,定時下落和定時旋轉(zhuǎn)。旋轉(zhuǎn)方塊的這個性質(zhì)要求它必須要兩個線程才能控制,但是為了充分利用資源,我們可以利用方塊控制線程去控制旋轉(zhuǎn)方塊定時下落,然后只需再創(chuàng)建一個線程控制它定時旋轉(zhuǎn)即可。確定了兩個線程共同控制旋轉(zhuǎn)方塊,就會出現(xiàn)一個線程協(xié)調(diào)工作的問題。如果一個新方塊出現(xiàn)的時機正好也是旋轉(zhuǎn)方塊出現(xiàn)的時機,程序就會出現(xiàn)紊亂,所以必須保證,在同一時間,正常方塊和旋轉(zhuǎn)方塊只能出現(xiàn)一個。因為兩個線程需要共同控制旋轉(zhuǎn)方塊,所以不能用wait()和notify()這兩個方法去協(xié)調(diào)線程,而應(yīng)當(dāng)利用其它條件去協(xié)調(diào)兩個線程。首先,游戲開始后,旋轉(zhuǎn)方塊控制線程可以隨機休眠一定時間(這個休眠時間應(yīng)該是隨著游戲級別的提升而縮短的)。休眠時間結(jié)束后,循環(huán)檢測正常方塊是否已經(jīng)落下,當(dāng)檢測到方塊落下后,馬上得到一個新方塊,然后開啟一個循環(huán),在方塊沒有落下之前讓它按一定的時間頻率旋轉(zhuǎn),成為一個旋轉(zhuǎn)方塊。對于方塊控制線程,在方塊落下時應(yīng)該休眠一定數(shù)量的時間,以讓旋轉(zhuǎn)方塊控制線程有得到旋轉(zhuǎn)方塊的機會,如果超出這個休眠時間,旋轉(zhuǎn)方塊控制線程還沒有得到新方塊,則可以認為旋轉(zhuǎn)方塊控制線程還處在休眠中,方塊控制線程得到一個新方塊。相應(yīng)的算法流程如圖5.6和圖5.7所示:休眠時間結(jié)束隨機休眠一定時間檢測現(xiàn)有方塊是否已經(jīng)落下是否能夠消行方塊是否已經(jīng)落下是否能夠消行休眠一定時間否是得到新方塊休眠一定時間旋轉(zhuǎn)方塊否是游戲是否結(jié)束是否能夠消行是否開始結(jié)束圖5.6 旋轉(zhuǎn)方塊控制線程工作圖休眠一定時間,讓旋轉(zhuǎn)方塊控制線程有得到方塊的機會檢測方塊是否已經(jīng)落下是否能夠消行是休眠時間結(jié)束旋轉(zhuǎn)方塊控制線程是否得到新方塊是否能夠消行是否否得到新方塊方塊下落開始結(jié)束圖5.7 方塊控制線程對旋轉(zhuǎn)方塊的控制示意圖5.5.2炸彈的設(shè)計道具的出現(xiàn)是隨機的。本游戲中要實現(xiàn)的道具“炸彈”和方塊一樣,從游戲地圖頂部降落,每隔一個時間間隔,會自動降落一格。對于炸彈的控制,可以添加到道具(旋轉(zhuǎn)方塊)控制線程中。炸彈控制的算法流程如圖5.8所示:休眠時間結(jié)束隨機休眠一定時間檢測現(xiàn)有方塊是否已經(jīng)落下是否能夠消行是否能夠消行是否能夠消行休眠一定時間否是產(chǎn)生一個炸彈炸彈落下否否是否完全沒入了方塊中炸毀左右各兩個格子范圍內(nèi)的方塊格子炸毀所占行數(shù)的方塊,增加相應(yīng)積分,再額外增加所能消行的相應(yīng)分數(shù)炸毀所占行數(shù)的方塊,增加相應(yīng)積分是否是是開始結(jié)束圖5.8 炸
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 5 Topic 2 Section C 教學(xué)設(shè)計-2024-2025學(xué)年仁愛科普版八年級英語下冊
- 二年級下冊數(shù)學(xué)教案-6.1菜園衛(wèi)士-連續(xù)進位、退位的三位數(shù)加減三位數(shù) 青島版
- 六年級下冊數(shù)學(xué)教案-四 比例 面積的變化|蘇教版
- 一年級上冊數(shù)學(xué)教案- 老鷹捉小雞 青島版
- 中建三局房屋建筑實測實量培訓(xùn)
- (??家族e題)2022-2023學(xué)年三年級上冊期末高頻考點數(shù)學(xué)試卷(蘇教版)
- 2024年科創(chuàng)大數(shù)據(jù)項目投資申請報告代可行性研究報告
- 2025年甘孜職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案一套
- 2025年黑龍江冰雪體育職業(yè)學(xué)院單招職業(yè)技能測試題庫必考題
- 2024年人工種植牙項目資金需求報告代可行性研究報告
- 冀教版數(shù)學(xué)七年級上下冊知識點總結(jié)
- 第六章 圍手術(shù)期護理課件
- 2024廣東省深圳市寶安區(qū)中考初三二模英語試題及答案
- 中考字音字形練習(xí)題(含答案)-字音字形專項訓(xùn)練
- 音響設(shè)備出租行業(yè)競爭分析及發(fā)展前景預(yù)測報告
- DB63-T 2313-2024 三江源國家公園生態(tài)監(jiān)測指標(biāo)
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案1套
- 駐場人員服務(wù)方案
- C語言程序設(shè)計(山東聯(lián)盟-青島科技大學(xué))智慧樹知到答案2024年青島科技大學(xué)
- 2024-2029年中國限幅器芯片行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告
- 醫(yī)療器械市場規(guī)劃
評論
0/150
提交評論