打飛機(jī)小游戲Java課程設(shè)計(jì)報(bào)告_第1頁
打飛機(jī)小游戲Java課程設(shè)計(jì)報(bào)告_第2頁
打飛機(jī)小游戲Java課程設(shè)計(jì)報(bào)告_第3頁
打飛機(jī)小游戲Java課程設(shè)計(jì)報(bào)告_第4頁
打飛機(jī)小游戲Java課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、- . - .可修編-. z*理工學(xué)院課程設(shè)計(jì)書學(xué)院計(jì)算機(jī)學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)計(jì)科2014級(jí)題目打飛機(jī)小游戲教師王非學(xué)生雷元?jiǎng)偪抡S著Java語言的興起,越來越多的平臺(tái)開場(chǎng)使用java語言編寫的程序,雖然不及C語言的高效,但是Java擁有的平臺(tái)無關(guān)性是其他平臺(tái)所不能企及的。幾乎所有的銀行系統(tǒng)都是運(yùn)用Java來編寫的,主要是因?yàn)槠淦桨残暂^高。Java技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和平安性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。而運(yùn)用Java編寫圖形化界面也是比擬容易的,因?yàn)槠溆袑iT的框架和界面,這樣使得幾行代碼就

2、可以創(chuàng)立一個(gè)圖形化界面了。而本次要編寫的打飛機(jī)小游戲,重復(fù)運(yùn)用了圖形化界面的知識(shí),多線程,重畫,添加監(jiān)聽器等。鍛煉了我們實(shí)踐編寫界面代碼的能力,提高了我們對(duì)于圖形化界面編程的理解和運(yùn)用各種容器和組件來實(shí)現(xiàn)我們所需要的界面。關(guān)鍵詞:打飛機(jī),多線程,重畫,圖形化目錄 TOC o 1-3 h z u HYPERLINK l _Toc440365378第一章前言 PAGEREF _Toc440365378 h 3HYPERLINK l _Toc4403653791.1開發(fā)背景 PAGEREF _Toc440365379 h 3HYPERLINK l _Toc440365380開發(fā)環(huán)境 PAGEREF

3、_Toc440365380 h 3HYPERLINK l _Toc440365381第二章需求分析 PAGEREF _Toc440365381 h 3HYPERLINK l _Toc4403653822.1 開發(fā)目的 PAGEREF _Toc440365382 h 3HYPERLINK l _Toc4403653832.2 系統(tǒng)需求分析 PAGEREF _Toc440365383 h 3HYPERLINK l _Toc4403653842.3 系統(tǒng)性能分析 PAGEREF _Toc440365384 h 3HYPERLINK l _Toc4403653852.4 系統(tǒng)模塊分析 PAGEREF

4、_Toc440365385 h 3HYPERLINK l _Toc440365386第三章數(shù)據(jù)庫(kù)設(shè)計(jì) PAGEREF _Toc440365386 h 3HYPERLINK l _Toc4403653873.1 數(shù)據(jù)庫(kù)概述 PAGEREF _Toc440365387 h 3HYPERLINK l _Toc4403653883.2數(shù)據(jù)庫(kù)設(shè)計(jì) PAGEREF _Toc440365388 h 3HYPERLINK l _Toc440365389第四章詳細(xì)設(shè)計(jì) PAGEREF _Toc440365389 h 3HYPERLINK l _Toc4403653904.1 游戲概要 PAGEREF _Toc4

5、40365390 h 3HYPERLINK l _Toc4403653914.2類的詳細(xì)設(shè)計(jì) PAGEREF _Toc440365391 h 3HYPERLINK l _Toc4403653924.2.1 MyPlane類 PAGEREF _Toc440365392 h 3HYPERLINK l _Toc4403653934.2.2 Bullet PAGEREF _Toc440365393 h 3HYPERLINK l _Toc4403653944.2.3 EnemyBullet PAGEREF _Toc440365394 h 3HYPERLINK l _Toc4403653954.2.4 E

6、nemyPlane PAGEREF _Toc440365395 h 3HYPERLINK l _Toc4403653964.2.5 E*plode PAGEREF _Toc440365396 h 3HYPERLINK l _Toc4403653974.2.6 PlayMusic PAGEREF _Toc440365397 h 3HYPERLINK l _Toc4403653984.2.7 GameBo* PAGEREF _Toc440365398 h 3HYPERLINK l _Toc4403653994.2.8 DB PAGEREF _Toc440365399 h 3HYPERLINK l

7、_Toc4403654004.2.9 StartFrame PAGEREF _Toc440365400 h 3HYPERLINK l _Toc440365401第五章測(cè)試 PAGEREF _Toc440365401 h 3HYPERLINK l _Toc440365402第六章小結(jié) PAGEREF _Toc440365402 h 3HYPERLINK l _Toc440365403致 PAGEREF _Toc440365403 h 3HYPERLINK l _Toc440365404參考文獻(xiàn) PAGEREF _Toc440365404 h 3HYPERLINK l _Toc440365405附

8、錄 PAGEREF _Toc440365405 h 3- . - .可修編-. z第一章前言隨著網(wǎng)絡(luò)的不斷開展,在中國(guó)網(wǎng)民的數(shù)量越來越多。人們也對(duì)于互聯(lián)網(wǎng)所能提供的功能有了一定的要求,比方能夠在線觀看視頻,在線游戲,大數(shù)據(jù)效勞?;ヂ?lián)網(wǎng)經(jīng)過短短幾十年的開展,相比起當(dāng)初,已經(jīng)發(fā)生了翻天覆地的變化。而游對(duì)于互聯(lián)網(wǎng)的開展也有著一定的推動(dòng)作用。SQL Server是目前應(yīng)用比擬廣泛的關(guān)系型數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語言之一?,F(xiàn)在,SQL已成為國(guó)際標(biāo)準(zhǔn)語言,各種類型的計(jì)算機(jī)和DBS都采用SQL作為其存取語言和標(biāo)準(zhǔn)接口,從而使數(shù)據(jù)庫(kù)世界有可能為一個(gè)統(tǒng)一的整體。Microsoft Office Access是由微軟發(fā)布的關(guān)系

9、數(shù)據(jù)庫(kù)管理系統(tǒng)。它結(jié)合了 MicrosoftJet Database Engine 和圖形用戶界面兩項(xiàng)特點(diǎn),是 Microsoft Office 的系統(tǒng)程序之一。對(duì)于廣闊用戶而言,Access數(shù)據(jù)庫(kù)的操作簡(jiǎn)便,和Office一起安裝的,所以也有廣泛的通用性。以數(shù)據(jù)庫(kù)技術(shù)作為后臺(tái)的可視化應(yīng)用也越來越受到人們的喜愛,Java是目前應(yīng)用比擬流行的可視化編程軟件之一。它的功能強(qiáng)大,系統(tǒng)自帶的代碼較為齊,容易操作,受到很多用戶的喜歡。Java開發(fā)游戲也是比擬容易的,對(duì)于廣闊的網(wǎng)民和學(xué)生,在工作之余能夠玩玩游戲也是一種不錯(cuò)的選擇的休閑的方式,并且伴隨著網(wǎng)絡(luò)的普及化,越來越多的人們開場(chǎng)參加到游戲的大軍中來,

10、所以開發(fā)一款適合的游戲顯的尤為重要。1.1開發(fā)背景游戲自古以來就有,以前的象棋,圍棋,到現(xiàn)在的軍旗,跳跳棋。毫不夸的說,游戲是人類智慧的結(jié)晶,是我們休閑娛樂的一種方式。數(shù)據(jù)庫(kù)技術(shù)產(chǎn)生于20世紀(jì)60年代末70年代初,其主要目的是有效地管理和存取大量的數(shù)據(jù)資源.數(shù)據(jù)庫(kù)技術(shù)主要研究如何存儲(chǔ),使用和管理數(shù)據(jù). 數(shù)年來,數(shù)據(jù)庫(kù)技術(shù)和計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的開展相互滲透,相互促進(jìn),已成為當(dāng)今計(jì)算機(jī)領(lǐng)域開展迅速,應(yīng)用廣泛的兩大領(lǐng)域.數(shù)據(jù)庫(kù)技術(shù)不僅應(yīng)用于事務(wù)處理,并且進(jìn)一步應(yīng)用到情報(bào)檢索,人工智能,專家系統(tǒng),計(jì)算機(jī)輔助設(shè)計(jì)等領(lǐng)域.游戲參加數(shù)據(jù)庫(kù)技術(shù),能夠在一定程度上減輕效勞器的負(fù)擔(dān),提高效勞器的負(fù)載能力。有利用實(shí)現(xiàn)更

11、好的用戶體驗(yàn)和數(shù)據(jù)的離線保存,有助于對(duì)于游戲數(shù)據(jù)的分析和處理。在大數(shù)據(jù)時(shí)代,對(duì)于數(shù)據(jù)的分析和處理顯的更加重要。開發(fā)環(huán)境Windos系統(tǒng),JDK1.8,jre7,Access數(shù)據(jù)庫(kù),Mysql數(shù)據(jù)庫(kù),Eclipse MARS軟件一套。1.2游戲功能簡(jiǎn)介本游戲能夠?qū)崿F(xiàn)游戲和音樂同步播放,當(dāng)飛機(jī)被摧毀是還有特殊音效。參加了游戲數(shù)據(jù)保存到本地?cái)?shù)據(jù)庫(kù)的功能,能夠保存在MYSQL以及ACCESS中,滿足各種環(huán)境下的需求。第二章需求分析2.1 開發(fā)目的打飛機(jī)游戲,是我們兒時(shí)在游戲廳中經(jīng)常玩的游戲。它能勾起我們對(duì)于兒時(shí)的種種美好的回憶,而游戲本身難度適中,能夠提升我們對(duì)于這種游戲的編寫能力和邏輯思維能力。打飛

12、機(jī)游戲也需要多線程的支持,而Java對(duì)于多線程的支持程度是比擬好的的。2.2 系統(tǒng)需求分析1、功能需求對(duì)于游戲結(jié)果的記錄,判斷是否有子彈擊中飛機(jī),判斷是否2架飛機(jī)相撞。2、可靠性可用性需求能夠在在程序異常的時(shí)候提示,在斷電的情況下自動(dòng)保存游戲數(shù)據(jù)。3、出錯(cuò)處理需求當(dāng)游戲出錯(cuò)是,能夠彈出一個(gè)對(duì)話框來提醒用戶。4、游戲數(shù)據(jù)的處理對(duì)于生成的游戲數(shù)據(jù),能夠存入數(shù)據(jù)庫(kù)的不同字段中。能夠記錄游戲數(shù)據(jù)插入數(shù)據(jù)庫(kù)中的時(shí)間。2.3 系統(tǒng)性能分析為了保證系統(tǒng)能夠長(zhǎng)期、平安、穩(wěn)定、可靠、高效地運(yùn)行,本系統(tǒng)應(yīng)該滿足以下的性能需求。準(zhǔn)確性和及時(shí)性程序采用的是坐標(biāo)定位的方式,對(duì)于碰撞檢測(cè)還是比擬全面,能夠在一定的圍檢測(cè),

13、并提供了飛機(jī)碰撞檢測(cè)和子彈碰撞檢測(cè)這2種不同的檢測(cè)方式。易用性由于采用的2套數(shù)據(jù)庫(kù),能夠保證數(shù)據(jù)局部的通用性,而java又是與平臺(tái)無關(guān)性的,所有能夠保證程序的易用性。(3)平安性將游戲的數(shù)據(jù)放入數(shù)據(jù)庫(kù)中,能夠增加數(shù)據(jù)的平安性,需要程序在連接數(shù)據(jù)庫(kù)的時(shí)候輸入密碼。2.4 系統(tǒng)模塊分析1、子彈模塊:用來管理自己的飛機(jī)所需要發(fā)出的子彈,放在Bulletlist的List類型的數(shù)組中。并提供了draw()函數(shù),用來畫出不同位置的子彈并利用重畫功能,實(shí)現(xiàn)子彈的移動(dòng)。敵機(jī)子彈功能,也是相應(yīng)的重畫功能,并能夠通過EnemyBullet()功能初始化敵機(jī)子彈的位置。通過isLive()判讀子彈是否有效。get

14、Y(),get*()獲取子彈的橫坐標(biāo)和縱坐標(biāo),為碰撞檢測(cè)提供依據(jù)。2、飛機(jī)模塊:(1)敵機(jī)管理擁有1號(hào)級(jí)和2號(hào)級(jí),并通過隨機(jī)函數(shù)來調(diào)用不同的敵機(jī)出現(xiàn)在畫面中。draw()能夠?qū)崿F(xiàn)對(duì)于飛機(jī)的重畫,實(shí)現(xiàn)敵機(jī)的下落功能。(2)我機(jī)管理我機(jī)也包含初始化的*方向和Y方向上的速度,并設(shè)置dl,du,dr,dd為false。并添加了鍵盤監(jiān)聽器,能夠?qū)︽I盤的按鈕做出響應(yīng),按下w,a,s,d分別對(duì)應(yīng)的是飛機(jī)向上左下右移動(dòng)。(3)數(shù)據(jù)管理對(duì)用戶的信息和數(shù)據(jù)進(jìn)展存入數(shù)據(jù)庫(kù)的操作,和通過數(shù)據(jù)庫(kù)調(diào)用用戶數(shù)據(jù)。第三章數(shù)據(jù)庫(kù)設(shè)計(jì)3.1 數(shù)據(jù)庫(kù)概述數(shù)據(jù)庫(kù)是整個(gè)系統(tǒng)的核心,它的設(shè)計(jì)直接關(guān)系系統(tǒng)執(zhí)行的效率和系統(tǒng)的穩(wěn)定性。因此在軟

15、件系統(tǒng)開發(fā)中,數(shù)據(jù)庫(kù)設(shè)計(jì)應(yīng)遵循必要的數(shù)據(jù)庫(kù)式理論,以減少冗余、保證數(shù)據(jù)的完整性與正確性。只有在適宜的數(shù)據(jù)庫(kù)產(chǎn)品上設(shè)計(jì)出合理的數(shù)據(jù)庫(kù)模型,才能降低整個(gè)系統(tǒng)的編程和維護(hù)難度,提高系統(tǒng)的實(shí)際運(yùn)行效率。3.2數(shù)據(jù)庫(kù)設(shè)計(jì)1分?jǐn)?shù)數(shù)據(jù)表如表3.1表3.1分?jǐn)?shù)數(shù)據(jù)表字段名數(shù)據(jù)類型寬度是否為空說明User_Namevarchar10不允許為空記錄者IDUser_Scorevarchar10不允許為空記錄者成績(jī)(2)數(shù)據(jù)庫(kù)管理軟件采用Mysql或者Acess,通過這兩款軟件來管理程序中需要存儲(chǔ)管理的數(shù)據(jù),并且能夠加強(qiáng)我們的數(shù)據(jù)庫(kù)思維,為以后的開發(fā)打好根底。數(shù)據(jù)庫(kù)的詳細(xì)代碼設(shè)計(jì)如下:package Tools;pu

16、blic class DB private String url=jdbc:mysql:/localhost:3306/plane;private String driver=.mysql.jdbc.Driver;private Connection conn;private Statement stmt;public DB()try Class.forName(driver);conn=DriverManager.getConnection(url,root,123);stmt=conn.createStatement();System.out.println(數(shù)據(jù)庫(kù)連接成功); catch

17、 (ClassNotFoundE*ception e) e.printStackTrace(); catch (SQLE*ception e) e.printStackTrace();public boolean e*cuteWrite(String name,String score)String sql=insert into score values(+name+,+score+);try int result=stmt.e*ecuteUpdate(sql);System.out.println(Insert:+result);return true; catch (SQLE*cepti

18、on e) e.printStackTrace();return false;public String e*cuteRead()String sql=select * from score;String name=,score=;StringBuffer end=new StringBuffer();try ResultSet result=stmt.e*ecuteQuery(sql);while(result.ne*t()name=result.getString(1);score=result.getString(2);end.append(name+t+score+n); catch

19、(SQLE*ception e) e.printStackTrace();return (null=end) -: end.toString();第四章詳細(xì)設(shè)計(jì)4.1 游戲概要程序啟動(dòng)后,進(jìn)入游戲界面,用戶就可以進(jìn)展游戲了。本游戲采用的簡(jiǎn)便的操作,保存了大局部人的按鍵習(xí)慣。不僅可以用VK_UP、VK_DOWN、VK_RIGHT、VK_LEFT等按鍵來進(jìn)展操作,還可以使用游戲中慣用的W、A、S、D等按鍵來進(jìn)展上下左右操作。并且采用的數(shù)據(jù)庫(kù)MySql和Acess能夠?qū)τ脩舻某煽?jī)進(jìn)展保存,方便用戶查看成績(jī)記錄。4.1.1 游戲運(yùn)行界面4.1.2 分?jǐn)?shù)查看界面4.2類的詳細(xì)設(shè)計(jì)4.2.1 MyPlan

20、e類1UML類圖2. 詳細(xì)分析成員變量*,y是int類型的變量,用來記錄我方戰(zhàn)機(jī)的當(dāng)前位置,進(jìn)展位圖繪制。du,dd,dr,dl是boolean類型的變量,用來判斷我方戰(zhàn)機(jī)正在向那一個(gè)方向行進(jìn),一直按下*一個(gè)方向,將會(huì)向那個(gè)方向一直行進(jìn),直到邊界。MYPLANE_*SPEED, MYPLANE_YSPEED是int類型的變量,作用是控制我方戰(zhàn)機(jī)橫向和縱向的運(yùn)行速度,保證一定的速率移動(dòng)。live是boolean類型的變量,作用是判斷我方戰(zhàn)機(jī)是否死亡。成員方法MyPlane(int *,int y)構(gòu)造函數(shù),初始化我方戰(zhàn)的位置,使之居于中央。draw(Graphics g)繪圖方法,我方戰(zhàn)機(jī)位置改

21、變時(shí)重新繪制。keyPressed(KeyEvent e)按鍵方法,鍵盤上按下相應(yīng)的鍵碼進(jìn)展相應(yīng)的移動(dòng)。keyReleased(KeyEvent e)按鍵釋放方法,按鍵釋放使之不再移動(dòng)。move()戰(zhàn)機(jī)移動(dòng)方法,鍵按下后進(jìn)展移動(dòng)。get*()獲得戰(zhàn)機(jī)的橫向位置。getY()獲得戰(zhàn)機(jī)的縱向位置。isLive()戰(zhàn)機(jī)是否存活。setLive(boolean live)設(shè)置飛機(jī)存活狀態(tài)。4.2.2 Bullet1UML類圖2. 詳細(xì)分析(1) 成員變量BULLET_SPEED為int類型變量,初始為15.戰(zhàn)機(jī)發(fā)射子彈的速率。*,y為int類型變量,記錄子彈的位置。live為boolean類型的變量,

22、判斷子彈是否為有效狀態(tài)。bullet為Image類型變量,加載的子彈類圖。(2) 成員方法Bullet(int *,int y)構(gòu)造方法,子彈位圖繪制的位置。draw(Graphics g)繪制子彈位圖的方法。isLive()判斷子彈是否為有效狀態(tài)。setLive(boolean live)設(shè)置子彈是否有效。get*(),getY()獲得子彈的位置坐標(biāo)。4.2.3 EnemyBullet1UML類圖2. 詳細(xì)分析成員變量*,y為int類型變量,記錄敵機(jī)位置坐標(biāo)。bulletspeed為int類型變量,初始值為15,用來設(shè)置子彈速度的變量。live為boolean類型變量,判斷子彈是否為有效狀態(tài)

23、。enemyplanebullet為Image類型變量,敵機(jī)子彈所加載的位圖。成員方法EnemyBullet(int *,int y)構(gòu)造方法,初始敵機(jī)子彈的位置。draw(Graphics g)繪制敵機(jī)子彈的方法,用來重新繪制。isLive()敵機(jī)子彈是否為存活狀態(tài)。setLive(boolean live)設(shè)置子彈的狀態(tài)。get*(),getY()獲取敵機(jī)子彈的坐標(biāo),用來重新繪制。4.2.4 EnemyPlane1UML類圖2. 詳細(xì)分析成員變量*peed為敵機(jī)的橫向運(yùn)動(dòng)速度。yspeed這敵機(jī)的縱向運(yùn)動(dòng)速度。live為boolean類型變量,用來設(shè)置和判斷敵機(jī)是否存活。fired 為bo

24、olean類型變量,判斷敵機(jī)是否為開火狀態(tài)。*,y為int類型變量,用來記錄敵機(jī)的位置。enemy為Image類型變量,用來加載敵機(jī)位圖。rand 為Random類型對(duì)象,用來產(chǎn)生隨機(jī)數(shù)。成員方法EnemyPlane(StartFrame sf)構(gòu)造方法,用來初始化敵機(jī)。draw(Graphics g)方法用來重新繪制敵機(jī),重繪方法。move()方法用來對(duì)敵機(jī)進(jìn)展移動(dòng),移動(dòng)方法。get*(),getY()方法用來獲取敵機(jī)的位置。isLive()判斷敵機(jī)是否為存活狀態(tài)。setLive(boolean live)設(shè)置敵機(jī)是否為存活。get*peed()得到敵機(jī)的橫向運(yùn)動(dòng)速度。set*peed(in

25、t *peed)設(shè)置橫向運(yùn)動(dòng)速度。getYspeed()得到縱向運(yùn)動(dòng)速度。setYspeed(int yspeed)設(shè)置縱向運(yùn)動(dòng)速度。isFired()是否為開火狀態(tài)。setFired(boolean fired)設(shè)置開火狀態(tài)。4.2.5 E*plode1UML類圖2. 詳細(xì)分析成員變量*,y為int類型變量,記錄爆炸位置。live 為boolean類型變量,判斷爆炸狀態(tài)。E*plode1為Image類型對(duì)象,用來加載爆炸的位圖。成員方法E*plode(int *,int y)構(gòu)造方法,初始化爆炸位置及位圖。draw(Graphics g)繪制方法,用來繪制爆炸位圖。isLive()是否為存活

26、狀態(tài)。setLive(boolean live)設(shè)置是否為存活狀態(tài)。getCount()得到爆炸次數(shù)。setCount()設(shè)置爆炸次數(shù)。4.2.6 PlayMusic1UML類圖2. 詳細(xì)分析成員變量musicFile為File類型對(duì)象,用來播放的文件。clip為 AudioClip類型對(duì)象,進(jìn)展播放的對(duì)象。fileURI 為URI類型對(duì)象,文件的URI路徑。fileURL 為URL類型對(duì)象,文件的URL路徑。成員方法PlayMusic(String music)構(gòu)造方法,初始化播放的音頻文件。play()播放方法,進(jìn)展音頻播放。stop()停頓方法,音頻停頓方法。loop()循環(huán)方法,使音頻

27、循環(huán)播放。4.2.7 GameBo*1UML類圖2. 詳細(xì)分析成員變量GAME_WIDTH是int型變量設(shè)置游戲面板的寬度為800。GAME_HEIGHT 是int型變量設(shè)置面板的高度為600。f1I Image類型的對(duì)象,用來設(shè)置字體的顏色大小和行間距。backgroundimage 用來加載背景圖片。plane Image類型變量,用來設(shè)置加載飛機(jī)的圖片。PLANE_WIDTH int類型變量,用來設(shè)置飛機(jī)的高度。PLANE_HEIGHT int類型變量用來設(shè)置飛機(jī)的寬度。E*plode1 Image類型的對(duì)象。用來加載爆炸的圖片。E*PLODE1_WIDTH int類型變量,用來設(shè)置爆炸

28、的圍的高度。E*PLODE1_HEIGHT int類型變量,用來設(shè)置爆炸圍的寬度。Bullet Image類型的對(duì)象,用來設(shè)置子彈需要加載的圖片。BULLET_WIDTH int型變量,用來設(shè)置子彈的寬度。BULLET_HEIGHT int 型變量,用來設(shè)置子彈的高度。enemy1 Image類型的對(duì)象,用來設(shè)置敵機(jī)的寬度。enemy2 Image類型的對(duì)象,用來設(shè)置敵機(jī)的高度。enemybullet Image類型的對(duì)象,用來加載敵機(jī)發(fā)出的子彈。ENEMYBULLET_WIDTH int類型的變量,用來設(shè)置子彈的大小。ENEMYBULLET_HEIGHT int 類型的變量,用來設(shè)置子彈的大

29、小。back_music 字符串類型變量,加載背景音樂。bomb_music字符串類型變量,加載子彈爆炸音樂。4.2.8 DB1UML類圖2. 詳細(xì)分析成員變量url為String類型對(duì)象,數(shù)據(jù)庫(kù)URL路徑。用來連接數(shù)據(jù)庫(kù)。driver為String類型對(duì)象,加載數(shù)據(jù)庫(kù)的驅(qū)動(dòng)。conn為Connection類型對(duì)象,用來與數(shù)據(jù)庫(kù)進(jìn)展連接。stmt為Statement類型對(duì)象,用來操作Sql語句從而操縱數(shù)據(jù)庫(kù)。成員方法DB()構(gòu)造方法,加載數(shù)據(jù)庫(kù)驅(qū)動(dòng),實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接。e*cuteWrite(String name,String score)將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)方法。e*cuteRead()從數(shù)據(jù)庫(kù)中

30、讀取數(shù)據(jù)方法。4.2.9 StartFrame1UML類圖2. 詳細(xì)分析成員變量bk為Image類型對(duì)象,用來加載游戲的背景位圖。myplane為MyPlane類型對(duì)象,建立我方戰(zhàn)機(jī)。sourse 為float類型變量,存儲(chǔ)分?jǐn)?shù)。death, life為我方戰(zhàn)機(jī)死亡次數(shù)和生命值。bulletlist為 ArrayList對(duì)象,用來存儲(chǔ)子彈的線性表。e*plodelist 為ArrayList對(duì)象,用來存儲(chǔ)爆炸對(duì)象的線性表。enemybulletlist為 ArrayList對(duì)象,用來存儲(chǔ)敵機(jī)子彈對(duì)象的線性表。e*Item,score為Jmenu類型對(duì)象,菜單條目。jp為Jpanel對(duì)象,框架類

31、的面板對(duì)象。db為DB對(duì)象,用來進(jìn)展數(shù)據(jù)庫(kù)操作。musicBackground musicBomb為PlayMusic對(duì)象,用來播放背景音樂。成員方法StartFrame()構(gòu)造方法,初始化面板及位圖。加載游戲界面。queryRecord()查詢分?jǐn)?shù)記錄方法。void run()游戲進(jìn)展線程方法,實(shí)現(xiàn)游戲的運(yùn)行。clearEnemyBullet()去除無效的敵機(jī)子彈。clearBullet()去除無效的子彈。createBullet()創(chuàng)立子彈。clearEnemyplane()去除敵機(jī)狀態(tài)為False的對(duì)象。clearE*plode()去除爆炸狀態(tài)為False的對(duì)象。hitPlane()攻擊

32、敵機(jī)的方法。impactMyplane()判斷是否碰撞。hitMyplane()我方戰(zhàn)機(jī)被攻擊的方法。endGame()完畢游戲,掃尾方法。recored()記錄成績(jī)方法。ifEnd()判斷是否完畢。actionPerformed(ActionEvent e)菜單條目的動(dòng)作事件實(shí)現(xiàn)方法。第五章測(cè)試5.1 測(cè)試方案本游戲的測(cè)試方法采用檢查各個(gè)功能,各個(gè)模塊是否實(shí)現(xiàn)的方法。測(cè)試能否正常的運(yùn)行,游戲是否流暢,是否會(huì)卡頓等一系列體驗(yàn)為測(cè)試主要因素。5.2 測(cè)試人員及目的測(cè)試人員:雷元?jiǎng)偪聹y(cè)試目的:游戲功能實(shí)現(xiàn)、流暢度以及體驗(yàn)感。5.3 測(cè)試工程及功能控制區(qū)功能測(cè)試VK_UP按鍵:實(shí)現(xiàn)飛機(jī)的向上運(yùn)動(dòng)VK

33、_DOWN按鍵:實(shí)現(xiàn)飛機(jī)的向下運(yùn)動(dòng)VK_LFET按鍵:實(shí)現(xiàn)飛機(jī)的向左運(yùn)動(dòng)VK_RIGHT按鍵:實(shí)現(xiàn)飛機(jī)的向右移動(dòng)VK_UP及VK_LFET按鍵:實(shí)現(xiàn)飛機(jī)的左上飛行VK_DOWN及VK_LFET按鍵:實(shí)現(xiàn)飛機(jī)的左下飛機(jī)VK_UP及VK_RIGHT按鍵:實(shí)現(xiàn)飛機(jī)的右上飛行VK_DOWN及VK_RIGHT按鍵:實(shí)現(xiàn)飛機(jī)的右下飛行菜單區(qū)功能測(cè)試分?jǐn)?shù)菜單項(xiàng)選擇項(xiàng):查看游戲中保存的分?jǐn)?shù)記錄設(shè)置菜單項(xiàng)選擇項(xiàng):設(shè)置游戲中的背景音樂退出菜單項(xiàng)選擇項(xiàng):退出游戲游戲區(qū)功能測(cè)試:敵機(jī)的正常行進(jìn)以及我方戰(zhàn)機(jī)的正常顯示。子彈的測(cè)試:敵機(jī)子彈的正常發(fā)射,我方戰(zhàn)機(jī)的子彈正常發(fā)射。5.4 測(cè)試結(jié)果及分析測(cè)試1:控制區(qū)功能測(cè)試測(cè)

34、試容:我方戰(zhàn)機(jī)的向上移動(dòng)、向下移動(dòng)、向左移動(dòng)、向右移動(dòng)、向左上移動(dòng)、向左下移動(dòng)、向右下移動(dòng)、向右上移動(dòng)的功能實(shí)現(xiàn)。測(cè)試目的:VK_UP、VK_DOWN、VK_LEFT、VK_RIGHT等四個(gè)功能按鍵。測(cè)試圖:如圖圖5.4.1 控制區(qū)功能測(cè)試測(cè)試結(jié)果及分析:能夠正確的通過WASD和方向鍵控制飛機(jī)的運(yùn)動(dòng)。測(cè)試2:菜單項(xiàng)功能測(cè)試。測(cè)試容:對(duì)菜單項(xiàng)的各個(gè)菜單條目進(jìn)展功能測(cè)試。點(diǎn)擊相應(yīng)的菜單條目,功能能否實(shí)現(xiàn)。測(cè)試目的:菜單項(xiàng)的各個(gè)功能實(shí)現(xiàn)。測(cè)試圖如圖:圖5.4.2 數(shù)據(jù)保存測(cè)試結(jié)果及分析:能夠正常顯示分?jǐn)?shù),用戶名。實(shí)現(xiàn)了該局部功能的需求測(cè)試3:顯示區(qū)功能測(cè)試測(cè)試容:我方戰(zhàn)機(jī)和敵機(jī)的正常顯示以及敵我雙方

35、子彈的正常行進(jìn)。測(cè)試目的:通過測(cè)試,判斷程序的功能是否正常測(cè)試圖如圖5.4.3:圖5.4.3 測(cè)試子彈功能測(cè)試結(jié)果及分析:通過測(cè)試,我方飛機(jī)和敵方飛機(jī)都能夠正常發(fā)射子彈,子彈能夠正確擊中目標(biāo)。第六章小結(jié)在本次課程設(shè)計(jì)中,我們小組采用分工合作方式。在程序代碼和設(shè)計(jì)報(bào)告書寫中,小組兩人均分工占比到達(dá)的50%左右,在代碼的設(shè)計(jì)以及調(diào)試中,互相學(xué)習(xí)交流,對(duì)程序代碼中有迷糊時(shí),通過討論、查閱資料來解決這些問題,從而保證了進(jìn)度。這次課程設(shè)計(jì)遇到了許多問題,這也充分暴露了Java知識(shí)存儲(chǔ)量的不夠,在一些Java根底知識(shí)上比擬薄弱,不明以。通過了課程設(shè)計(jì)的問題出現(xiàn),重新學(xué)習(xí)了Java的根底知識(shí),對(duì)Java知識(shí)

36、又有了一個(gè)重新的理解。另外一個(gè)主要的問題就是在代碼的書寫中,有許多Java類以及函數(shù)不知道,以至于繞了很多彎路。在課程設(shè)計(jì)的代碼書寫過程中養(yǎng)成了查閱JavaAPI的好習(xí)慣,相信會(huì)在以后的程序設(shè)計(jì)中起到重要作用。針對(duì)這一次的課程設(shè)計(jì),我做了以下總結(jié):(1)Java是一門面向?qū)ο蟮恼Z言,在程序設(shè)計(jì)中要有面向?qū)ο蟮乃枷耄啾扔诖a。我認(rèn)為面向?qū)ο蟮乃枷敫又匾谝院蟮膶W(xué)習(xí)中,要持續(xù)培養(yǎng)這種思維。(2)Java程序中查閱JavaAPI是一種比擬好的方法,通過不斷的查閱學(xué)習(xí)過程,能夠累積許多新知識(shí),久而久之就是一份巨大的財(cái)富。(3)Java程序中要學(xué)會(huì)設(shè)計(jì),最好是能夠懂得設(shè)計(jì)模式的相關(guān)知識(shí),這在程序各

37、個(gè)方面都是比擬重要的。致經(jīng)過兩天的不懈努力,很興奮能完成一個(gè)Java編程程序,緊的心終于可以平靜了。從中體會(huì)到以及學(xué)習(xí)到很多關(guān)于Java的知識(shí),使我更加了解Java,并更加熟練了Java。在此次設(shè)計(jì)中我也遇到了很多的問題,都是經(jīng)過查詢JavaAPI和詢問教師來解決這些問題,更重要的是上課時(shí)教師的細(xì)心教學(xué),使我們學(xué)會(huì)了許多關(guān)于Java的根底知識(shí),為本次的課程設(shè)計(jì)打好了很好的根底。從而使我能夠順利完成這次課程設(shè)計(jì)。在本次做課程設(shè)計(jì)過程中,要感王非教師的悉心照顧,一直陪伴我們,并為我們講解不懂的地方,很是辛苦,也很是忙碌。還要感學(xué)院為我們此次課程設(shè)計(jì)提供機(jī)房,讓我們有了良好的學(xué)習(xí)環(huán)境可以利用做課程設(shè)

38、計(jì),從很大的程度上增強(qiáng)了我們對(duì)于Java學(xué)習(xí)的興趣。和小組成員一塊討論,多聽聽別人的想法,想方法改良自己,這使我受益匪淺。只有比擬才能知道自己的缺乏。完畢課程設(shè)計(jì)時(shí),明白了自己與實(shí)際所需的距離,因?yàn)楝F(xiàn)在畢業(yè)求職難,特別是對(duì)于像自己一般的人,更多的時(shí)侯是社會(huì),職業(yè)選擇自己,而不是更多的自己去選擇職業(yè),所以更應(yīng)該把所學(xué)的知識(shí)靈活地用于實(shí)踐,這次課程設(shè)計(jì)就是對(duì)自己一個(gè)很好的鍛煉時(shí)機(jī),無論任何的償試,都是自己以后很珍貴的經(jīng)歷,更是對(duì)自己的一種充實(shí)。參考文獻(xiàn)1 雍俊海. Java程序設(shè)計(jì)教程M. :清華大學(xué),2014. 2 錢慎一. Java程序設(shè)計(jì)教程實(shí)用教程M. :科學(xué),2011. 3 明. 軟件工

39、程M.:中國(guó)鐵道,2011.4 Ian Sommerville. Software Engineering, Ninth Editi M. :機(jī)械工業(yè),2011.5 Eric Freeman,ElElisabeth Freeman. HeadFirst設(shè)計(jì)模式M. :中國(guó)電力,2007.6 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)構(gòu)造(C語言版)M. :清華大學(xué),2015.7 鄧俊輝. 數(shù)據(jù)構(gòu)造(C+語言版) M. :清華大學(xué),2010.8 王珊,紅. 數(shù)據(jù)庫(kù)系統(tǒng)原理教程M. :清華大學(xué),1998.附錄類StartFrame的源代碼如下:public class StartFrame e*tends JFram

40、e implements Runnable,ActionListenerImage bk=GameBo*.backgroundimage;/加載游戲背景MyPlane myplane;/實(shí)例化自己的飛機(jī)對(duì)象List enemyplanelist=new ArrayList();/敵機(jī)線性表private int count=0;private float sourse=0;private int life=3,death=0;/自己子彈線性表List bulletlist=new ArrayList();/爆炸線性表List e*plodelist=new ArrayList();/敵機(jī)子彈線

41、性表List enemybulletlist=new ArrayList();JPanel jp;JMenu e*Item,score;JMenuBar menuBar;PlayMusic musicBackground,musicBomb;DB db;public static void main(String args) new Thread(new StartFrame().start();public StartFrame()/構(gòu)造函數(shù)初始化db=new DB();musicBomb=new PlayMusic(GameBo*.back_music);menuBar=new JMenu

42、Bar();score=new JMenu(分?jǐn)?shù));score.addMouseListener(new MouseAdapter() public void mousePressed(MouseEvent e) queryRecord(););menuBar.add(score); e*Item=new JMenu(退出); e*Item.addMouseListener(new MouseAdapter() public void mousePressed(MouseEvent e) musicBackground.stop(); System.e*it(0););menuBar.add(

43、e*Item);setJMenuBar(menuBar);/設(shè)置構(gòu)架大小this.setSize(GameBo*.GAME_WIDTH,GameBo*.GAME_HEIGHT+30);/窗口居中int width=Toolkit.getDefaultToolkit().getScreenSize().width;int height=Toolkit.getDefaultToolkit().getScreenSize().height;setLocation(width/2-GameBo*.GAME_WIDTH/2, /設(shè)置構(gòu)架位置height/2-GameBo*.GAME_HEIGHT/2);

44、setResizable(false); /大小固定/設(shè)置飛機(jī)在框架的位置myplane=new MyPlane(GameBo*.GAME_WIDTH/2,GameBo*.GAME_HEIGHT-GameBo*.PLANE_HEIGHT*2);/增加敵機(jī)線程啟動(dòng)new Thread(new AddEnemy().start();/為框架添加按鍵監(jiān)聽this.addKeyListener(new KeyMonitor();/框架添加游戲面板this.add(new GameJPanel();/設(shè)置框架名稱setTitle(打飛機(jī)小游戲);addWindowListener(new WindowA

45、dapter()Overridepublic void windowOpened(WindowEvent arg0) musicBackground=new PlayMusic(GameBo*.back_music);musicBackground.loop();Overridepublic void windowClosing(WindowEvent arg0) musicBackground.stop(););this.setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE);setVisible(true);private void queryReco

46、rd() String score=db.e*cuteRead();JFrame scoreFrame=new JFrame(-排行榜-);JTe*tArea scoreArea=new JTe*tArea();JScrollPane scoreScroll=new JScrollPane(scoreArea);scoreArea.setTe*t(用戶名: t 最高分:n);scoreArea.setEditable(false);scoreArea.append(score);scoreFrame.add(scoreScroll);scoreFrame.setSize(200, 100);s

47、coreFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);scoreFrame.setVisible(true);Overridepublic void run() while(true)repaint();/Repaints this ponent. try Thread.sleep(48);/線程睡眠50毫秒 catch (InterruptedE*ception e) e.printStackTrace();private class KeyMonitor e*tends KeyAdapter public void keyR

48、eleased(KeyEvent e) if(e.getKeyCode()=KeyEvent.VK_ENTER)/按下F2飛機(jī)重新活過來myplane.setLive(true);myplane.keyReleased(e);/傳遞按鍵釋放對(duì)象public void keyPressed(KeyEvent e) myplane.keyPressed(e);/傳遞按鍵按下對(duì)象private class AddEnemy implements RunnableOverridepublic void run() while(true)try Thread.sleep(600);addEnemyPla

49、ne(); catch (InterruptedE*ception e) e.printStackTrace();private void addEnemyPlane()EnemyPlane enemyplane=new EnemyPlane(StartFrame.this);/為飛機(jī)添加子彈到子彈線性表中enemybulletlist.add(new EnemyBullet(enemyplane.get*(),enemyplane.getY(); /添加飛機(jī)到敵機(jī)線性表中enemyplanelist.add(enemyplane);/游戲面板private class GameJPanel

50、e*tends JPanelprivate static final long serialVersionUID = 1L;public void paint(Graphics g)/super.paint(g)是方法的重寫,super關(guān)鍵字是屏蔽父類paintg方法,執(zhí)行子類paintg方法super.paint(g);/繪畫背景層指定高度的寬度 g.drawImage(bk,0,0,GameBo*.GAME_WIDTH,GameBo*.GAME_HEIGHT,null);/繪出自己的飛機(jī)myplane.draw(g);if (count=0)if(myplane.isLive()/飛機(jī)存活

51、創(chuàng)立子彈createBullet();else/否則移除所有子彈for(int i=0;ibulletlist.size();i+)bulletlist.remove(i);count+;/控制發(fā)子彈的速度if(count=2)count=0;for(int i=0;ibulletlist.size();i+)Bullet bullet=bulletlist.get(i);/得到第I個(gè)子彈并且重新畫出bullet.draw(g);/清掉前面的子彈clearBullet();/敵機(jī)處理for(int i=0;i95&enemyplane.isLive()enemybulletlist.add(n

52、ew EnemyBullet(enemyplane.get*(),enemyplane.getY();/如果敵機(jī)面對(duì)我方飛機(jī)時(shí)發(fā)射一枚子彈敵機(jī)存活并且開火if(enemyplane.get*()=myplane.get*()&enemyplane.get*()=myplane.get*()+GameBo*.PLANE_WIDTH&enemyplane.isFired()&enemyplane.isLive()enemybulletlist.add(new EnemyBullet(enemyplane.get*(),enemyplane.getY();/設(shè)置開火為falseenemyplane.

53、setFired(false);for(int i=0;i=1)hitMyplane();/敵機(jī)子彈攻擊我方戰(zhàn)機(jī)for(int i=0;ie*plodelist.size();i+)E*plode e*p=e*plodelist.get(i);e*p.draw(g);e*p.setCount(e*p.getCount()+1);clearE*plode();g.setColor(Color.RED);/g.setFont(GameBo*.f1);/設(shè)置字體之后加載窗口會(huì)卡2秒鐘if(sourse!=0)g.drawString(您的得分:+(int)sourse+0, 50, 50);g.dr

54、awString(您的生命:+life, 50, 70);g.drawString(死亡次數(shù):+death, 50, 90);elseg.drawString(您的得分:0, 50, 50);g.drawString(您的生命:+life, 50, 70);g.drawString(死亡次數(shù):+death, 50, 90);/敵機(jī)子彈不存活立即移除private void clearEnemyBullet() for(int i=0;ienemybulletlist.size();i+)if(!(enemybulletlist.get(i).isLive()enemybulletlist.re

55、move(i);/創(chuàng)立子彈private void createBullet()/飛機(jī)高度為30寬度加5使子彈看起來是居中的Bullet bullet=new Bullet(myplane.get*()+5),(myplane.getY()-30);bulletlist.add(bullet);/去除不存活的子彈 Live狀態(tài)為Falseprivate void clearBullet()for(int i=0;ibulletlist.size();i+)if(!(bulletlist.get(i).isLive()bulletlist.remove(i);/去除敵機(jī)不存活的子彈 Live狀態(tài)

56、為Falseprivate void clearEnemyplane() for(int i=0;ienemyplanelist.size();i+)if(!(enemyplanelist.get(i).isLive()enemyplanelist.remove(i);/爆炸狀態(tài)為False去除爆炸private void clearE*plode() for(int i=0;ie*plodelist.size();i+)if(!(e*plodelist.get(i).isLive()e*plodelist.remove(i);/攻擊private void hitPlane()int b*,

57、e*,by,ey;Bullet bullet;EnemyPlane enemyplane;for(int i=0;ibulletlist.size();i+)bullet=bulletlist.get(i);b*=bullet.get*();by=bullet.getY();for(int j=0;j=e*&b*=ey&by=ey+GameBo*.ENEMY_HEIGHT&enemyplane.isLive()&bullet.isLive()bullet.setLive(false);enemyplane.setLive(false);e*plodelist.add(new E*plode(b

58、*,by);/sourse=sourse+1.168320194f;/防止CE惡意修改分?jǐn)?shù)我的QQsourse=sourse+100;private void impactMyplane()int m*,my,e*,ey;EnemyPlane enemyplane;/獲得自己戰(zhàn)機(jī)位置m*=myplane.get*();my=myplane.getY();for(int i=0;i=e*&m*=ey&my=ey+GameBo*.ENEMY_HEIGHT&myplane.isLive()&enemyplane.isLive()death+;life-;if(ifEnd()endGame();myp

59、lane.setLive(false);enemyplane.setLive(false);e*plodelist.add(new E*plode(m*,my);e*plodelist.add(new E*plode(e*,ey);private void hitMyplane() int m*,my,e*,ey;EnemyBullet eb;/獲得自己戰(zhàn)機(jī)里面位置m*=myplane.get*();my=myplane.getY();for(int i=0;i=m*&e*+GameBo*.ENEMYBULLET_WIDTH=my&ey+GameBo*.ENEMYBULLET_HEIGHT=l

60、ife) true : false; Override public void actionPerformed(ActionEvent e) if(e*Item=e.getSource() musicBackground.stop(); this.dispose(); 工具GameBo*類如下:package Tools;public class GameBo* public static int GAME_WIDTH=800; /游戲面板寬度public static int GAME_HEIGHT=600; /游戲面板高度public static Font f1=new Font(黑體,

溫馨提示

  • 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. 人人文庫(kù)網(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)論