版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘要</b></p><p> 編程語言從機器語言,匯編語言,再到現(xiàn)在的高級語言,一步步發(fā)展到現(xiàn)在已經(jīng)形成了一個完善語言的體系。就像是各個國家都有自己的語言一樣,編程語言也有許多不同的語言,而每種語言的出現(xiàn)都是為了迎合不同的需求,也都有自己獨特的語言魅力,Java也不例外,它的出現(xiàn)迎合了人們對應(yīng)用程序跨平臺運行的需求。</p><p>
2、 而且Java現(xiàn)在是全球流行的開發(fā)工具之一,它擁有了一套龐大且完善的類庫,內(nèi)置了其他語言需要靠庫甚至是操作系統(tǒng)才能支持的功能,擁有一個虛擬機。</p><p> 本文在開始先對Java語言做了初步的介紹,即針對Java的特點做了詳細(xì)的描述,同時也針對Java程序的運行機制做了描述;開發(fā)環(huán)境做了簡單的介紹。</p><p> 接下來是對編寫的軟件的描述,對Java API的應(yīng)用,對Ja
3、va語言的繼承、方法的重寫、接口和抽象類的使用。</p><p><b> 緒論</b></p><p><b> 第一章系統(tǒng)開發(fā)環(huán)境</b></p><p><b> 1.1開發(fā)工具</b></p><p><b> 1.2應(yīng)用環(huán)境</b><
4、;/p><p><b> 第二章系統(tǒng)需求分析</b></p><p><b> 2.1需求分析</b></p><p><b> 2.2可行性分析</b></p><p><b> 第三章系統(tǒng)概要設(shè)計</b></p><p>&
5、lt;b> 3.1設(shè)計目標(biāo)</b></p><p><b> 3.2系統(tǒng)功能模塊</b></p><p><b> 第四章系統(tǒng)詳細(xì)設(shè)計</b></p><p><b> 4.1程序設(shè)計</b></p><p> 4.2各功能界面截圖</p>
6、;<p><b> 第五章系統(tǒng)測試</b></p><p><b> 5.1測試的意義</b></p><p><b> 5.2測試過程</b></p><p><b> 5.3測試結(jié)果</b></p><p><b>
7、第六章總結(jié)</b></p><p><b> 參考文獻</b></p><p><b> 緒論</b></p><p><b> Java語言簡介</b></p><p> Java的發(fā)展和歷史</p><p> Java的誕生得益
8、于對家用電器的芯片的研制,開始時,開發(fā)者想用C++語言來開發(fā)電器的芯片,但是,由于芯片的種類各不相同,因此,程序要進行多次編譯。尤其是C++中的指針操作,稍有不慎,就會出現(xiàn)問題。程序可以出錯,但是家用電器不能出錯誤,為此,開發(fā)者將C++語言進行簡化,去掉指針操作,去掉運算符重載,去掉C++中的多繼承,得到了Java語言,將它變成了一種解釋執(zhí)行的語言,并在每個芯片上裝上一個Java虛擬機。剛開始時,Java語言被稱為Oak語言(橡樹語言)
9、</p><p> Java語言現(xiàn)在逐漸成熟起來,它的類也已經(jīng)進千個了,而且還可以通過第三方購買中間件,為Java語言的發(fā)展提供了良好的發(fā)展前景,同時它也是跨平臺的語言,因此許多軟件開發(fā)商及硬件開發(fā)商也爭先恐后地想搭上Java語言的快車,都聲稱支持Java語言,它對微軟發(fā)起了有力的挑戰(zhàn),而且Sun公司正努力開發(fā)Java芯片</p><p><b> Java語言的特點<
10、/b></p><p> Java是一種簡單的,面向?qū)ο蟮?,分布式的,健壯的,安全的,與平臺無關(guān)的,多線程的,高性能的,動態(tài)程序設(shè)計語言。</p><p><b> 簡單易學(xué)</b></p><p> Java語言雖起源于C++,但是去掉了C++語言中難于掌握的指針操作,內(nèi)存管理非常簡單,如果要釋放內(nèi)存資源,你僅需要讓其對象的引用等
11、于null,這樣就使操作變得異常簡單</p><p><b> 面向?qū)ο?lt;/b></p><p> Java語言是面向?qū)ο蟮木幊陶Z言。面向?qū)ο蠹夹g(shù)很好的解決了當(dāng)今軟件開發(fā)過程中新出現(xiàn)的種種傳統(tǒng)的面向過程語言所不能處理的問題,包括軟件開發(fā)的規(guī)模擴大,升級加快,維護量增大以及開發(fā)分工日益細(xì)化,專業(yè)化和標(biāo)準(zhǔn)化等。面向?qū)ο蠹夹g(shù)的核心是以更接近于人類思維的方式建立計算機模型
12、,它利用類和對象的機制將數(shù)據(jù)與其上的操作封裝在一起,并通過統(tǒng)一的接口與外界交互,是反映現(xiàn)實世界實體的個各類在程序中能夠獨立、自治和繼承。</p><p><b> 分布式</b></p><p> Java包括一個支持HTTP(超文本傳輸協(xié)議)和FTP(文件傳輸協(xié)議)</p><p> 等基于TCP/IP協(xié)議的子庫,因此,Java應(yīng)用程序
13、可憑借URL(統(tǒng)一資源定位符)打開并訪問網(wǎng)絡(luò)上的對象,其訪問方式與訪問本地文件系統(tǒng)幾乎完全相同。為分布式環(huán)境尤其是Internet提供了動態(tài)內(nèi)容,無疑是一項非常宏達的工程,但是Java的語法特性可以很容易實現(xiàn)這項目標(biāo)。</p><p><b> 健壯性</b></p><p> Java致力于檢查程序在編譯和運行時的錯誤。類型檢查可以檢查出許多開發(fā)早期出現(xiàn)的錯誤。
14、Java自行操作內(nèi)存,減少了內(nèi)存錯誤的可能性。Java還實現(xiàn)了真數(shù)組,避免了覆蓋數(shù)據(jù)的可能。這些功能特征大大縮短了開發(fā)Java應(yīng)用程序的周期。Java提供null指針檢測數(shù)組邊界,進行異常出口字節(jié)代碼校驗。</p><p><b> 安全穩(wěn)定</b></p><p> 對網(wǎng)絡(luò)上應(yīng)用程序的另一個要求是較高的安全可靠性。用戶通過網(wǎng)絡(luò)獲取并在本地運行的應(yīng)用程序必須是可信
15、賴的,不會充當(dāng)病毒或者其他惡意操作的傳播者而攻擊本地的資源,同時它還應(yīng)該是穩(wěn)定 的,輕易不會產(chǎn)生死機等錯誤,使得用戶樂意使用。</p><p><b> 平臺無關(guān)</b></p><p> Java語言獨特的運行機制使得它具有良好的二進制的可移植性,利用Java,開發(fā)人員可以編寫出與具體平臺無關(guān),普遍適用的應(yīng)用程序,大大降低了開發(fā)、維護和管理的開銷,也就是一次編譯
16、,隨處運行。</p><p><b> 支持多線程</b></p><p> 多線程是當(dāng)今軟件開發(fā)技術(shù)的又一重要成果,已成功應(yīng)用在操作系統(tǒng)和應(yīng)用開發(fā)等多個領(lǐng)域。多線程技術(shù)允許同一個進程有兩個或兩個以上的執(zhí)行線索,即同時做兩件或多件事情,滿足了一些復(fù)雜軟件的需求。Java不但內(nèi)置多線程功能,而且定義了一些用于建立、管理多線程的類和方法,使得開發(fā)具有多線程功能的程序變
17、得簡單、容易和有效。</p><p><b> 高性能</b></p><p> 如果解釋器的速度快,Java可以在運行時直接將目標(biāo)代碼翻譯成機器指令。Sun用直接解釋器一秒鐘內(nèi)可調(diào)用300 000個過程。翻譯目標(biāo)代碼的速度與C++的性能沒什么區(qū)別。</p><p><b> 動態(tài)性</b></p>&
18、lt;p> Java的動態(tài)性是其面向?qū)ο笤O(shè)計方法的擴展,它允許程序動態(tài)地裝入運行過程中所需要的類。Java編譯器將符號引用信息在字節(jié)碼中保存下來并傳遞給解釋器嗎,再由解釋器完成動態(tài)連接類后,將符號引用信息轉(zhuǎn)換為數(shù)值偏移量。這樣,一個在存儲器生成的對象不在編譯過程中決定,而是延遲到運行時有解釋器確定,這樣對類中的變量和方法進行更新時就不至于影響現(xiàn)存的代碼。解釋執(zhí)行字節(jié)碼時,這種符號信息的查找和轉(zhuǎn)換過程進在一個新的名字出現(xiàn)時才進行一
19、次,隨后代碼便可以全速執(zhí)行。在運行時確定引用的好處是可以使用已被更新的類,而不必?fù)?dān)心會影響原有的代碼。</p><p><b> Java平臺簡介</b></p><p> 1998年12月,Sun發(fā)布了Java2平臺—JDK 1.2,這時Java發(fā)展是上的里程碑。1999年6月,Sun公司重新組織Java平臺的集成方法,并將Java企業(yè)級應(yīng)用平臺作為發(fā)展方向。2
20、004年,Sun發(fā)布JDK1.5更名為JDK5.0.2006年底,Sun再度推出JDK1.6(JDK6.0)。如今,Java家族也已經(jīng)有四個主要成員:J2SE(Java 2 Standard Edition)用于工作站、PC機的Java標(biāo)準(zhǔn)平臺,現(xiàn)改名為JavaSE;J2EE(Java 2 Enterprise Edition)可擴展的企業(yè)級應(yīng)用平臺,現(xiàn)改名為JavaEE;J2ME(Java 2 Micro Edition)嵌入式電子設(shè)
21、備Java應(yīng)用平臺,現(xiàn)改名為JavaME;JavaFX是一種聲明式的靜態(tài)類型編程語言,專為喜歡在可視化編程中的Web腳本人員和應(yīng)用程序開發(fā)人員量身定做,是Java新成員</p><p> Java程序的運行機制和Java虛擬機(JVM)</p><p> Java語言比較特殊,由Java語言編寫的程序需要經(jīng)過編譯步驟,但是這個編譯步驟并不會生成特定平臺的機器碼,而是生成一種與平臺無關(guān)的
22、字節(jié)碼文件(也就是.class文件)。當(dāng)然,這種字節(jié)碼文件不是可執(zhí)行的,必須使用Java解釋器來解釋執(zhí)行。因此,我們可以認(rèn)為:Java語言既是編譯型語言,也是解釋型語言。或者說,Java語言既不是純粹的編譯型語言,也不是純粹的解釋型語言。Java程序的執(zhí)行過程必須經(jīng)過先編譯,后解釋兩個步驟,</p><p> Java語言里負(fù)責(zé)解釋執(zhí)行字節(jié)碼文件的是Java虛擬機,即JVM(Java Virtual Machi
23、ne)。JVM是可運行JAVA字節(jié)碼文件的虛擬計算機。所有平臺的JVM向編譯器提供相同的編譯接口,而編譯器只需要面向虛擬機,生成虛擬機能理解的代碼,然后由虛擬機來解釋執(zhí)行。在一些虛擬機的實現(xiàn)中,還會將虛擬機代碼轉(zhuǎn)換成特定系統(tǒng)的機器碼執(zhí)行,從而提高執(zhí)行效率。</p><p> JVM是一個抽象的計算機,和實際的計算機一樣,它具有指令集并使用不同的存儲區(qū)域。它負(fù)責(zé)執(zhí)行指令,還要管理數(shù)據(jù)、內(nèi)存和寄存器</p&g
24、t;<p> Java開發(fā)環(huán)境搭建</p><p> 首先進行JDK的安裝,下載JDK安裝包解壓后進行環(huán)境變量的配置,配置步驟如下:</p><p> 右擊桌面上“我的電腦”圖標(biāo),出現(xiàn)右鍵菜單;單擊“屬性”菜單項,出現(xiàn)“系統(tǒng)屬性”或“高級系統(tǒng)設(shè)置” 對話框;單擊該對話框的“高級”選項,出現(xiàn)如圖2所示的對話框。</p><p> 單擊“環(huán)境變量”
25、按鈕,將看到如圖3所示的“環(huán)境變量”的對話框,通過該對話框可以修改或添加環(huán)境變量。</p><p><b> 圖2圖3</b></p><p><b> 第一章系統(tǒng)開發(fā)環(huán)境</b></p><p><b> 1.1開發(fā)環(huán)境</b></p><p> Sun M
26、icrosystems公司在推出Java語句的同時,推出了一套開發(fā)工具JDK。Sun提供的基于字符模式的Java開發(fā)工具包JDK:Java開發(fā)工具(JDK)是許多Java專家最初使用的開發(fā)環(huán)境。Java是平臺無關(guān)的語言是指用Java寫的應(yīng)用程序不用修改就可以在不同的軟硬件平臺上運行。</p><p> Java源程序編寫可以借助于記事本,Editplus,UltraEdit等第三方編輯工具。</p>
27、<p> 所有的Java文件編輯、編譯、調(diào)試、解釋運行都是通過使用字符命令來執(zhí)行操作。JDK由一個標(biāo)準(zhǔn)庫和一組建立、測試及建立文檔的Java實用程序組成。其核心Java API是一些預(yù)定義的類庫,開發(fā)人員需要使用這些類來訪問Java語言的功能。JDK是整個Java的核心,包括了Java運行環(huán)境,一堆Java工具和Java基礎(chǔ)的類庫。不論什么Java應(yīng)用服務(wù)器實質(zhì)都是內(nèi)置了某個版本的JDK。因此掌握J(rèn)DK是學(xué)好Java的第
28、一步。</p><p> JDK里面是Java類庫和Java的語言規(guī)范,它提供的是無論是用何種開發(fā)軟件寫java程序都必須用到類庫和java語言規(guī)范,沒有JDK,你的java程序根本就不能用。</p><p> 最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開發(fā)了自己的JDK,例如IBM公司開發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開發(fā)的JD
29、K等待,其中IBM的JDK包含的JVM運行效率要比Sun的JDK包含的JVM高出許多。而專門運行在X86平臺的Jrocket在服務(wù)端運行效率也要比Sun的JDK好很多。但是不管怎么說,還是需要把Sun的JDK掌握好。</p><p> 但是在這里我借助的是一個編程軟件MyEclipse來完成程序的編寫與調(diào)試的</p><p><b> 1.2應(yīng)用環(huán)境</b><
30、;/p><p> 操作系統(tǒng):Windows 7</p><p> 應(yīng)用環(huán)境:JDK 1.6</p><p> 應(yīng)用軟件:Myeclipse</p><p><b> 第二章系統(tǒng)需求分析</b></p><p><b> 2.1需求分析</b></p>&l
31、t;p> 游戲簡介:游戲中玩家通過鼠標(biāo)來移動自己的飛機,打掉飛機或蜜蜂會獲得分?jǐn)?shù)和獎勵,打掉一架飛機獲得5分,打掉一只蜜蜂獲得隨機獎勵:一條命或者40次雙倍火力,如果撞上敵機或蜜蜂,則會失去生命,同時雙倍火力清零。每撞到一次就生命值減1,當(dāng)生命值為0時,游戲結(jié)束</p><p> shoots要滿足以下幾點要求:</p><p> 鼠標(biāo)點擊界面游戲開始</p>
32、<p> 鼠標(biāo)移出界面游戲暫停再次移入繼續(xù)開始</p><p> 飛機跟隨鼠標(biāo)指針移動</p><p> 打掉飛機就分值增加,打掉蜜蜂就獎勵生命值或者雙倍火力</p><p><b> 2.2可行性分析</b></p><p> Shoots游戲是一種簡單的大眾游戲,在實現(xiàn)游戲的過程中你需要對子彈與敵
33、機或蜜蜂的碰撞做出判斷,判斷的處理可以由坐標(biāo)的范圍來完成;如果碰撞就要做刪除處理,通過記錄碰撞的對象(對象是存放在數(shù)組中的)的下標(biāo)可以對它進行刪除操作;以及在它們越界(超出畫板范圍的那些敵機和蜜蜂)后對它們要刪除;因為敵機和蜜蜂是不斷生成的,會越來越多,而存放它們的是一個數(shù)組,這個數(shù)組不是固定的長度,會隨著敵機和蜜蜂的數(shù)量的增加而進行擴容,所以如果不對越界的敵機和蜜蜂進行處理,數(shù)組會越來越大,從而占有更多的存儲空間,而游戲運行也越來越慢
34、;另外實現(xiàn)子彈、敵機和蜜蜂的自動移動,需要對存放它們的數(shù)組遍歷然后對每一個存放的對象的坐標(biāo)屬性進行加減操作;而用鼠標(biāo)來操作飛機就需要用到與鼠標(biāo)移動相關(guān)的觸發(fā)事件,在鼠標(biāo)的點擊,滑動,移出面板,移入面板同樣都有與之相關(guān)的鼠標(biāo)事件,通過這些事件來實現(xiàn)暫停,運行。</p><p> 選擇使用Java語言,一方面是接觸的多,另一方面是Java是一種跨平臺的,適合于分布式計算機環(huán)境的面向?qū)ο缶幊陶Z言,用Java寫的應(yīng)用程
35、序不用修改就可在不同的軟硬件平臺上運行。</p><p><b> 第三章系統(tǒng)概要設(shè)計</b></p><p><b> 3.1設(shè)計目標(biāo)</b></p><p> 可以利用鼠標(biāo)移動戰(zhàn)機,鼠標(biāo)移出游戲面板游戲暫停,鼠標(biāo)再次移入游戲面板游戲開始,還要隨機的產(chǎn)生敵機和蜜蜂,生命值為零結(jié)束游戲。</p><
36、;p><b> 3.2系統(tǒng)功能模塊</b></p><p> 1.類與類之間的關(guān)系</p><p> 包括一個源文件,五個類和兩個接口</p><p><b> 圖3.1</b></p><p> 2.java源文件及其功能</p><p> 3.數(shù)據(jù)建模:
37、使用一個數(shù)據(jù)模型,描述對象的關(guān)系,使用繪圖坐標(biāo)系作為參考模型,英雄機、敵機、蜜蜂以及子彈都是矩形區(qū)域,如下圖所示:</p><p> 以英雄機為例標(biāo)示出數(shù)據(jù)x、y、width以及height所表示的位置。敵機、蜜蜂、子彈以及英雄機的這四個屬性類似的</p><p><b> 第四章系統(tǒng)詳細(xì)設(shè)計</b></p><p><b>
38、4.1程序設(shè)計</b></p><p> 1.主類ShootGame</p><p><b> (1)成員變量</b></p><p><b> (2)方法</b></p><p> 2.主類ShootGame中的main方法</p><p> (1).
39、主類的main為程序入口,定義了游戲窗口的的大小、居中,點擊右上角“x”關(guān)閉窗口以及設(shè)置窗口的可見性</p><p> 還調(diào)用了啟動游戲的方法action()</p><p> 3.抽象父類FlyingObject</p><p> 由圖3.1可以分析出英雄機、敵機、子彈以及蜜蜂都有x、y、width以及height屬性,因此,將這些屬性抽象到父類Flying
40、Object中。另外,它們在界面上都是以圖片的形式顯示,因此在父類FlyingObject中,添加image屬性,表示它們的貼圖;由于蜜蜂和敵機都可以被子彈擊中,因此在FlyingObject類中添加shootBy方法,該方法的參數(shù)為子彈類型。下圖是以蜜蜂為例,說明子彈被擊中的算法。代碼如下:</p><p> /**敵人被子彈打,this:敵人;bullet:子彈*/</p><p>
41、 public boolean shootBy(Bullet bullet){</p><p> //找出敵機的四個角的坐標(biāo)</p><p> int x1 = this.x;</p><p> int x2 = this.x+this.width;</p><p> int y1 = this.y;</p><
42、;p> int y2 = this.y+this.height;</p><p><b> //找出子彈坐標(biāo)</b></p><p> int x = bullet.x;</p><p> int y = bullet.y;</p><p> return x>x1 && x<
43、x2 && y>y1 && y<y2;//判斷子彈是否打中敵機</p><p><b> }</b></p><p><b> 4.接口Enemy</b></p><p> 實現(xiàn)該接口的類為敵人,如果子彈擊中敵機,英雄機獲取分?jǐn)?shù),因此該接口提供獲取分?jǐn)?shù)的方法,代碼如下:&l
44、t;/p><p> package shoots;</p><p> public interface Enemy {</p><p> public int getScore();</p><p><b> }</b></p><p><b> 5.接口Award</b&g
45、t;</p><p> 實現(xiàn)該接口的類表示獎勵,如果子彈擊中了蜜蜂,英雄機可以獲取獎勵,獎勵分兩種,可以是雙倍活力或生命值,因此提供獲取獎勵類型的方法,代碼如下:</p><p> package shoots;</p><p> public interface Award {</p><p> public int DOUBLE_
46、FIRE = 0;//火力值</p><p> public int LIFE = 1;//命</p><p> /* 獲取獎勵類型(0為火力;1為命)*/</p><p> public int getType();</p><p><b> }</b></p><p> 6.類Air
47、plane,表示敵機</p><p> 敵機屬于飛行物,因此繼承FlyingObject類,重寫了父類的step方法,實現(xiàn)Enemy接口,敵機可以向下移動,因此有移動的速度作為屬性,實現(xiàn)了敵機越界的判斷方法,代碼如下:</p><p> package shoots;</p><p> public class Airplane extends FlyingO
48、bject implements Enemy{</p><p> private int speed = 2;</p><p> public Airplane(){</p><p> image = ShootGame.airplane;</p><p> width = image.getWidth();</p>&
49、lt;p> height = image.getHeight();</p><p> x = (int)(Math.random()*(ShootGame.WIDTH-this.width));</p><p> y =-this.height;</p><p><b> }</b></p><p> p
50、ublic int getScore(){</p><p><b> return 5;</b></p><p><b> }</b></p><p> public void step(){</p><p> y +=speed;</p><p><b>
51、 }</b></p><p> public boolean outOfBounds(){</p><p> return y>ShootGame.HEIGHT;</p><p><b> } </b></p><p><b> }</b></p><
52、p> 7.類Bee,表示蜜蜂</p><p> 繼承FlyingObject,重寫了Step方法,實現(xiàn)Award接口,蜜蜂可以左右和向下移動,故含有移動速度的屬性和越界的判斷,代碼如下:</p><p> package shoots;</p><p> import java.util.Random;</p><p> pu
53、blic class Bee extends FlyingObject implements Award{</p><p> private int xSpeed = 1;</p><p> private int ySpeed = 2;</p><p> private int awardType;</p><p> public
54、Bee(){</p><p> image = ShootGame.bee;</p><p> width = image.getWidth();</p><p> height = image.getHeight();</p><p> Random rand = new Random();</p><p>
55、 x = rand.nextInt(ShootGame.WIDTH-this.width);</p><p> y =-this.height;</p><p> awardType=rand.nextInt(2);</p><p><b> }</b></p><p> public int getType(
56、){</p><p> return awardType;</p><p><b> }</b></p><p> public void step(){</p><p> x += xSpeed;</p><p> y += ySpeed;</p><p>
57、if(x>=ShootGame.WIDTH-this.width){</p><p> xSpeed = -1;</p><p><b> }</b></p><p><b> if(x<=0){</b></p><p> xSpeed = 1;</p><p
58、><b> }</b></p><p><b> }</b></p><p> public boolean outOfBounds(){</p><p> return y>ShootGame.HEIGHT;</p><p><b> } </b><
59、;/p><p><b> }</b></p><p> 8.類Bullet,表示子彈</p><p> 繼承FlyingObject,重寫了step方法,定義了越界的判斷方法,代碼如下:</p><p> package shoots;</p><p> public class Bulle
60、t extends FlyingObject {</p><p> private int speed = 3;</p><p> public Bullet(int x, int y){</p><p> image = ShootGame.bullet;</p><p> width = image.getWidth();<
61、/p><p> height = image.getHeight();</p><p> this.x = x;</p><p> this.y = y;</p><p><b> }</b></p><p> public void step(){</p><p>
62、 y -= speed;</p><p><b> }</b></p><p> public boolean outOfBounds(){</p><p> return y<-this.height;</p><p><b> } </b></p><p>
63、;<b> }</b></p><p> 9.類Hero,表示英雄機</p><p> 繼承FlyingObject類,重寫step方法,實現(xiàn)動態(tài)的飛行;由于會發(fā)射子彈擊中蜜蜂,所以可以獲取雙倍火力或生命值,因此該類含有雙倍子彈的具體數(shù)量,生命值的數(shù)量;另外該類代表的對象會和其他對象相碰撞,所以該類中定義了一個判斷撞擊的方法hit()來實現(xiàn)對撞擊范圍的判斷;還對
64、越界的判斷返回值固定為false,是一個boolean的值,表示永不越界;在該類中含有一個構(gòu)造方法用于初始化數(shù)據(jù);moveTo方法用于處理鼠標(biāo)位置:英雄機的中心點;關(guān)鍵代碼是實現(xiàn)飛機動態(tài)效果和撞擊的判斷:</p><p><b> 圖示:撞擊的判斷</b></p><p> /** 重寫step() */</p><p> public
65、void step(){ //10毫秒走一次</p><p> image = images[index++/10%images.length]; //10*10=100毫秒</p><p><b> }</b></p><p> /** 英雄機與敵人碰撞檢查 this:英雄機 other:敵人 */</p><p
66、> public boolean hit(FlyingObject other){</p><p> int x1=other.x-this.width/2; //x1:蜜蜂的x-1/2英雄機的寬</p><p> int x2=other.x+other.width+this.width/2; //x2:蜜蜂的x+蜜蜂的寬+1/2英雄機的寬</p><p&
67、gt; int y1=other.y-this.height/2; //y1:蜜蜂的y-1/2英雄機的高</p><p> int y2=other.y+other.height+this.height/2;//y2:蜜蜂的y+蜜蜂的高+1/2英雄機的高</p><p> int hx=this.x+this.width/2; //hx:英雄機的x+1/2英雄機的寬</p>
68、;<p> int hy=this.y+this.height/2;//hy:英雄機的y+1/2英雄機的高</p><p> return hx>x1 && hx<x2</p><p><b> &&</b></p><p> hy>y1 && hy<
69、y2; //hx在x1和x2之間并且hy在y1和y2之間,即為撞上了</p><p><b> }</b></p><p><b> }</b></p><p> 在Hero中添加shoot方法,實現(xiàn)發(fā)射子彈,英雄機發(fā)射子彈位置的計算如下圖:</p><p> public Bullet[]
70、 shoot(){</p><p> int xstep = this.width/4;</p><p> int ystep = 20; </p><p> if(doubleFire>0){//雙倍火力</p><p> Bullet[] bullets = new Bullet[2];</p><p&g
71、t; bullets[0] = new Bullet(this.x+xstep,this.y-ystep);</p><p> bullets[1] = new Bullet(this.x+3*xstep,this.y-ystep);</p><p> doubleFire -= 2;//火力減2</p><p> return bullets;</p
72、><p> }else{ //單倍火力</p><p> Bullet[] bullets = new Bullet[1];</p><p> bullets[0] = new Bullet(this.x+2*xstep,this.y-ystep);</p><p> return bullets;</p>
73、<p><b> }</b></p><p><b> }</b></p><p> 10.主類ShootGame</p><p> 由于主類要實現(xiàn)畫板的功能,所以繼承了JPanel,在該類中,使用靜態(tài)常量定義面板的寬和高,并使用ImageIO的read方法加載圖片;界面繪制過程如下:</p&g
74、t;<p> (1).在該類中添加FlyingObject[]類型的屬性flyings,用于存儲射擊游戲的所有敵機和蜜蜂;</p><p> (2).添加Bullet[]類型的屬性bullet,用于存儲射擊游戲中的所有子彈;</p><p> (3).添加Hero類型的屬性hero,表示英雄機;</p><p> (4).添加paintHero
75、方法、paintBullets方法、paintFlyingObject方法,分別用于實現(xiàn)在面板上畫英雄機、子彈、敵機、蜜蜂;并重寫paint方法,在該方法中調(diào)用上述三個方法;</p><p> (5).添加構(gòu)造初始化屬性flyings、bullets以及hero;</p><p> (6).重構(gòu)Airplane類Bee類,設(shè)置固定的x、y坐標(biāo)位置,以便顯示查看。</p>
76、<p> 另外在該類中定義了許多的方法,關(guān)鍵方法的詳細(xì)功能及實現(xiàn)如下:</p><p> 1).shootAction()方法,實現(xiàn)每次調(diào)用20次該方法發(fā)射一次子彈,并將發(fā)射的子彈存儲到bullets數(shù)組中</p><p> 2).bangAction方法和bang方法,這兩個方法實現(xiàn)了子彈與飛行物(蜜蜂或敵機)的碰撞檢測,詳細(xì)過程如下:</p><p&
77、gt; (1).循環(huán)遍歷存儲所有子彈的數(shù)組bullets;</p><p> (2).在上述循環(huán)中,再次使用循環(huán),遍歷存儲所有飛行物的數(shù)組flyings,在該循環(huán)中判斷當(dāng)前子彈是否擊中某個飛行物,如果擊中則退出循環(huán),記錄被擊中的飛行物在flyings數(shù)組中的索引index;</p><p> (3).在flyings數(shù)據(jù)中找到該飛行物,并將其移除;</p><p&
78、gt; (4).判斷該飛行物的類型是Emeny還是Award,如果是Enemy類型,則獲取加分;如果是Award類型,則獲取獎勵</p><p> (5).獲取獎勵的類型,如果是獎勵的類型為DOUBLE_FIRE,則獲得40次雙倍活力;如果獎勵類型是LIFE,則獎勵生命值,</p><p> 3).outOfBoundsAction方法,該方法用于刪除越界飛行物以及子彈,詳細(xì)實現(xiàn)過程
79、如下:</p><p> (1).創(chuàng)建FlyingObject類型的數(shù)組flyingLives,用于存儲所有活著的飛行物(蜜蜂和敵機),即沒有越界的飛行物;</p><p> (2).循環(huán)遍歷存儲所有飛行物的數(shù)組flyings,并判斷每一個飛行物是否越界,將沒有越界的飛行物放入flyingLives數(shù)組中存儲,并記錄不越界飛行物的個數(shù)index;</p><p>
80、; (3).將flyingLives數(shù)組中的元素,復(fù)制到flyings數(shù)組中,并重新指定flyings數(shù)組的長度index;</p><p> (4).刪除子彈與刪除飛行物的過程類似。</p><p> 4).isGameOver方法,該方法用于判斷游戲是否結(jié)束,方法實現(xiàn)的詳細(xì)過程如下:</p><p> (1).循環(huán)遍歷存儲所有飛行物(蜜蜂和敵機)的數(shù)組f
81、lyings</p><p> (2).在循環(huán)中,判斷英雄機是否與飛行物發(fā)生碰撞,如果發(fā)生碰撞,則減生命值、雙倍火力清零,記錄被撞飛行物在flyings數(shù)組中的索引index,該索引默認(rèn)是-1,即沒有發(fā)生碰撞;</p><p> (3).判斷index是否為-1,如果不為-1,將該索引位置的元素從flyings數(shù)組中清除;</p><p> (4).判斷生命值
82、是否小于等于0,并返回比較結(jié)果</p><p> 4.2各功能界面截圖</p><p> 1.Shoots游戲的基本運行界面</p><p><b> (1)初始界面</b></p><p> (2).程序開始運行界面</p><p> 鼠標(biāo)點擊游戲界面,游戲開始;移動鼠標(biāo)可以操作英雄機
83、</p><p> (3).鼠標(biāo)移出游戲界面,出現(xiàn)暫停</p><p> (4).游戲結(jié)束界面</p><p><b> 第五章系統(tǒng)測試</b></p><p><b> 5.1測試的意義</b></p><p> 系統(tǒng)測試時為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程,成功的測試
84、是發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯誤的測試。測試的目的就是希望能以最少的人力和時間發(fā)現(xiàn)潛在的各種錯誤和缺陷。應(yīng)根據(jù)開發(fā)各個階段的需求、設(shè)計等文檔或程序的內(nèi)容結(jié)構(gòu)精心設(shè)計測試用例,并利用這些實例來運行程序,一邊發(fā)現(xiàn)錯誤。系統(tǒng)測試是保證系統(tǒng)質(zhì)量和可靠性的關(guān)鍵步驟,是對系統(tǒng)開發(fā)過程中的系統(tǒng)分析系統(tǒng)設(shè)計和實施的最后復(fù)查。</p><p><b> 5.2測試過程</b></p><p&g
85、t; (1).擬定測試計劃。在指定測試計劃時,要充分考慮整個項目的開發(fā)時間和卡法進度以及一些人為因素和客觀條件等,使得測試計劃是可行的。測試計劃的內(nèi)容主要有測試的內(nèi)容、進度安排、測試所需要的環(huán)境和條件、測試培訓(xùn)安排等。</p><p> (2).編制測試大綱。測試大綱是測試的依據(jù)。它明確詳盡地規(guī)定了在測試中針對系統(tǒng)的每一項功能或特性所必須完成的基本測試項目和測試完成的標(biāo)準(zhǔn)。</p><p&
86、gt; (3).根據(jù)測試大綱設(shè)計和生成測試用例。在設(shè)計測試用例的時候,可綜合利用前面介紹的測試用例設(shè)計技術(shù),生成測試設(shè)計說明文檔,其內(nèi)容主要有被測項目、輸入數(shù)據(jù)、測試過程、預(yù)期輸出結(jié)果等。</p><p> (4).實施測試。測試的實施階段是由一系列的測試周期組成的,。在每個測試周期中,測試人員和開發(fā)人員將依據(jù)預(yù)先編制好的測試大綱和準(zhǔn)備好的測試用例,對被測試軟件或設(shè)備進行完整的測試。</p>&
87、lt;p> (5).生成測試報告。測試完成后,要形成相應(yīng)的測試報告,主要對測試進行概要說明,列出測試的結(jié)論,指出缺陷和錯誤,另外,給出一些建議,如可采用的修改方法,各項修改預(yù)計的工作量及修改的負(fù)責(zé)人員。</p><p><b> 5.3測試結(jié)果</b></p><p> 程序在運行狀態(tài)下,通過實際的操作測試了各個方法實現(xiàn)的功能:鼠標(biāo)的滑動、越界的判斷是否實
88、現(xiàn),子彈是否擊中目標(biāo)、英雄機與飛行物撞擊是否實現(xiàn)。</p><p> 測試結(jié)果:程序運行正常,各個功能都有實現(xiàn),沒出現(xiàn)什么錯誤</p><p><b> 第六章 總結(jié)</b></p><p> 通過這次設(shè)計讓我對java語言有了更深的認(rèn)識,同時深刻的體會到了程序設(shè)計的不易和它的魅力。編程就是把需要做的事情用程序語言描述出來;就像作家用文
89、字描述自己的世界,程序員通過程序語言來描述他眼中的世界,而這次的畢業(yè)設(shè)計讓我明白了我的許多不足:對于語言的學(xué)習(xí)還不到位,忽視了許多基礎(chǔ)性的東西;發(fā)現(xiàn)在以往學(xué)習(xí)過程中犯了眼高手低的毛病,以至于在程序初始階段不斷翻閱相關(guān)書籍,對java語言的各種API的使用和方法的使用不熟練。同時對于這個小游戲還存在許多的缺陷,例如沒有實現(xiàn)玩游戲過程中對游戲的暫停、沒有體現(xiàn)游戲等級難度的操作、游戲的可玩性不強等。</p><p>&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java語言的網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與實現(xiàn)畢業(yè)論文
- 基于socket的網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計
- 論文-基于Socket的網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計.doc
- 基于java的網(wǎng)絡(luò)管理系統(tǒng)開發(fā)與管理
- 開題報告-基于Socket的網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計.doc
- 基于java即時聊天系統(tǒng)設(shè)計與實現(xiàn)-
- 基于socket網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計畢業(yè)論文
- 基于JAVA的聊天系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 基于java技術(shù)的即時聊天系統(tǒng)實現(xiàn)
- 任務(wù)書-基于Socket的網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計.doc
- 畢業(yè)論文---基于cs架構(gòu)的java網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計與實現(xiàn)
- 畢業(yè)論文---基于cs架構(gòu)的java網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計與實現(xiàn)
- 畢業(yè)論文-基于java聊天系統(tǒng)設(shè)計與實現(xiàn)
- 基于java的聊天系統(tǒng)
- 基于java的聊天系統(tǒng)的設(shè)計與實現(xiàn)---畢業(yè)論文
- 基于java的網(wǎng)絡(luò)聊天室
- 【畢業(yè)設(shè)計】基于java的聊天系統(tǒng)的設(shè)計與實現(xiàn)
- java聊天室系統(tǒng)的設(shè)計與實現(xiàn)
- 畢業(yè)論文 基于java即時聊天系統(tǒng)的設(shè)計與實現(xiàn)
- 基于vc的網(wǎng)絡(luò)聊天系統(tǒng)設(shè)計與實現(xiàn)
評論
0/150
提交評論