版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 畢業(yè)論文java俄羅斯方塊游戲</p><p><b> 摘 要</b></p><p> 在現(xiàn)今電子信息高速發(fā)展的時代,電子游戲已經(jīng)深入人們的日常生活,成為老少皆宜的娛樂方式。但是游戲設計結合了日新月異的技術,在一個產(chǎn)品中整合了復雜的設計、藝術、聲音和軟件,所以并不是人人皆知。直到今天,在中國從事游戲設計的人仍然很少,但是游戲行業(yè)的發(fā)
2、展之快,遠超如家電、汽車等傳統(tǒng)行業(yè),也正因為如此,游戲人才的教育、培養(yǎng)遠落后于產(chǎn)業(yè)的發(fā)展。</p><p> 俄羅斯方塊是個老幼皆宜的小游戲,它實現(xiàn)由四塊正方形的色塊組成,然后存儲在一個數(shù)組的四個元素中,計算機隨機產(chǎn)生不同七種類型的方塊,根據(jù)計算機時鐘控制它在一定的時間不停的產(chǎn)生,用戶根據(jù)鍵盤的四個方向鍵控制翻轉、向左、向右和向下操作,(控制鍵的實現(xiàn)是由鍵盤的方向鍵的事件處理實現(xiàn))。然后程序根據(jù)這七種方塊堆疊成
3、各種不同的模型。</p><p> 論文描述了游戲的歷史,開發(fā)此游戲的環(huán)境,游戲開發(fā)的意義。遵循軟件工程的知識,從軟件問題定義開始,接著進行可行性研究、需求分析、概要設計、詳細設計,最后對軟件進行了測試,整個開發(fā)過程貫穿軟件工程的知識體系。</p><p> 此次設計在Microsoft Windows XP系統(tǒng)下,以Java為開發(fā)語言,在eclipse開發(fā)平臺上進行游戲的設計與實踐。
4、</p><p> 關鍵詞:游戲設計;算法;數(shù)組;事件</p><p><b> 引 言</b></p><p> 游戲是人們活動中一項非常重要的內(nèi)容,有人認為如果哪一天人類對所有的游戲都失去興趣,恐怕世界的末日就要到了。電腦對游戲的貢獻有目共睹,現(xiàn)在摸過電腦的人很少有沒玩過電腦游戲的,喜歡游戲的人也很少有不玩電腦的。</p&
5、gt;<p> 俄羅斯方塊是一款風靡全球的電視游戲機和掌上游戲機游戲,它曾經(jīng)造成的轟動與造成的經(jīng)濟價值可以說是游戲史上的一件大事。這款游戲最初是由蘇聯(lián)的游戲制作人Alex Pajitnov制作的,它看似簡單但卻變化無窮,令人上癮。相信大多數(shù)用戶都還記得為它癡迷得茶不思飯不想的那個俄羅斯方塊時代。究其歷史,俄羅斯方塊最早還是出現(xiàn)在PC機上,而我國的用戶都是通過紅白機了解、喜歡上它的?,F(xiàn)在聯(lián)眾又將重新掀起這股讓人沉迷的俄羅斯
6、方塊風潮。對一般用戶來說,它的規(guī)則簡單,容易上手,且游戲過程變化無窮,而在"聯(lián)眾俄羅斯方塊"中,更有一些聯(lián)眾網(wǎng)絡游戲所獨有的魅力――有單機作戰(zhàn)與兩人在線對戰(zhàn)兩種模式,用戶可任選一種進行游戲。網(wǎng)絡模式還增加了積分制,使用戶既能感受到游戲中的樂趣,也給用戶提供了一個展現(xiàn)自己高超技藝的場所。</p><p> 俄羅斯方塊游戲可以說是隨計算機的發(fā)展而發(fā)展,并不斷推陳出新演變出各種類似游戲, 深受廣大
7、玩家喜愛。這個游戲有的簡單, 有的復雜, 但其根本原理是一樣的都是對運動的方塊進行組合, 來訓練玩家的反應能力。談到游戲軟件, 大多數(shù)人都認為其神妙莫測, 高不可及。而一般游戲軟件也確實具有很高的技術難度, 隨著開發(fā)工具及軟件開發(fā)方法學的不斷發(fā)展, 動手開發(fā)游戲也不是十分困難的。俄羅斯方塊游戲是一種古老而又有趣的游戲, 游戲軟件不計其數(shù), 網(wǎng)上就有好多關于實現(xiàn)的復雜算法和設計, 其難度讓一般初學者望而卻步。本文利用數(shù)組作為方塊的數(shù)據(jù)結構
8、,提出一種用JAVA語言實現(xiàn)的簡易方法, 對初學者可仿此開發(fā)類似游戲, 并了解游戲軟件的設計與開發(fā)過程。</p><p><b> 1.緒論</b></p><p> 1.1 電子游戲及其分類</p><p> 電子游戲,也就是運行在家用電腦、家用電子游戲機或是掌中寶游戲機及街機上的電子游戲程序。電子游戲是一種結合劇情故事、美術、音樂、
9、動畫、程序等技術于一身的互動型娛樂軟件,涉及到多個行業(yè)。 </p><p> 從電子游戲的分類來看,有著多種分類方式。傳統(tǒng)的游戲分類是按照游戲類型,將其分為即時戰(zhàn)略游戲、第一人稱射擊游戲、角色扮演游戲、策略型游戲等類別。根據(jù)游戲運行平臺的不同,可將電子游戲分為游戲機游戲、單機版PC 游戲、互動電視游戲、在線游戲和手機游戲。此外,韓國政府將電子游戲業(yè)分為家用游戲機游戲、單機版PC 游戲、網(wǎng)絡游戲和街機游戲四大類。
10、考慮到中韓游戲業(yè)比較接近,論文采用韓國的分類標準。“網(wǎng)絡游戲”也就是人們一般所指的“在線游戲”,是指通過互聯(lián)網(wǎng)進行的電腦游戲,通過人與人之間的互動達到交流、娛樂和休閑的目的。在互聯(lián)網(wǎng)(局域網(wǎng))技術出現(xiàn)之前,電子游戲都可以歸于單機版游戲,即“人機對戰(zhàn)”游戲,或最多是雙人對戰(zhàn)游戲。而隨著互聯(lián)網(wǎng)技術的出現(xiàn),通過連接游戲服務器,上百、上千、乃至上萬的游戲玩家同時連線娛樂成為了現(xiàn)實,這就大大增加了游戲的互動性、真實性,豐富了電子游戲的內(nèi)涵。從網(wǎng)絡
11、游戲的分類來看,目前業(yè)界還沒有一個比較統(tǒng)一規(guī)范的分類。隨著計算機設備和網(wǎng)絡技術的發(fā)展,電子游戲在全球得到了迅猛的發(fā)展,取得了巨大的成功,已成為當今世界上不可缺少的精神糧食。</p><p> 1.2 電子游戲發(fā)展現(xiàn)狀</p><p> 1.2.1 電子游戲在國外的發(fā)展現(xiàn)狀</p><p> 電子游戲是最初產(chǎn)生于美國,1971年,一個還在MIT就讀的學生設計了世
12、界上第一個業(yè)務用游戲機,這個街機游戲的名字叫《電腦空間》??梢哉f時至今日,電子游戲仍然是外國的天下。</p><p> 美國至今仍是世界第一大游戲市場,它遵循的是以發(fā)行商為主的產(chǎn)業(yè)開發(fā)鏈模式,根據(jù)美國市場調(diào)查公司NPD Group調(diào)查統(tǒng)計,美國2004年游戲總銷售金額(包括家用、掌上型主機及軟件)為99億美元,占了全球游戲市場的45%。其中游戲軟件銷售的具體數(shù)字是:視頻游戲軟件的銷售額達52億美元(1.6億套)
13、,PC游戲軟件銷售額達11億美元(4500萬套),掌機游戲銷售額達10億美元(4230萬套)。2004年一共大約有2.48億套游戲售出。據(jù)估計,美國每個家庭平均購買過2部游戲[3]。</p><p> 日本近20年來瘋狂賺電子游戲的錢。從上世紀60年代初的街機,到六七十年代之間的家用游戲機,再到八九十年代的掌上游戲機,日本經(jīng)過30多年的耕耘,終于把電子游戲這棵“搖錢樹”,培育成第一時尚娛樂產(chǎn)業(yè),壟斷全球業(yè)界長達
14、10余年。對于日本來說,電玩業(yè)已是國家經(jīng)濟的重要支柱之一,在GDP中占有1/5的舉足輕重地位。日本游戲業(yè)在最輝煌的1998年,曾經(jīng)占領全球電子游戲市場硬件90%以上,軟件50%以上。</p><p> 韓國號稱世界上網(wǎng)絡游戲產(chǎn)業(yè)最發(fā)達國家之一。迄今為止,國內(nèi)網(wǎng)絡游戲市場有超過60%的產(chǎn)品來自韓國游戲軟件開發(fā)商,韓國網(wǎng)絡游戲使國內(nèi)很多游戲運營公司在游戲營銷市場或股票資本市場上獲得了巨大的成功。 韓國游戲市場的發(fā)展
15、不是偶然,韓國政府不僅給游戲產(chǎn)業(yè)以正確的定位和引導,更是將其和本國經(jīng)濟發(fā)展緊密地聯(lián)系到一起,做了很多市場培育方面的工作。韓國政府認識到,靠重型工業(yè)來支撐全國經(jīng)濟的做法是片面的,于是將IT、娛樂產(chǎn)業(yè)視為新的經(jīng)濟增長點,開始大力扶持。從那時起,科技含量極高而能源消耗極低的游戲制作及相關產(chǎn)業(yè)擔負起了“富國興邦”的重擔。由文化觀光部出面組建韓國游戲支援中心,向韓國游戲產(chǎn)業(yè)提供從資金到技術上的多方面支援;成立游戲投資聯(lián)盟,政府每年向游戲產(chǎn)業(yè)投入的
16、資金多達500億韓元,并為游戲企業(yè)提供長期的低息貸款;設立信息化基金和文化產(chǎn)業(yè)基金,為游戲產(chǎn)業(yè)服務;對指定的風險企業(yè)實行各種稅制優(yōu)惠政策,減少甚至免除游戲企業(yè)的稅務負擔;建設游戲產(chǎn)業(yè)基地以扶持中小游戲企業(yè)的發(fā)展;對從事游戲產(chǎn)業(yè)的高科技人才免除兩年的兵役。 在韓國,從制作到運營,一個網(wǎng)絡游戲公司起步門檻較低,主要得益于政府實行的援助計劃。此外,在有</p><p> 1.2.2 電子游戲在國內(nèi)的發(fā)展現(xiàn)狀</
17、p><p> 與電子游戲發(fā)達的國家相比,我國在電子游戲方面還存在比較大的差距。目前,我國游戲市場正處于發(fā)展階段,但市場上的游戲軟件主要來自日本、美國、韓國等地,但由本土游戲制作人開發(fā)創(chuàng)作的游戲正在高速增加,國產(chǎn)原創(chuàng)的游戲即將成為游戲的主流。</p><p> 中國的游戲產(chǎn)業(yè)經(jīng)過80年代初期臺灣廠商的探索至90年代,開始了自己的研發(fā)、發(fā)行的歷程,直至網(wǎng)絡游戲的風行,讓中國的網(wǎng)絡游戲開始有了飛
18、速的發(fā)展。 1983年,智冠科技有限公司在中國臺灣成立,為全球第一家簽訂授權重制中文版產(chǎn)品代理銷售合約的公司,2000年智冠在臺灣股票上市, 2002年其控股的中華網(wǎng)龍在臺灣上市。</p><p> 1996年底,UBI SOFT上海分公司暨上海育碧電腦軟件有限公司成立。同年,全球游戲軟件領軍企業(yè)EA在中國上海成立辦事處。1997年,由尚洋公司制作的《血獅》正式上市。 1997年,北京新天地互動多媒體技術有限公
19、司成立,該公司引進了《古墓麗影III》(TombRaider III)、《盟軍敢死隊》等著名歐美游戲,并在1999年在中國率先掀起“游戲軟件價格革命”,全面推行50元的價格體系,從此正版游戲價格開始貼近大眾消費者。 1999年,業(yè)內(nèi)估算中國電腦游戲市場(正版)約1.5億元人民幣。 2000年,大陸華彩軟件代理發(fā)行第一款中文MMORPG《萬王之王》正式推出,該游戲于1999年在臺灣發(fā)行,由臺灣雷爵資訊(Lager)開發(fā)。也在2000年,繼
20、《萬王之王》、《石器時代》、《網(wǎng)絡三國》在臺灣上市之后,游戲桔子推出了《天堂》,游戲桔子成立于1995年,1999年以《便利店》在臺灣奠定了地位。《天堂》這款由韓國著名游戲公司Ncsoft研發(fā)的網(wǎng)絡游戲不但在本國大獲成功,也在臺灣再次奪冠。 2001年初,北京華義在中國大陸地區(qū)正式推出了《石器時代》,華義國際股份有限公司于1993年在臺北成立,</p><p> 2005年1月21日,中央電視臺報道:我國網(wǎng)絡游
21、戲產(chǎn)業(yè)當年增加了50%,今后幾年都將以50%以上的速度增長;第一屆中國網(wǎng)絡游戲年會報道:中國國內(nèi)網(wǎng)絡游戲2004年規(guī)模達24.7億元,2009年規(guī)模將達到109.6億元。</p><p><b> 2.可行性研究</b></p><p><b> 2.1 設計目的</b></p><p> 通過本游戲的設計,綜合自己
22、在校期間所學的理論知識,設計開發(fā)俄羅斯方塊游戲,使自己熟悉應用系統(tǒng)的開發(fā)過程,培養(yǎng)獨立思考能力,檢驗學習效果和動手能力,初步掌握軟件工程的系統(tǒng)理論,初步掌握MVC這種設計模式,進一步鞏固和加強自身對j2se基礎知識的理解,提高自己的編程水平,從而達到理論與實踐相結合的目的。</p><p> 2.2 軟件問題定義</p><p> 基本要求:本游戲開發(fā)的總體任務是實現(xiàn)游戲的可操作性,以
23、及界面的美觀性。整個開發(fā)過程遵循軟件工程規(guī)范,采用JAVA GUI編程來實現(xiàn)界面以及事件的控制,用戶根據(jù)鍵盤的四個方向鍵控制翻轉、向左、向右和向下操作,通過菜單欄中的相應菜單選項實現(xiàn)游戲的開始、結束、變換方塊、積分以及等級的功能。</p><p> 目標:通過本游戲的開發(fā),主要實現(xiàn)游戲的可操作性以及美觀性,同時使自己對JAVA語言的了解更進一層,為將來的實際工作打下堅實的基礎。</p><p
24、> 條件、假定和限制:由于知識以及能力的限制,本游戲所實現(xiàn)的功能不夠強大,可對本游戲進行改善,從而增強游戲的功能。</p><p> 可行性研究的方法:通過研究分析俄羅斯方塊所具備的能力及實現(xiàn)的方法、確定主體結構。利用現(xiàn)階段我所能達到的能力,以最簡潔、最容易的辦法,邊開發(fā)邊測試邊修改,實現(xiàn)一個初級游戲軟件。</p><p> 評價尺度:由于本軟件是一個初級產(chǎn)品,對其要求不是太苛
25、刻,所以能夠達到俄羅斯游戲的一般功能即可。</p><p><b> 2.3 可行性分析</b></p><p> 技術可行性:開發(fā)本游戲的編程語言有多種,考慮到自身對語言的掌握程度,選擇JAVA語言進行游戲的開發(fā),采用JAVA GUI編程來實現(xiàn)界面以及事件的控制。</p><p> 經(jīng)濟可行性:本游戲的開發(fā)旨在完成畢業(yè)設計,不注重直接的
26、經(jīng)濟效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經(jīng)濟要求也不高,只要有一臺能運行相應JAVA程序的電腦便可,所以不用考慮到經(jīng)濟問題。</p><p> 社會可行性:本游戲的開發(fā)主要為了完成畢業(yè)設計,開發(fā)的主體是個人,不存在法律上的侵權行為,也不會為社會造成影響,這方面是完全可行的。</p><p><b> 3.需求分析</b></p>
27、<p><b> 3.1 引言</b></p><p> 對軟件需求分析就是通過調(diào)查研究,建立系統(tǒng)的數(shù)據(jù)模型、功能模型、行為模型,用戶和開發(fā)人員在“系統(tǒng)必須做什么”這個問題上實現(xiàn)相互理解,達到共識,從而形成雙方認可的軟件產(chǎn)品的需求規(guī)格說明書。這樣有益于提高軟件開發(fā)過程中的能見度,便于對軟件開發(fā)過程中的控制與管理,便于采用工程方法開發(fā)軟件,提高軟件的質(zhì)量,便于開發(fā)人員、維護人
28、員、管理人員之間的交流、協(xié)作,并作為工作成果的原始依據(jù),并且在向潛在用戶傳遞軟件功能、性能需求,使其能夠判斷該軟件是否與自己的需求相關。</p><p><b> 3.2 游戲需求</b></p><p> 28種狀態(tài)的方塊隨機產(chǎn)生,自由下落,落下時可由玩家用上、下、左、右控制鍵控制翻轉和移動,以便以玩家所需要的形態(tài)和位置落下。如果落下時,方塊的方格能填滿某一行,
29、則這一行可消去。消去一行后,游戲可給玩家加分,若由存在空格的方塊填滿整個窗口,則游戲失敗。游戲功能需求如下:</p><p> 游戲界面需求:設計良好的游戲界面可以讓玩家充分感受到游戲帶來的娛樂性,游戲的背景色是黑色,方塊用藍色顏色,在一定的區(qū)域內(nèi)運動和變形,落下后的障礙物用黃色顯示,這樣看起來會有一定的美感。</p><p> 游戲形狀需求:用數(shù)組作為存儲方塊28種狀態(tài)的數(shù)據(jù)結構,即
30、長條形、Z字形、反Z形、田字形、7字形、反7形、T字型,各個方塊要能實現(xiàn)它的變形,可設為順時針或逆時針變形,一般為逆時針。</p><p> 鍵盤處理事件需求:方塊下落時,可通過鍵盤方向鍵(上、下、左、右鍵)對該方塊進行向上(變形),向下(加速)、向左、向右移動。</p><p> 鼠標處理事件需求:通過點擊菜單欄中相應的菜單項,可以實現(xiàn)游戲的開始、結束,方塊形狀的變換,分數(shù)、等級的顯
31、示,以及游戲幫助等功能。</p><p> 顯示需求:當不同的方塊填滿一行時可以消行,剩余方塊向下移動并統(tǒng)計分數(shù)。當達到一定分數(shù)的時候,會增加相應的等級。</p><p><b> 3.3 軟硬件需求</b></p><p> 操作系統(tǒng):Microsoft Windows XP Professional Service Pack 2<
32、;/p><p><b> 內(nèi)存:512M</b></p><p><b> 硬盤:80G</b></p><p><b> CPU:賽揚2.8</b></p><p> 交互工具:鍵盤/鼠標</p><p> 顯示器:VGA顯示器</p>
33、;<p> JDK版本:jdk1.6.0.02</p><p> Eclipse版本:eclipse-SDK-3.4-win32</p><p><b> 3.4 接口控制</b></p><p> 本游戲通過鍵盤進行操作,在Windows的操作系統(tǒng)下,利用鍵盤的上、下、左、右鍵對方塊進行移動變形,要使用鍵盤的接口事件。&
34、lt;/p><p><b> 3.5 方案論證</b></p><p> 學?,F(xiàn)已開設的課程有C語言、C++,java,自己本身自學了Java,通過網(wǎng)上以及圖書館的資料,知道可以通過C,C++,VB,Delphi,Java實現(xiàn)俄羅斯方塊游戲的設計。下面簡單介紹下VB、C++、Java各自的優(yōu)點:</p><p> 3.5.1 VB的優(yōu)點<
35、;/p><p> 全稱Visual Basic,它是以Basic語言作為其基本語言的一種可視化編程工具。在中國乃至全世界都能看到它的身影,它曾是在中國最為流行的編程工具,到現(xiàn)在還占 據(jù)著非常重要的地位,對于它的好壞大家都有一定的了解,VB作為一種較早出現(xiàn)的開發(fā)程序以其容易學習,開發(fā)效率較高,具有完善的幫助系統(tǒng)等優(yōu)點曾影響了好 幾代編程人員,但是由于VB不具備跨平臺這個特性,從而也決定了VB在未來的軟件開發(fā)中將會逐漸
36、地退出其歷史舞臺;它對組件技術的支持是基于COM和 ActiveX,對于組件技術不斷完善發(fā)展的今天,它也顯出了它的落后性;同時VB在進行系統(tǒng)底層開發(fā)的時候也是相對復雜的,調(diào)用API函數(shù)需聲明,調(diào)用 不方便,不能進行DDK編程,不可能深入Ring0編程,不能嵌套匯編;而且面向?qū)ο蟮奶匦圆?;網(wǎng)絡功能和數(shù)據(jù)庫功能也沒有非常突出的表現(xiàn),綜上所 述,VB作為一種可視化的開發(fā)工具由于其本身的局限性,導致了它在未來軟件開發(fā)中逐步被其他工具所代替。&l
37、t;/p><p> 3.5.2 C++的優(yōu)點</p><p> C++是對C語言的擴充,擴充的絕大部分來自著名語言中的最佳特性:從SIMULA 67中吸取了類,從ALGOL 68中吸取了運算符一名多用、引用和在分程序中任何地方說明變量,綜合了Ada的類屬和Clu的模塊特點,從BCPL中吸取異常處理,從BCPL中吸取了用//表示注釋。</p><p> C++保持了
38、C的緊湊、靈活、高效和易移植強的優(yōu)點,它對數(shù)據(jù)抽象的支持主要在于類概念和機制,對面向?qū)ο箫L范的支持主要通過虛擬函數(shù)。C++既有數(shù)據(jù)抽象和面向?qū)ο竽芰ΓZ言運行性能高多,加上C語言的普及,而從C至C++的過渡較為平滑,以及C++與C的兼容程度可使數(shù)據(jù)巨大的C程序能方便地在C++環(huán)境中重用。</p><p> 盡管C++當初的設計本意是幫助管理大型程序,但其用途并不僅限于此。C++的面向?qū)ο蟮奶匦钥捎行У赜糜趯嶋H的
39、程序設計工作。C++常常用于設計編輯器、數(shù)據(jù)庫、個人文件系統(tǒng)以及通訊程序等。而且,由于C++共享C的效率,所以用C++可以構成很多高性能的系統(tǒng)軟件。</p><p> 3.5.3 Java的優(yōu)點</p><p><b> (1) 安全性 </b></p><p> Java是一種安全的網(wǎng)絡編程語言,不支持指針類型,一切對內(nèi)存的訪問都必須通
40、過對象的實例來實現(xiàn)。這樣能夠防止他人使用欺騙手段訪問對象的私有成員,也能夠避免在指針操作中易產(chǎn)生的錯誤。</p><p> 此外,Java的安全性體現(xiàn)在多個層次上:在編譯層,有語法檢查;在解釋層,有字節(jié)碼校驗器,可進行代碼段格式測試和規(guī)則檢查、訪問權限和類型轉換合法性檢查、操作數(shù)堆棧的上溢和下溢檢測、代碼參數(shù)類型合法性檢查等;在平臺層上,通過配置策略,可設定訪問資源域,無須區(qū)分本地或遠程。</p>
41、<p> (2) 可移植性 </p><p> Java具備有很好的移植性,這主要得益于它與平臺無關的特性。同時,Java的類庫中也實現(xiàn)了與平臺無關的接口,這使得這些類庫也能移植。同時,Java編譯器主要是由Java本身來實現(xiàn)的,Java的運行系統(tǒng)(解釋器)由標準C語言實現(xiàn),因而整個Java系統(tǒng)都具有可移植性。 </p><p> (3) 多線程機制 </p&g
42、t;<p> Java具有多線程機制,這使得應用程序能夠并行地執(zhí)行。它的同步機制也保證了對共享數(shù)據(jù)的共享操作,而且線程具有優(yōu)先級的機制,有助于分別使用不同線程完成特定行為,也提高了交互的實時響應能力。Java的多線程技術使網(wǎng)上實時交互實現(xiàn)很容易,從而為解決網(wǎng)上大數(shù)量的客戶訪問提供了技術基礎。</p><p><b> (4) 跨平臺</b></p><
43、p> 通常,在Windows下編寫的程序是不能直接拿到UNIX上運行的,因為程序的執(zhí)行最終必須轉換成為計算機硬件的機器指令來執(zhí)行,專門為某種計算機硬件和操作系統(tǒng)編寫的程序是不能夠直接放到其他類型的計算機硬件上執(zhí)行的,至少要做移植工作。要想讓程序能夠在不同的計算機上運行,就要求程序設計語言能夠跨越各種軟件和硬件平臺,而Java恰恰滿足了這一需求。Java編譯器能夠產(chǎn)生一種與計算機體系結構無關的字節(jié)指令,只要安裝了Java虛擬機,J
44、ava就可以在相應的處理機上執(zhí)行。</p><p> 3.5.4 方案的選擇</p><p> 面向?qū)ο蟮某绦蛟O計吸取了結構化程序設計的先進思想,并把它們同幾個支持用戶用新方法進行程序設計的有力概念結合在一起。</p><p> 所有面向?qū)ο蟮某绦蛟O計語言一般都包含三個概念:封裝、多態(tài)性和繼承性。</p><p> 這種方法要求語言必
45、須具備抽象、封裝、繼承和多態(tài)性這幾個關鍵要素。</p><p> 面向?qū)ο蟮某绦蛟O計,是通過數(shù)據(jù)和代碼建立分塊的內(nèi)存區(qū)域,以便提供對程序進行模塊化的一種程序設計方法,這些模塊可以被用作樣板,在需要時再建立其副本。</p><p> C++和Java在面向?qū)ο筮@方面比VB要強,所以我排除了用VB做的可能性。但是C++為了與C語言兼容,其是包含了些面向過程的成分;Java除了C++中非面向
46、過程的部分,其程序編寫過程就是設計、實現(xiàn)類,定義其屬性、行為的過程。還有Java特有的“沙箱”機制是其安全性的保障,同時它去除了C++中易造成的錯誤指針,增加了自動內(nèi)存管理等措施,保證了Java程序運行的可靠性。</p><p> 所以經(jīng)過再三比較了三種語言后,決定采用Java語言編寫俄羅斯方塊。</p><p><b> 4. 概要設計</b></p&g
47、t;<p> 4.1 游戲設計方案的確定</p><p> 本游戲的設計采用MVC模式(Model -View -Controller),即把本游戲的輸入、處理、輸出流程按照Model、View、Controller的方式進行分離,這樣本游戲的設計被分成三個層—模型層、視圖層、控制層。MVC模型圖如下所示:</p><p> 4.2 系統(tǒng)流程結構設計</p>
48、<p> 4.3 各個功能模塊圖設計</p><p> 4.3.1 模型層(Model)功能模塊圖設計</p><p> 4.3.2 視圖層(View)功能模塊圖設計</p><p> 4.3.3 控制層(Controller)功能模塊圖設計</p><p><b> 5. 詳細設計</b><
49、;/p><p> 5.1模型層(Model)設計</p><p> 5.1.1 圖形的產(chǎn)生</p><p> 通過圖形工廠類ShapeFactory的getShape(ShapeListener listener)方法隨機產(chǎn)生方塊的某種狀態(tài),這里運用了工廠設計模式,這種設計模式是為了實現(xiàn)高內(nèi)聚低耦合而存在的,這種設計模式的通俗解釋就是:你想要一個產(chǎn)品,你需要讓工廠
50、給你生產(chǎn)一個,你要告訴工廠你要生產(chǎn)什么產(chǎn)品,就把你需要生產(chǎn)的這個產(chǎn)品當做參數(shù)傳給工廠類的生產(chǎn)產(chǎn)品的方法,然后根據(jù)你傳進來的產(chǎn)品,而決定工廠人生產(chǎn)什么產(chǎn)品,產(chǎn)生出來產(chǎn)品后,最后要返回您要的這個東西。</p><p> 5.1.2 圖形的數(shù)據(jù)結構</p><p> 定義一個4x4方陣,共16個小格。用“0”和“1”來表示每個方格是繪制還是空白,由此可以組合出多種圖形,如圖所示:</p
51、><p> 其中圖一表示為{0,0,0,0, 1,1,1,1 , 0,0,0,0, 0,0,0,0}</p><p> 其中圖二表示為{0,0,0,0, 0,1,1,0 , 0,1,1,0, 0,0,0,0}</p><p> 其中圖三表示為{0,0,0,0, 0,1,0,0 , 0,1,1,1, 0,0,0,0}</p><p> 其中
52、圖四表示為{0,0,0,0, 0,1,0,1 , 0,1,1,0, 0,0,1,0}</p><p> 方塊的旋轉是通過繪制4個方向的方塊,在不同旋轉角度顯示不同方向的方塊來完成的。所以程序要控制方塊的旋轉方向,只要控制顯示哪副圖就可以了。</p><p> 本游戲是用一個三維數(shù)組int[][][] shapes = new int[][][];作為存儲方塊的數(shù)據(jù)結構來保存方塊的28種
53、狀態(tài)的。</p><p> 5.1.3 圖形的移動</p><p> 圖形類Shape保存了自己的位置信息,用left表示圖形到左邊界的距離,top表示圖形到上邊界的距離,圖形移動就是改變left和top的值。向上移動:top減1,向下移動:top加1,向左移動:left減1,向右移動:left加1。</p><p> 圖形的移動分為圖形的自動下落以及通過按鍵
54、事件實現(xiàn)圖形的左移、右移以及加速下移。通過多線程ShapeDriver類來實現(xiàn)圖形的自動下移,由于游戲中方塊的動態(tài)性,每個方塊有一定的生命周期,所以選用線程來實現(xiàn)方塊。一個方塊用一個線程類對象實現(xiàn),該類繼承與Thread類,當一個方塊出現(xiàn)時也就表示一個線程對象產(chǎn)生并開始運行。通過對按鍵事件的響應,實現(xiàn)圖形的左移、右移以及加速下移。</p><p> 5.1.4 圖形的變形</p><p>
55、; 通過int type = new Random().nextInt(shapes.length); shape.setBody(shapes[type]);</p><p> shape.setStatus(0);實現(xiàn)初始圖形的初始化,通過status = (status + 1) % body.length;實現(xiàn)圖形的變形功能。</p><p> 5.1.5 存儲和表示障礙物
56、</p><p> 用一個和顯示區(qū)域的面板大小相對應的二維數(shù)組保存障礙物的位置信息,如果對應的位置是障礙物,則這個數(shù)組中相應的元素就為1,否則就為0。如何把圖形變成障礙物呢?只要把屬于圖形的格子對應的位置都變成障礙物即可。代碼如下:</p><p> public boolean isMember(int x, int y, boolean rotate) {</p>&
57、lt;p> int tempStatus = status;</p><p> if(rotate) {</p><p> tempStatus = (status + 1) % body.length;</p><p><b> }</b></p><p> return body[tempStatus
58、][y*4 + x] == 1;</p><p><b> }</b></p><p> public void accept(Shape shape) {</p><p> System.out.println("Ground's accept");</p><p> for(int
59、 x=0; x<4; x++) {</p><p> for(int y=0; y<4; y++) {</p><p> if(shape.isMember(x, y, false)) {</p><p> if((shape.getLeft() + x)<Global.WIDTH && (shape.getTop() + y
60、)<Global.HEIGHT)</p><p> zaw[shape.getLeft() + x][shape.getTop() + y] = 1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
61、</p><p><b> }</b></p><p> 5.1.6 判斷滿行及消行</p><p> 如果某一行沒有空白,則這一行就是滿行。滿的那行上面所有的行整體下移一行就是消除這個滿行。代碼如下:</p><p> private void deleteFullLine() {</p><
62、;p> for(int y=Global.HEIGHT-1; y>=0; y--) {</p><p> boolean full = true;</p><p> for(int x=0; x<Global.WIDTH; x++) {</p><p> if(zaw[x][y] == 0) {</p><p>
63、full = false;</p><p><b> }</b></p><p><b> }</b></p><p> if(full) {</p><p> deleteLine(y);</p><p><b> }</b></p&g
64、t;<p><b> }</b></p><p><b> }</b></p><p> private void deleteLine(int lineNum) {</p><p> for(int y=lineNum; y>0; y--) {</p><p> fo
65、r(int x=0; x<Global.WIDTH; x++) {</p><p> zaw[x][y] = zaw[x][y-1];</p><p><b> }</b></p><p><b> }</b></p><p> for(int x=0; x<Global.WID
66、TH; x++) {</p><p> zaw[x][0] = 0;</p><p><b> }</b></p><p> deleteFullLine();</p><p><b> }</b></p><p> 利用循環(huán)語句從屏幕最底行依次向上對有方塊的每一行
67、進行判斷,判斷某一行中是否有空白,如果沒有空白的話,則將當前的行號傳遞給deleteLine(int lineNum)方法,由該方法實現(xiàn)消除當前行,并將上面的方塊依次下移一行,最后再重新調(diào)用deleteFullLine()方法進行查找,直到所有行都檢查一遍結束。</p><p> 5.2視圖層(View)設計</p><p> 5.2.1 方塊的顯示</p><p&
68、gt; 通過視圖層的GamePanel類的paint(Graphics g)方法調(diào)用Shape類的drawMe(Graphics g)方法,從而實現(xiàn)方塊的繪制,代碼如下:</p><p> public void drawMe(Graphics g) {</p><p> g.setColor(Color.BLUE);</p><p> for(int x=
69、0; x<4; x++) {</p><p> for(int y=0; y<4; y++)</p><p> if(getFlagByPoint(x, y)) {</p><p> g.setColor(new Shape().shapeColor);</p><p> g.fill3DRect((left + x)*G
70、lobal.CELL_SIZE, </p><p> (top + y)*Global.CELL_SIZE, </p><p> Global.CELL_SIZE, </p><p> Global.CELL_SIZE,</p><p><b> true);</b></p><p>&l
71、t;b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 5.2.2 障礙物的顯示</p><p> 通過視圖層的GamePanel類的paint(Graphics g)方法調(diào)用Ground的drawMe(Grap
72、hics g) 方法,從而實現(xiàn)障礙物的繪制,代碼如下:</p><p> public void drawMe(Graphics g) {</p><p> for(int x=0; x<Global.WIDTH; x++) {</p><p> for(int y=0; y<Global.HEIGHT; y++) {</p><
73、;p> if(zaw[x][y] == 1) {</p><p> g.fill3DRect(x*Global.CELL_SIZE,</p><p> y*Global.CELL_SIZE, </p><p> Global.CELL_SIZE, </p><p> Global.CELL_SIZE,</p>&
74、lt;p><b> true);</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&
75、lt;p> 5.3 控制層(Controller)設計</p><p> 控制層主要是實現(xiàn)圖形工廠生產(chǎn)圖形,圖形按鍵事件的處理,方塊、障礙物顯示的控制,圖形自動下落和障礙物生成的控制。通過控制層這個大管家最終實現(xiàn)此俄羅斯方塊的按鍵事件的處理以及各種邏輯的處理。</p><p><b> 5.4 游戲演示</b></p><p>
76、5.4.1 游戲界面顯示</p><p> 5.4.2 開始和結束控制菜單</p><p> 5.4.3 分數(shù)和等級查看菜單</p><p> 5.4.4 變換方塊菜單</p><p> 5.4.5 幫助菜單</p><p><b> 5.系統(tǒng)測試</b></p><
77、;p> 5.1 游戲界面菜單選項的功能測試</p><p> (1) “控制”菜單測試</p><p> ?、冱c擊“游戲”“開始”</p><p><b> 輸出:游戲開始</b></p><p><b> 結果:正常</b></p><p> ?、邳c擊“游戲”
78、“結束”</p><p> 輸出:彈出游戲結束提示框</p><p><b> 結果:正常</b></p><p> (2) “查看”菜單測試</p><p> ①點擊“查看”“分數(shù)”</p><p> 輸出:在游戲面板中間跳出分數(shù)顯示框</p><p><
79、b> 結果:正常</b></p><p> ②點擊“查看”“級別”</p><p> 輸出:在游戲面板中間跳出級別顯示框</p><p><b> 結果:正常</b></p><p> (3) “變換”菜單測試</p><p> ?、冱c擊“變換”“改變方塊”</p
80、><p> 輸出:在游戲面板中顯示隨機產(chǎn)生的某種方塊</p><p><b> 結果:正常</b></p><p> 5.2 按鍵事件的功能測試</p><p> (1) 方塊移動測試</p><p> 游戲過程中,點擊“左、右、下”方向鍵</p><p> 輸出:
81、方塊正常移動,不會移出邊界</p><p><b> 結果:正常</b></p><p> (2) 方塊反轉測試</p><p> 游戲過程中,點擊向上方向鍵</p><p> 輸出:方塊無邊界和障礙物阻擋的情況下可反轉</p><p><b> 結果:正常</b>
82、</p><p> 5.3方塊堆砌與消行測試</p><p> (1) 當方塊下落到最底面或與障礙物接觸時</p><p> 輸出:方塊成功堆砌在底部</p><p><b> 結果:正常</b></p><p> (2) 當出現(xiàn)滿行現(xiàn)象時</p><p> 輸
83、出:所有滿行被消除,方塊依次下移</p><p><b> 結果:正常</b></p><p> 5.4 測試結果分析</p><p> 經(jīng)過測試,本游戲?qū)崿F(xiàn)了基本的功能,不過整體功能還不是很強大,作為開發(fā)的第一個版本,游戲在很多方面還需要進一步完善。</p><p><b> 結 論</b&g
84、t;</p><p> 游戲設計與實踐是一項復雜而且龐大的工作,在選題之后,我才意識到過程的艱難,因為以前從來沒有接觸過游戲設計,剛開始時有點迷茫和彷徨。后來通過看書和在網(wǎng)上查找資料,逐漸找到了一些感覺,也依照資料自己動手編寫了幾個簡單經(jīng)典的游戲。本文僅以俄羅斯方塊為例予以說明。</p><p> 本次設計讓我初步懂得了電子游戲所涉及到的有關技術、方法,包括電子游戲分類、選題、構思等。
85、并實現(xiàn)幾個可演示的游戲軟件,其中有很多應用了學習的相關技術,并且做到了圖、文、聲并茂,能實際演示。此次設計過程中印象最深的收獲有:1、學到了很多新知識,并且對老知識進行了回顧。經(jīng)過長時間的學習,更進一步熟悉了Java語言。2、通過不斷上機實驗,調(diào)試程序,總結經(jīng)驗,從對課題的不理解到能夠開始動手去做,提出問題并自己想辦法解決問題,自己多實踐,所以增強了動手能力。3、提高了中、英文資料的檢索能力。這次畢業(yè)設計過程中我查閱了很多資料,不但有圖
86、書館的期刊、雜志、館藏圖書,還有網(wǎng)絡中的電子文檔、電子書籍、網(wǎng)頁及下載的視頻教學課程;不但有中文資料還有英文資料。這些資料,使我的眼界更開闊,對課題的認識更加深刻,編寫程序的時候思路更加清楚,少走了很多彎路。</p><p> 但如果真的要從事游戲設計的工作,需要走的路還很長,即便是對于國際知名的大公司,也是在不斷的探索和實踐中前進。但這并不表明前途就是渺茫的,通過這次實踐,進行了一次從底而上和自上而下的歸納和
87、演繹的過程,在變化多端的游戲面前,總算領悟了一點它的奧妙。內(nèi)容繁復、采用的表現(xiàn)手段多姿多彩的游戲世界,即便是再復雜,也可以通過一定程度的歸納演繹得出適應其規(guī)則和表現(xiàn)的契合點。</p><p> 回顧這個設計過程,我學到了許多書本上沒有學到的知識。通過這次自己制作的軟件,豐富了自己的實踐技能,擴展了本專業(yè)的知識面,使我受益非淺,同時也體驗到了搞軟件開發(fā)的困難度。在這次設計的同時,我又從中學到了許多東西。但由于我對
88、這樣的軟件開發(fā)還只是一個開始,了解的不多,這其中或許還有很多的不足,有些模塊做得不是很好,有些功能還不能夠完全的實現(xiàn),如不能把要裝載的方塊提前顯示出來。因此做得不是很好,界面的設計及整體的布局還比較簡單,沒有突出特色出來,這也可能是我這個系統(tǒng)的不足之處。</p><p><b> 致 謝</b></p><p> 經(jīng)過一個多月的不斷努力,畢業(yè)設計內(nèi)容已經(jīng)基本上完
89、成了。</p><p> 首先,在這里我要由衷地感謝我的指導老師xx教授。他在畢業(yè)設計期間對本人給予了悉心指導和大力幫助。在畢業(yè)設計期間,在我的課題設計和論文撰寫過程中對我進行了認真檢查,嚴格督促和仔細批閱,并對我的課題提出了許多富有啟發(fā)性和建設性的意見和建議。</p><p> 同時我也要非常感謝班上的同學,一直以來都是他們在身邊督促我,我們互相鼓勵共同進步。</p>
90、<p> 另外,我還要感謝我的室友和身邊的好友,他們一直都在身邊支持我,在程序設計和論文撰寫的艱難過程中,他們帶給我歡樂,帶給我信心,并給予了我很大的鼓勵與幫助。</p><p> 最后,在這里還要對我的家人和遠方的朋友表示深深的感謝,他們在精神和物質(zhì)上都給了我莫大的支持,沒有他們的關懷和愛護,我想我就無法順利地完成這次畢業(yè)設計。</p><p><b> 參 考
91、 文 獻</b></p><p> [1] 羅偉堅著.Visual C++經(jīng)典游戲程序設計[M].北京:人民郵電出版社,2006.2</p><p> [2] 朱福喜著. Java程序設計技巧與開發(fā)實例[M].北京:人民郵電出版社,2004.2</p><p> [3] 趙東躍著.俄羅斯方塊編程[M].電腦編程技巧與維護,1998年第六期</
92、p><p> [4] 陸惠恩著. 實用軟件工程[M].北京:清華大學出版社,2006.5</p><p> [5] 黃復賢著.俄羅斯方塊游戲的敏捷設計與開發(fā)[M]. 電腦編程技巧與維護,2005.4</p><p> [6] (美)Bruce Eckel著,陳昊天 譯.Java編程思想[M].北京:機械工業(yè)出版社,2007.6</p><p&g
93、t; [7] 高凌琴,陳青華 著. 俄羅斯方塊游戲關鍵技術探討[M].信息技術與信息化研究探討,2008年第二期.</p><p> [8] 王宇,戰(zhàn)學剛,高國偉著. 計算機算法解決俄羅斯方塊中的數(shù)學與計算問題[M].計算機應用與軟件,第二十四卷第三期,2007.3 .</p><p> [9]朱福喜,黃昊著. Java項目開發(fā)與畢業(yè)設計指導[M].北京:清華大學出版社,2008.6
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java俄羅斯方塊畢業(yè)論文
- 畢業(yè)論文----java俄羅斯方塊
- 俄羅斯方塊游戲java畢業(yè)論文
- 畢業(yè)論文(java游戲俄羅斯方塊)
- 俄羅斯方塊畢業(yè)論文
- 俄羅斯方塊游戲畢業(yè)論文
- 俄羅斯方塊游戲開發(fā)畢業(yè)論文
- 畢業(yè)設計---俄羅斯方塊游戲java
- 畢業(yè)設計 java實現(xiàn)俄羅斯方塊
- 基于java的俄羅斯方塊
- 俄羅斯方塊的java實現(xiàn)
- 俄羅斯方塊論文
- 畢業(yè)論文俄羅斯方塊的實現(xiàn)系統(tǒng)
- java俄羅斯方塊課程設計
- java課程實踐報告--俄羅斯方塊
- 俄羅斯方塊
- 基于java的俄羅斯方塊游戲開發(fā)
- java課程設計--俄羅斯方塊游戲
- java課程設計---俄羅斯方塊游戲
- java課程設計報告-俄羅斯方塊
評論
0/150
提交評論