基于Java的飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于Java的飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于Java的飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于Java的飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于Java的飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

山西工商學(xué)院2019屆本科生畢業(yè)設(shè)計(jì)緒論1.1研究背景在九十年代計(jì)算機(jī)應(yīng)用還不是很發(fā)達(dá)的時(shí)候,伴隨著我們長大的是一些經(jīng)典的街機(jī)游戲,它們最開始存在于我們小時(shí)候在街上玩的臺(tái)式機(jī),用搖桿,四個(gè)到六個(gè)鍵,鍵盤布局和現(xiàn)在的ps手柄很象的,飛機(jī)大戰(zhàn)是電腦游戲發(fā)展史中早期最為經(jīng)典的游戲之一,經(jīng)常能在掌上游戲機(jī)、手機(jī)以及電腦上見到這個(gè)游戲。不過,以往常見的飛機(jī)大戰(zhàn)游戲是二維平面上的,并且大多以黑白的形式出現(xiàn),當(dāng)然在電腦上可以看到多種顏色的飛機(jī)大戰(zhàn)。這些游戲的回憶也伴著我們長大,是一代人不可磨滅的記憶。為了重拾我們的童年經(jīng)典,也為了將大學(xué)學(xué)習(xí)的計(jì)算機(jī)知識(shí)進(jìn)行一個(gè)系統(tǒng)的梳理,本次就以“飛機(jī)大戰(zhàn)游戲”為課題題目,通過Java語言對(duì)這款游戲進(jìn)行設(shè)計(jì)與開發(fā)。1.2研究意義基于Java語言開發(fā)“飛機(jī)大戰(zhàn)游戲”,是對(duì)大學(xué)知識(shí)的一次運(yùn)用,本次的項(xiàng)目不但可以重推的回憶,也同樣是對(duì)大學(xué)知識(shí)的一次回顧與復(fù)習(xí)。Java是計(jì)算機(jī)編程人員都十分熟悉的語言,相對(duì)于像C語言這樣的底層語言,它較為簡單,面向?qū)ο螅琂ava里沒有指針操作,這是它安全性的一個(gè)重要處理手段。在pc上,Java做大型游戲并不合適,主要是因?yàn)镴ava離底層較遠(yuǎn),對(duì)圖形的處理不如c++方便,同時(shí)效率也是一個(gè)極大的問題,而且Java本身并沒有很多好的圖形類庫。因此,Java語言在類似飛機(jī)大戰(zhàn)等小游戲開發(fā)的領(lǐng)域前景非常廣闊。1.3研究內(nèi)容基于Java的游戲設(shè)計(jì)開發(fā)的相關(guān)技術(shù)及Eclipse開發(fā)平臺(tái)主要從游戲難點(diǎn)、開發(fā)可行性以及游戲規(guī)則和功能模塊進(jìn)行分析,然后進(jìn)行總的系統(tǒng)設(shè)計(jì),設(shè)計(jì)完成之后需實(shí)現(xiàn)游戲難度的調(diào)整、友機(jī)飛行的控制、敵機(jī)出現(xiàn)方式和速度的控制、游戲狀態(tài)的控制功能游戲的狀態(tài)控制、玩家游戲控制功能、戰(zhàn)機(jī)和背景的美化、動(dòng)畫的實(shí)現(xiàn)、多線程技術(shù)的實(shí)現(xiàn)、碰撞問題的解決、敵機(jī)血條的顯示、難易程度的調(diào)整、積分的生成和排行榜排序。最后通過反復(fù)的測(cè)試完成飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)。2相關(guān)技術(shù)及開發(fā)平臺(tái)2.1Java語言Java語言是一門在計(jì)算機(jī)開發(fā)中十分常見的一種計(jì)算機(jī)語言,Java被稱為最穩(wěn)定的語言,并且運(yùn)用領(lǐng)域廣泛。現(xiàn)在的軟件業(yè)和多媒體發(fā)展迅速,還有網(wǎng)站、系統(tǒng)的設(shè)計(jì)開發(fā)都是使用Java語言,因?yàn)樗闶悄壳白詈玫目缙脚_(tái)語言,在數(shù)據(jù)中心、移動(dòng)電話等方面的開發(fā)都很常見。此外,Java語言能夠在眾多編程語言中脫穎而出,一個(gè)很重要的原因就是因?yàn)镴ava語言本身的安全性高。就拿銀行系統(tǒng)舉例,我們都知道銀行是一個(gè)十分需要安全性保障的單位,在過去銀行系統(tǒng)過去多用UNIX,這種系統(tǒng)相較于PC端常用的windows系統(tǒng)來說系統(tǒng)漏洞更少,安全性更高。但是開發(fā)UNIX的程序員較少,開發(fā)成本較大,因此后來基本都是使用Java語言編寫系統(tǒng)。不僅因?yàn)镴ava語言是跨平臺(tái)語言,可以在UNIX下使用,而且從自身的安全性來說,Java/jspJava語言的安全性是最好的,安全漏洞最少。2.2Eclipse開發(fā)平臺(tái)Eclipse是一個(gè)開源的開發(fā)平臺(tái),并不是專門為Java編程語言開發(fā)的集成開發(fā)環(huán)境,我們?nèi)ス倬W(wǎng)上去下載安裝包的時(shí)候,可以發(fā)現(xiàn)除了為Java編程語言,也可以作為其他的編程語言的集成開發(fā)環(huán)境,比如C++,PHP等,只要是我們想到的編程語言,基本上都可以使用Eclipse做開發(fā)。通過Eclipse開發(fā)工具,可以極大地提升我們的開發(fā)效率。2.3AdobePhotoshopPhotoshop是世界頂尖級(jí)的圖像設(shè)計(jì)與制作工具軟件。圖像處理是對(duì)已有的位圖圖像進(jìn)行編輯加工處理以及運(yùn)用一些特殊效果,其重點(diǎn)在于對(duì)圖像的處理加工。在表現(xiàn)圖像中的陰影和色彩的細(xì)微變化方面或者進(jìn)行一些特殊效果處理時(shí),使用位圖形式是最佳的選擇,它在這方面的優(yōu)點(diǎn)是矢量圖無法比擬的。

3系統(tǒng)分析3.1用戶需求分析從游戲的基本玩法出發(fā),主要就是玩家和敵機(jī)的對(duì)決,首先應(yīng)該有個(gè)界面來裝載整個(gè)游戲,其次是玩家的移動(dòng)方式(鼠標(biāo)移動(dòng)),接下來是玩家子彈的生成,然后是敵機(jī)的出現(xiàn)方式,最后是玩家與敵機(jī)的對(duì)戰(zhàn)結(jié)果。在游戲中,玩家控制的飛機(jī)將出現(xiàn)在屏幕的下方,改機(jī)則出現(xiàn)在屏幕的上方。雙方以互相攻擊的方式,以及上下左右移動(dòng)躲避對(duì)方的攻擊。玩家實(shí)際需要控制自己的飛機(jī)盡量多的打中敵機(jī)和避免改機(jī)的子彈打中自己的飛機(jī)。3.2功能模塊分析3.2.1游戲狀態(tài)控制功能分析游戲控制功能,要求玩家能夠根據(jù)自己的需要實(shí)時(shí)控制游戲的狀態(tài),如玩家點(diǎn)擊“開始游戲”按鈕,游戲就能夠進(jìn)入主界面,正常執(zhí)行;如玩家需要暫停游戲,只需要將鼠標(biāo)移出/移入界面就能夠暫停/恢復(fù)游戲進(jìn)度;如玩家不要玩游戲了,也只需要按關(guān)閉窗口的功能鍵退出游戲或者碰撞敵機(jī)結(jié)束游戲。3.2.2游戲難度調(diào)整功能分析游戲難度可調(diào)功能,根據(jù)飛機(jī)大戰(zhàn)游戲玩家的實(shí)際水平,玩家可以自由選擇游戲難度,系統(tǒng)也將根據(jù)玩家選擇的游戲難度對(duì)游戲中的敵機(jī)數(shù)量、速度以及子彈數(shù)進(jìn)行初始化,顯然難度等級(jí)越高,這些數(shù)量也就會(huì)相應(yīng)增多。3.2.3游戲界面繪畫功能分析游戲界面繪畫功能包括兩個(gè)部分,首先是整個(gè)游戲的背景界面,我們知道整個(gè)基于Java的飛機(jī)大戰(zhàn)游戲的背景是發(fā)生在浩瀚的宇宙中,因此我們?cè)谠O(shè)計(jì)系統(tǒng)的時(shí)候需要把整個(gè)的游戲背景設(shè)置成宇宙的圖像;另一個(gè)就是在游戲中的信息顯示功能,能在游戲主界面繪制相關(guān)參數(shù)信息,如敵機(jī)生命、玩家得分、關(guān)卡等信息,并且可以提示玩家操縱飛機(jī)的所剩下的血條值。3.2.4玩家游戲控制功能分析玩家飛機(jī)射速恒定,不會(huì)隨著玩家游戲難度等級(jí)而改變,也就是說明在飛機(jī)大戰(zhàn)游戲過程中,玩家不需要操縱飛機(jī)的射速,只需要控制鼠標(biāo)左右上下地移動(dòng)飛機(jī),發(fā)射子彈即可。3.3游戲規(guī)則分析這款游戲名字叫“飛機(jī)大戰(zhàn)”。整個(gè)游戲的背景是發(fā)生在浩瀚的宇宙中,那里有許多未知的世界。但宇宙也布滿著許多的危險(xiǎn),現(xiàn)在由我們駕駛飛機(jī)去參加太空冒險(xiǎn)。這款游戲名為飛機(jī)大戰(zhàn)的游戲中,玩家負(fù)責(zé)操縱一架飛機(jī),飛機(jī)在宇宙中飛行,而在這片浩瀚的宇宙不僅僅只有我們的飛機(jī),還有敵方的戰(zhàn)機(jī),它們會(huì)向我們發(fā)射子彈。而我們作為玩家所要做的事情有兩件:第一,玩家要盡可能地躲過來自敵方飛機(jī)所發(fā)射的子彈,如果玩家操縱的飛機(jī)中彈,那么象征玩家生命的血量值將會(huì)降低,如果血量值降低到0,那么玩家失敗;第二,玩家使用子彈擊中隨機(jī)刷出的獎(jiǎng)勵(lì)會(huì)增加子彈,是自身更容易的生存;第三,玩家要盡可能地躲避敵方飛機(jī)在飛機(jī)大戰(zhàn)游戲中,玩家所操縱的飛機(jī)同樣可以發(fā)射子彈,如果子彈命中敵方的飛機(jī)的時(shí)候,就可以直接觸發(fā)敵方飛機(jī)爆炸效果,擊退敵機(jī),增加玩家分?jǐn)?shù)。如果玩家擊毀所有的敵機(jī),那么則會(huì)出現(xiàn)游戲Boss,擊敗后可以順利通關(guān)進(jìn)入更高難度??偟膩碚f,這是一款易懂的小游戲,玩家只需要通過鼠標(biāo)控制飛機(jī)的移動(dòng)方向即可,飛機(jī)會(huì)自動(dòng)發(fā)射子彈,玩家可以順利上手。獎(jiǎng)勵(lì)、敵機(jī)和游戲Boss的出現(xiàn)均為隨機(jī)的,獎(jiǎng)勵(lì)、敵機(jī)與Boss炸彈均具有一定的速度,且隨著關(guān)卡難度的增大,數(shù)量和速度均隨著關(guān)卡數(shù)增加而增加對(duì)于隨機(jī)產(chǎn)生的敵機(jī)和獎(jiǎng)勵(lì),若超過矩形區(qū)域,則釋放該對(duì)象添加碰撞效果,包括戰(zhàn)機(jī)子彈打中敵機(jī)爆炸、戰(zhàn)機(jī)與敵機(jī)相撞爆炸、戰(zhàn)機(jī)子彈與敵機(jī)炸彈相撞爆炸、戰(zhàn)機(jī)子彈打中Boss、戰(zhàn)機(jī)與Boss碰撞以及戰(zhàn)機(jī)打到獎(jiǎng)勵(lì)六種碰撞效果。且碰撞發(fā)生后子彈、敵機(jī)、獎(jiǎng)勵(lì)均消失,戰(zhàn)機(jī)生命值減一,敵機(jī)和Boss生命值減少當(dāng)前戰(zhàn)機(jī)炮彈威力的生命值,若敵機(jī)或Boss生命值歸零,則刪除敵機(jī)或Boss。每關(guān)中戰(zhàn)機(jī)有三條命,每條命10點(diǎn)生命值,生命使用完后,會(huì)進(jìn)入GameOver界面顯示得分?jǐn)?shù),并提供重新開始游戲和退出功能。3.4游戲難點(diǎn)分析3.4.1背景圖的循環(huán)分析先創(chuàng)建背景圖的類,然后用canvas.drawBitmap方法把圖片繪制出來,然后把你圖片的初始位置定義一下,要想使圖片動(dòng)起來,肯定要改變它的Y軸坐標(biāo),這時(shí)候只需要讓它的y軸一直減減就好了,這時(shí)候你就會(huì)發(fā)現(xiàn)兩張圖動(dòng)完之后就會(huì)白屏,所以我們最后只要用個(gè)if語句判斷一下就好了。然后再主程序中把你所需要用到的背景圖調(diào)用一下。3.4.2游戲飛機(jī)的繪圖分析先創(chuàng)建一個(gè)飛機(jī)類,然后開始繪制圖片,在主程序里調(diào)用所需要的圖片,最夠?qū)崿F(xiàn)圖片的繪制;在繪制我方戰(zhàn)機(jī)的時(shí)候需要實(shí)現(xiàn)飛機(jī)的拖動(dòng),這時(shí)候需要在主程序里設(shè)置觸摸,可聚焦,還有屏幕的常亮,屏幕常亮的實(shí)現(xiàn)需要添加時(shí)間監(jiān)聽。在實(shí)現(xiàn)飛機(jī)拖動(dòng)時(shí),需要在我方飛機(jī)中添加一個(gè)觸摸的類,只要讓實(shí)時(shí)屏幕監(jiān)控你觸摸的,xy交點(diǎn),但是這時(shí)候會(huì)有一個(gè)BUG就是你點(diǎn)哪地方飛機(jī)就會(huì)從另一個(gè)地方閃到另一個(gè)地方,所以要用到if判斷語句判斷飛機(jī)的位置只可以可以拖動(dòng)。3.4.3子彈的繪制分析先創(chuàng)建一個(gè)子彈類,然后繪制飛機(jī)一樣把子彈先貼上去,然后要實(shí)現(xiàn)子彈的發(fā)射這時(shí)候用y減,要實(shí)現(xiàn)子彈的循環(huán)我們要不停的往里面添加子彈;這個(gè)要在主程序里寫,但是子彈發(fā)射出去會(huì)繼續(xù)往前走不會(huì)消失,占用大量內(nèi)存,所以我們要?jiǎng)h除已經(jīng)出界的子彈。3.4.4多線程技術(shù)的實(shí)現(xiàn)分析多線程是為了同步完成多項(xiàng)任務(wù),不是為了提高運(yùn)行效率,而是為了提高資源使用效率來提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候?qū)崿F(xiàn)的。線程機(jī)制的運(yùn)用是實(shí)現(xiàn)游戲控制的基礎(chǔ),游戲中的后臺(tái)資源的加載、刷幀以及對(duì)各類角色(如敵機(jī),獎(jiǎng)勵(lì))的自動(dòng)控制都需要多線程來實(shí)現(xiàn)對(duì)整個(gè)游戲的控制。3.4.5碰撞問題的解決分析本基于Java的飛機(jī)大戰(zhàn)游戲中,還有一個(gè)非常關(guān)鍵的技術(shù)有待解決,那就是系統(tǒng)如何判斷游戲過程中是否產(chǎn)生碰撞。我們可以知道這里的碰撞包括兩方面:第一就是玩家所操縱的飛機(jī)發(fā)射子彈,如果子彈碰撞到敵方的飛機(jī)的時(shí)候,就可以直接觸發(fā)敵方飛機(jī)爆炸效果,擊退敵機(jī);第二就是敵方的飛機(jī),如果敵機(jī)碰撞到玩家的飛機(jī)的時(shí)候,也可以降低玩家飛機(jī)的血量。而對(duì)于判斷碰撞的問題上,目前也有很多解決方法,可以用矩形,或者圓形作判斷。本次采用矩形碰撞。3.5可行性分析3.5.1技術(shù)可行性首先我們開發(fā)這個(gè)系統(tǒng)所選用的開發(fā)語言是Java語言,它本身是一個(gè)靈活方便的語言,并且從我自身出發(fā),我在之前已經(jīng)學(xué)習(xí)過Java的編程開發(fā),設(shè)計(jì)實(shí)現(xiàn)過一些簡單的小程序,本身具有一定的基礎(chǔ),因此在開發(fā)本次系統(tǒng)基于Java的飛機(jī)大戰(zhàn)游戲的時(shí)候更加駕輕就熟。以上介紹了我們從軟件角度設(shè)計(jì)開發(fā)飛機(jī)大戰(zhàn)游戲的可行性,另外,一個(gè)軟件的開發(fā)不僅僅只看它的軟件需求,硬件方面的需要也十分重要。飛機(jī)大戰(zhàn)游戲是一款簡單的小游戲,這也就說明了它不需要配置很好的電腦也可以流暢運(yùn)行。并且隨著信息技術(shù)的不斷進(jìn)化,電腦的內(nèi)存越來越大,CPU處理功能也更加強(qiáng)大,我們?nèi)粘F胀ǖ腜C機(jī)完全可以無壓力地跑飛機(jī)大戰(zhàn)游戲程序,硬件平臺(tái)完全能夠支持飛機(jī)大戰(zhàn)游戲程序的需要。由以上分析可知,本軟件的開發(fā)在技術(shù)上是可行的。3.5.2經(jīng)濟(jì)可行性選擇開源的\o"MyEclipse"Eclipse作為開發(fā)平臺(tái),降低了前期的投入,在經(jīng)濟(jì)上完全可行。這些軟件在下載、安裝和使用過程中我們并不需要付出額外的花費(fèi),它們是完全免費(fèi)的軟件。它們下載方便,目前有很多網(wǎng)站都有提供這些軟件的下載通道,并且安裝方法也很簡單,基本上就像正常的電腦軟件一樣,選中安裝位置,跟隨安裝向?qū)Ъ纯赏瓿砂惭b步驟,不需要進(jìn)行增加系統(tǒng)變量等操作。它們對(duì)電腦性能的要求也不高,一般正常的PC端都可完成安裝并且正常使用。由以上分析可知,本軟件在經(jīng)濟(jì)上是可行的。3.5.3操作可行性基于Java的飛機(jī)大戰(zhàn)游戲的用戶不需要具備特別的計(jì)算機(jī)能力就可以實(shí)現(xiàn)順利上手這一目標(biāo)。他們?cè)诮佑|基于Java的飛機(jī)大戰(zhàn)游戲之前不需要對(duì)這款游戲進(jìn)行相關(guān)的培訓(xùn),只需要在理解游戲規(guī)則,和命令按鈕的分布之后,玩家就可以開始玩飛機(jī)大戰(zhàn)游戲。因此我們?cè)诠δ茉O(shè)計(jì)和界面設(shè)計(jì)的時(shí)候要考慮到這方面的問題,盡量做到人性化,方便用戶理解操作。這樣不僅簡化了用戶的操作,同時(shí)由于不需要進(jìn)行相關(guān)的培訓(xùn),也從側(cè)面降低了飛機(jī)大戰(zhàn)游戲的維護(hù)成本。由以上分析可知,本游戲具有操作可行性。

4系統(tǒng)設(shè)計(jì)4.1系統(tǒng)總體設(shè)計(jì)下面將對(duì)基于Java的飛機(jī)大戰(zhàn)游戲開發(fā)進(jìn)行總體的設(shè)計(jì)介紹。對(duì)于游戲的設(shè)計(jì),用戶界面是用戶先接觸,一個(gè)直觀友好的界面對(duì)于游戲軟件有著重要的作用,用戶的體驗(yàn)感主要包括是否能夠讓客戶方便使用,減少操作響應(yīng)時(shí)間和主機(jī)連接時(shí)間,界面圖片的吸引程度等。良好的界面通常包括以下因素:(1)文字:文字是最主要的傳遞信息的元素。界面設(shè)計(jì)中的文字一定要直觀、通俗易懂。標(biāo)題和說明文字一定要放在顯眼的位置,對(duì)用戶起到提示作用,同時(shí)注意字體的類型選擇、字體大小顏色等的選擇,文字在頁面布局中的比例等問題。(2)圖形:圖形設(shè)計(jì)在游戲中具有非常重要的作用,相比較文字說明,圖形的合理運(yùn)用更加直觀,能夠調(diào)動(dòng)用戶的積極性和興趣。通常采用JPG格式的圖片,具有較高的壓縮比,運(yùn)行效率更高。(3)版式設(shè)計(jì):版式設(shè)計(jì)是將圖形和文字進(jìn)行綜合排版布局,是頁面整體更加合理,布局更加人性化。Java游戲系統(tǒng)的界面設(shè)計(jì)綜合了文字,圖形等元素。通過文字和圖片的共同描述,達(dá)到看圖就大概知道按鍵具備什么功能,讓游戲玩家能夠快速入門,不會(huì)因?yàn)閺?fù)雜的操作和難以理解的界面導(dǎo)致放棄游戲。4.2游戲流程設(shè)計(jì)4.2.1游戲初始化流程飛機(jī)大戰(zhàn)游戲的初始化包括了開發(fā)登錄界面的初始化、設(shè)計(jì)地圖加載、子彈飛機(jī)的加載。飛機(jī)大戰(zhàn)游戲的初始化通過調(diào)用初始化unit()函數(shù)實(shí)現(xiàn),主要是完成游戲資源的加載,各種游戲?qū)ο蟆⒆兞咳≈档某跏蓟?,游戲運(yùn)行環(huán)境的獲取和設(shè)置,歷史記錄的讀取等。飛機(jī)大戰(zhàn)游戲主控制程序的開發(fā)、登錄界面的開發(fā),通常是在界面上顯示游戲菜單選項(xiàng),用戶可根據(jù)菜單項(xiàng)選擇需要的操作。菜單項(xiàng)是和游戲的功能緊密相關(guān)的。手機(jī)游戲的開發(fā)往往在界面和操作方式上有較高的要求。飛機(jī)大戰(zhàn)游戲的初始化流程圖如圖4-1所示。游戲系統(tǒng)在用戶打開游戲的時(shí)候自動(dòng)調(diào)用初始化,如果飛機(jī)大戰(zhàn)游戲初始化成功,則可以順利進(jìn)入游戲主界面;如果游戲失敗,系統(tǒng)自動(dòng)進(jìn)入異常處理階段,待解決完系統(tǒng)異常之后,則玩家又可以進(jìn)入游戲主界面。并且,異常處理階段這個(gè)階段是由飛機(jī)大戰(zhàn)游戲系統(tǒng)自動(dòng)在后臺(tái)完成的,玩家并不需要進(jìn)行其他操作,只需等待系統(tǒng)加載完畢。圖4-1游戲初始化流程圖4.2.2飛機(jī)發(fā)射子彈流程在按下空格后發(fā)射子彈后,獲取飛機(jī)頭部的坐標(biāo),然后創(chuàng)建子彈對(duì)象,給與子彈初始位置,速度,攻擊力,類別等屬性,這些屬性在子彈類的構(gòu)造方法中都有實(shí)現(xiàn),然后我們把子彈存入ArrayList即可,在子彈線程里修改子彈坐標(biāo),畫板上重繪畫出子彈,它就運(yùn)動(dòng)起來了。這里貼出子彈類和創(chuàng)建方法,子彈的位置修改通過獨(dú)立的子彈線程實(shí)現(xiàn),子彈的重繪即和飛機(jī)一起畫在緩沖區(qū),這里不贅述。開始游戲流程圖如圖4-2所示:圖4-2飛機(jī)發(fā)射子彈流程圖4.2.3敵機(jī)初始化流程在開始初始化一些敵機(jī),隨機(jī)給它們初始坐標(biāo),范圍是屏幕后方,在敵機(jī)線程里修改它們的坐標(biāo),在游戲開始一段時(shí)間后,它們會(huì)出現(xiàn)在畫面里,發(fā)射子彈的方式和我方飛機(jī)相同,區(qū)別是它們的子彈是自動(dòng)添加,添加的方法寫在線程里,然后在子彈的類型上也要和我方飛機(jī)加以區(qū)分。同樣,敵機(jī)也有它的隊(duì)列來存放對(duì)象。思路和創(chuàng)建子彈很接近。敵機(jī)初始化流程圖如圖4-3所示:圖4-3敵機(jī)初始化流程圖

5系統(tǒng)實(shí)現(xiàn)5.1輸入用戶名界面實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的輸入用戶名界面如圖5-4所示。在開始游戲前需要玩家輸入自己的昵稱,可以是任意字母、數(shù)字、符號(hào)等,但是不能是空值,如果為空值系統(tǒng)將會(huì)顯示“出錯(cuò)了”并提醒輸入字母或數(shù)字。圖5-1游戲輸入用戶名界面飛機(jī)大戰(zhàn)游戲的輸入用戶名界面代碼如圖5-2所示。圖5-2游戲的輸入用戶名界面核心代碼5.2初始界面實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲初始界面如圖5-3所示。我們可以從圖中看出,在飛機(jī)大戰(zhàn)游戲初始界面里,左上角的位置上有三個(gè)參數(shù),“SCORE”、“LIFE”和“CUSTOME”,它們分別代表不同的意思:SCORE代表玩家在本輪游戲中所取得的分?jǐn)?shù),這個(gè)分?jǐn)?shù)是隨著玩家操縱的飛機(jī)打掉的敵機(jī)數(shù)量而不斷累加的;LIFE代表這一輪游戲中玩家操縱的飛機(jī)的生命數(shù),初始化的時(shí)候默認(rèn)飛機(jī)的LIFE數(shù)量為3,當(dāng)玩家操縱的飛機(jī)被敵軍的子彈打中后,LIFE的數(shù)量減一,當(dāng)LIFE的數(shù)量小于0時(shí),游戲強(qiáng)制結(jié)束,計(jì)算玩家本輪游戲中的最終得分;CUSTOME代表的是關(guān)卡數(shù),關(guān)卡數(shù)值將隨著用戶的過關(guān)而遞增。當(dāng)用戶點(diǎn)擊圖中的“開始游戲”按鈕,則進(jìn)入飛機(jī)大戰(zhàn)游戲。圖5-3飛機(jī)大戰(zhàn)游戲初始界面飛機(jī)大戰(zhàn)游戲初始界面實(shí)現(xiàn)代碼如圖5-4所示。圖5-4飛機(jī)大戰(zhàn)游戲初始界面實(shí)現(xiàn)核心代碼5.3子彈碰撞敵機(jī)界面實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲開局界面如圖5-5所示。由玩家操縱的飛機(jī)發(fā)出的子彈碰到敵方飛機(jī)時(shí)候觸發(fā)的碰撞爆炸效果。要實(shí)現(xiàn)子彈碰撞敵機(jī)這一功能主要也就是實(shí)現(xiàn)了碰撞邏輯的確定,也就是如何判斷子彈碰到了敵機(jī),其實(shí)判斷飛機(jī)是否中彈的邏輯非常簡單就是在繪制飛機(jī)與子彈的時(shí)候判斷兩個(gè)圖片是否存在重合的部分,如果存在則在該重合位置繪制一個(gè)爆炸圖片,之后將中彈飛機(jī)從飛機(jī)隊(duì)列中刪除,子彈同樣的處理。圖5-5子彈碰撞敵機(jī)界面飛機(jī)大戰(zhàn)游戲開局界面如圖5-6所示。圖5-6子彈碰撞敵機(jī)界面實(shí)現(xiàn)核心代碼5.4暫停界面實(shí)現(xiàn)所謂“暫?!保褪秋w機(jī)大戰(zhàn)游戲程序進(jìn)行暫等待,如圖5-7所示。游戲暫停界面,游戲進(jìn)行過程中將鼠標(biāo)移出可進(jìn)入暫停模式,我們可以看到游戲界面的中央出現(xiàn)了一個(gè)很大的“PAUSE”,表示現(xiàn)在的飛機(jī)大戰(zhàn)游戲處于暫停狀態(tài),在暫停狀態(tài)玩家就無法通過鍵盤,方向鍵和ASWD鍵控制戰(zhàn)機(jī)的移動(dòng)。要想結(jié)束暫停模式,玩家也只需要再將鼠標(biāo)移入就可以馬上返回游戲。飛機(jī)大戰(zhàn)游戲程序進(jìn)行暫等待的實(shí)現(xiàn)方法也不難,在程序編寫的時(shí)候加入一個(gè)全局變量,表示當(dāng)前的狀態(tài),線程中改變坐標(biāo)的時(shí)候加入判斷,如果當(dāng)前狀態(tài)為暫停那坐標(biāo)不要改變,這樣你只要給鼠標(biāo)移出加入事件,事件中改變這個(gè)全局變量,相應(yīng)的可以決定坐標(biāo)是否改變,坐標(biāo)不改變也就意味著游戲暫停,通過這個(gè)方法就可以實(shí)現(xiàn)游戲狀態(tài)向暫停狀態(tài)的改變。圖5-7游戲暫停界面游戲暫停界面實(shí)現(xiàn)核心代碼如圖5-8所示。圖5-8游戲暫停界面實(shí)現(xiàn)核心代碼5.5結(jié)束界面實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的游戲結(jié)束界面如圖5-9所示。從圖中可以看出,飛機(jī)大戰(zhàn)游戲結(jié)束的時(shí)候,游戲界面會(huì)先顯示“GAMEOVER”的提示,并且展示玩家在本輪飛機(jī)大戰(zhàn)的成績、通過關(guān)卡數(shù)和歷史最高成績。其中本輪飛機(jī)大戰(zhàn)的成績和通過關(guān)卡數(shù)這兩個(gè)參數(shù)值很好獲取,只要根據(jù)玩家實(shí)時(shí)的分?jǐn)?shù)就可以直接顯示。而歷史最高成績則需要飛機(jī)大戰(zhàn)游戲系統(tǒng)能夠?qū)σ酝婕业某煽冞M(jìn)行一個(gè)保存,在這里我們?yōu)榱撕喕_發(fā)流程,因此并沒有用到數(shù)據(jù)庫,只通過IO流完成歷史游戲分?jǐn)?shù)的保存。jar文件本身就是一個(gè)壓縮文件,把資源文件和代碼一起打包,然后寫入,將這些歷史成績直接保存在TXT文件中,系統(tǒng)可以直接讀取里面的內(nèi)容。但是這樣用戶同樣可以打開jar文件,因此為了避免玩家可以直接去TXT文件修改參數(shù)構(gòu)成作弊,我們接寫出Java對(duì)象,用ObjectOutputStream將整個(gè)類寫入文件,這樣文件內(nèi)部就是一些亂碼,玩家就無法對(duì)里面的內(nèi)容進(jìn)行人為修改。圖5-9游戲結(jié)束界面.飛機(jī)大戰(zhàn)游戲的游戲結(jié)束界面核心代碼如圖5-10所示。圖5-10游戲結(jié)束界面核心代碼5.6排行榜界面實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的排行榜界面如圖5-11所示。從圖中可以直觀的看出排行榜的昵稱和所得的分?jǐn)?shù),系統(tǒng)會(huì)調(diào)取之前玩家輸入的昵稱和最終得分情況進(jìn)行從高到底的排序并顯示出來,使玩家能更直觀的體驗(yàn)游戲的樂趣。圖5-11游戲的排行榜界面飛機(jī)大戰(zhàn)游戲的排行榜界面核心代碼如圖5-12所示。圖5-12游戲的排行榜界面核心代碼5.7血條界面實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的血條界面如圖5-13所示。為了使游戲更好的與玩家交互給敵機(jī)增加了一個(gè)血條的顯示玩家子彈命中敵機(jī)后血條會(huì)自動(dòng)減少,敵機(jī)血條為空值時(shí)觸發(fā)爆炸。圖5-13游戲的血條界面飛機(jī)大戰(zhàn)游戲的血條界面核心代碼如圖5-14所示。圖5-14游戲的血條界面核心代碼

6系統(tǒng)測(cè)試6.1測(cè)試意義我們的工作不僅僅止步于開發(fā)完成基于Java的飛機(jī)大戰(zhàn)游戲,在開發(fā)完畢之后我們還需要對(duì)開發(fā)出的游戲系統(tǒng)進(jìn)行測(cè)試,驗(yàn)證基于Java的飛機(jī)大戰(zhàn)是否滿足我們的在需求分析中提出的系統(tǒng)需要。因此我們需要對(duì)設(shè)計(jì)出的系統(tǒng)進(jìn)行全面的性能檢測(cè)。在此,主要以黑盒子測(cè)試技術(shù)為載體,對(duì)整個(gè)系統(tǒng)中的各功能模塊進(jìn)行檢測(cè),然后通過白盒子來對(duì)系統(tǒng)內(nèi)部各模塊間的邏輯架構(gòu)進(jìn)行檢測(cè),這樣才能夠保證系統(tǒng)的設(shè)計(jì)能夠符合現(xiàn)實(shí)需要,最終讓設(shè)計(jì)的系統(tǒng)能夠達(dá)到我們之前的預(yù)期。6.2測(cè)試方法在基于Java的飛機(jī)大戰(zhàn)游戲中,我們主要對(duì)它是否實(shí)現(xiàn)基本功能做出了測(cè)試,功能測(cè)試即檢驗(yàn)游戲是否能實(shí)現(xiàn)所有設(shè)計(jì)功能。測(cè)試功能可分為:游戲畫面、游戲狀態(tài)控制功能、游戲難度調(diào)整功能、游戲界面繪畫功能、玩家游戲控制功能是否正常流暢;背景圖的循環(huán)、游戲飛機(jī)的繪制、子彈的繪制是否正常;子彈碰觸到飛機(jī)(玩家操縱的飛機(jī)和敵機(jī))時(shí)候觸發(fā)的效果是否正常實(shí)現(xiàn),碰撞的時(shí)候帶來的數(shù)據(jù)變化能否正常實(shí)現(xiàn)等。這些都需要通過測(cè)試才能夠給出答案。6.3測(cè)試結(jié)果在按照上述測(cè)試方法,通過模擬玩家使用完成基于Java的飛機(jī)大戰(zhàn)游戲后,我們可以對(duì)其整體功能、技術(shù)和開發(fā)成本這三個(gè)方面進(jìn)行一個(gè)綜合的評(píng)價(jià),本次飛機(jī)大戰(zhàn)游戲的測(cè)試結(jié)果將從這三個(gè)方面一一進(jìn)行介紹:6.3.1游戲功能測(cè)試結(jié)果游戲畫面、游戲狀態(tài)控制功能、游戲難度調(diào)整功能、游戲界面繪畫功能、玩家游戲控制功能等前期設(shè)計(jì)的功能在經(jīng)過測(cè)試運(yùn)行之后可以發(fā)現(xiàn),本次開發(fā)的基于Java的飛機(jī)大戰(zhàn)游戲?qū)崿F(xiàn)了開發(fā)預(yù)期,能夠在現(xiàn)實(shí)使用中滿足用戶對(duì)于游戲的基本需要。6-1游戲功能測(cè)試結(jié)果用例名稱用例操作預(yù)期結(jié)果實(shí)際結(jié)果測(cè)試結(jié)果游戲畫面啟動(dòng)游戲正常顯示顯示正常符合預(yù)期用戶名顯示輸入名稱正常顯示顯示正常(不能為空值)符合預(yù)期游戲狀態(tài)控制功能上下左右移動(dòng)是否正常上下左右移動(dòng)正常上下左右移動(dòng)正常符合預(yù)期游戲難度調(diào)整功能隨時(shí)間變化難度是否增加隨時(shí)間變化難度增加隨時(shí)間變化難度增加符合預(yù)期玩家游戲控制功能鼠標(biāo)移動(dòng)飛機(jī)是否顯示正常移出是否正常暫停鼠標(biāo)移動(dòng)飛機(jī)顯示正常移出正常暫停鼠標(biāo)移動(dòng)飛機(jī)顯示正常移出正常暫停符合預(yù)期6.3.2游戲技術(shù)測(cè)試結(jié)果基于Java的飛機(jī)大戰(zhàn)游戲整體設(shè)計(jì)合理,并且在配置較差的個(gè)人電腦上也可以正常運(yùn)行,并且游戲畫面和游戲流暢度都不會(huì)有任何影響,穩(wěn)定性高。6-2游戲技術(shù)測(cè)試結(jié)果用例名稱用例操作預(yù)期結(jié)果實(shí)際結(jié)果測(cè)試結(jié)果游戲流暢度打開其他程序占用內(nèi)存測(cè)試是否卡頓正常運(yùn)行游戲畫面和游戲流暢度都不會(huì)有任何影響正常運(yùn)行游戲畫面和游戲流暢度都不會(huì)有任何影響符合預(yù)期6.3.3游戲成本測(cè)試結(jié)果本次選擇開源的\o"MyEclipse"Eclipse作為開發(fā)平臺(tái),降低了前期的投入,在經(jīng)濟(jì)上完全可行。在開發(fā)過程中,我們并不需要付出額外的花費(fèi),使得在設(shè)計(jì)與開發(fā)基于Java的飛機(jī)大戰(zhàn)的游戲過程中不需要耗費(fèi)大量的人力物力。

結(jié)語本次畢業(yè)設(shè)計(jì)做的是基于Java的飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn),該設(shè)計(jì)基本上實(shí)現(xiàn)了游戲流程中的幾個(gè)關(guān)鍵步驟,界面布局采用了PS繪圖渲染和修飾技術(shù),在動(dòng)畫實(shí)現(xiàn)上利用了圖片切換實(shí)現(xiàn)了電影電視中幀的概念,在技術(shù)層面上利用Java的多線程技術(shù),在整體模式上采用了MVC的分層思想,這些技術(shù)和思想的運(yùn)用使得整個(gè)開發(fā)流程變得方便和輕松許多,這也是Java面向?qū)ο蟮镊攘?。整個(gè)飛機(jī)大戰(zhàn)游戲看起來很容易,玩起來也很簡單,但是其中包括的設(shè)計(jì)要素一點(diǎn)也不少,可以說麻雀雖小,五臟俱全。難點(diǎn)在于多架敵機(jī)機(jī)同時(shí)出動(dòng),判斷發(fā)生碰撞的算法選擇。做項(xiàng)目之前,需要對(duì)整個(gè)項(xiàng)目的需求、模塊、難點(diǎn),一定要有全面和清晰的了解,這是本次畢業(yè)設(shè)計(jì)帶給我的體會(huì)。整個(gè)軟件按照預(yù)期目標(biāo)大致實(shí)現(xiàn)了飛機(jī)大戰(zhàn)游戲的功能,一款好的游戲必須要在細(xì)節(jié)上下夠功夫,才能贏得玩家的喜歡,這也是游戲比較難做的原因,需要長時(shí)間的技術(shù)積累才能做出一款比較完美的游戲。這次畢業(yè)設(shè)計(jì),加強(qiáng)了我對(duì)于軟件工程開發(fā)的了解,鍛煉了我的編程思維。通過這次完整的游戲程序的開發(fā),讓我明白了系統(tǒng)開發(fā)前期的需求分析階段和系統(tǒng)設(shè)計(jì)的重要性,一個(gè)好的前期準(zhǔn)備將使得我們?cè)诤笃诘拈_發(fā)中事半功倍。正是印證了那句話:學(xué)習(xí)不講技巧,講付出。

參考文獻(xiàn)[1]孫佳美.基于Java飛機(jī)大戰(zhàn)的設(shè)計(jì)與實(shí)現(xiàn)[J].無線互聯(lián)科技,2016(1):54-55.[2]吳璣震,戴天嘯,馬春江,等.飛機(jī)大戰(zhàn)游戲軟件中的數(shù)據(jù)結(jié)構(gòu)和策略分析[J].信息與電腦,2016(13):145-145.[3]李智鵬.基于Unity3D引擎的空中戰(zhàn)機(jī)游戲設(shè)計(jì)與實(shí)現(xiàn)[D].吉林大學(xué),2016.[4]VishwanathKV,VahdatA.Swing:RealisticandResponsiveNetworkTrafficGeneration[J].IEEE/ACMTransactionsonNetworking,2015,17(3):712-725.[5]王凌靜.MVC設(shè)計(jì)模式在Swing開發(fā)的實(shí)際運(yùn)用[J].航空計(jì)算技術(shù),2014,34(1):66-68.[6]朱彬,楊大全,邴靜,等.用Swing組件開發(fā)圖形界面中的Java多線程計(jì)算[J].沈陽工業(yè)大學(xué)學(xué)報(bào),2013,25(4):317-319.[7]蘭紅,王建雄,黃云.基于JavaSwing的《中國象棋》游戲的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦開發(fā)與應(yīng)用,2016,19(11):60-61

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論