![本科課程設(shè)計(jì)報(bào)告(詳細(xì))_第1頁](http://file4.renrendoc.com/view/d94cda02a388aebbd1965c44feb50da1/d94cda02a388aebbd1965c44feb50da11.gif)
![本科課程設(shè)計(jì)報(bào)告(詳細(xì))_第2頁](http://file4.renrendoc.com/view/d94cda02a388aebbd1965c44feb50da1/d94cda02a388aebbd1965c44feb50da12.gif)
![本科課程設(shè)計(jì)報(bào)告(詳細(xì))_第3頁](http://file4.renrendoc.com/view/d94cda02a388aebbd1965c44feb50da1/d94cda02a388aebbd1965c44feb50da13.gif)
![本科課程設(shè)計(jì)報(bào)告(詳細(xì))_第4頁](http://file4.renrendoc.com/view/d94cda02a388aebbd1965c44feb50da1/d94cda02a388aebbd1965c44feb50da14.gif)
![本科課程設(shè)計(jì)報(bào)告(詳細(xì))_第5頁](http://file4.renrendoc.com/view/d94cda02a388aebbd1965c44feb50da1/d94cda02a388aebbd1965c44feb50da15.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、大學(xué)本科課程設(shè)計(jì)題目基于JAVA的橫版2D小游戲姓名學(xué)號(hào)2014221119200025專業(yè)年級(jí)指導(dǎo)教師職稱2016年12月10日大學(xué)本科畢業(yè)論文(設(shè)計(jì))iTOC o 1-5 h z HYPERLINK l bookmark2 1緒論1 HYPERLINK l bookmark4 1.1課程設(shè)計(jì)的目的1 HYPERLINK l bookmark6 1.2課程設(shè)計(jì)的內(nèi)容1 HYPERLINK l bookmark8 1.3本程序的難點(diǎn)1 HYPERLINK l bookmark10 2系統(tǒng)的開發(fā)環(huán)境介紹2 HYPERLINK l bookmark12 JAVA知識(shí)背景簡(jiǎn)介2 HYPERLINK
2、l bookmark14 JAVA語言起源3 HYPERLINK l bookmark16 2.3JAVA技術(shù)簡(jiǎn)介5 HYPERLINK l bookmark18 3需求分析7 HYPERLINK l bookmark20 3.1系統(tǒng)目標(biāo)7 HYPERLINK l bookmark22 3.2主體功能7 HYPERLINK l bookmark24 4系統(tǒng)概要設(shè)計(jì)8 HYPERLINK l bookmark26 4.1系統(tǒng)功能模塊劃分8 HYPERLINK l bookmark28 4.2程序流程框圖8 HYPERLINK l bookmark30 5主要功能實(shí)現(xiàn).101)英雄動(dòng)作合成102)
3、碰撞檢測(cè).103)繪圖.10 HYPERLINK l bookmark32 6調(diào)試報(bào)告10 HYPERLINK l bookmark34 7總結(jié)128附錄12 基于JAVA的橫版2D小游戲1緒論1.1課程設(shè)計(jì)的目的隨著社會(huì)的進(jìn)步,生活節(jié)奏越來越快,很多人發(fā)現(xiàn)自己在忙碌中丟失了許多童年的樂趣。這款橫版2D射擊小游戲與80、90后們童年常玩的街機(jī)小游戲具有相似的畫風(fēng)和游戲玩法,能讓我們找回往日呼朋喚友打街機(jī)的豪情壯志。不僅如此,我們還降低了通關(guān)的難度,讓我們?cè)趯W(xué)習(xí)和工作之余也能較為簡(jiǎn)單地體驗(yàn)通關(guān)的快感。12課程設(shè)計(jì)的內(nèi)容本程序是一個(gè)有趣且富有挑戰(zhàn)性的2D橫版射擊闖關(guān)類游戲。本游戲?yàn)椴噬缑?,有開場(chǎng)
4、動(dòng)畫、主菜單等功能,其中主菜單包含有開始游戲、操作說明、制作者三個(gè)選項(xiàng)。游戲中英雄與冒險(xiǎn)途中所遇到的敵人斗智斗勇,并躲避危險(xiǎn)的地雷,最終擊敗boss并通關(guān)游戲。13本程序的難點(diǎn)本游戲有兩個(gè)難點(diǎn):1)動(dòng)作合成:英雄的動(dòng)作是由多種動(dòng)作合成的,其中動(dòng)作之間的銜接的流暢度非常重要,比如邊跳邊攻擊,邊走邊攻擊等動(dòng)作。2)碰撞檢測(cè):各種游戲元素之間的碰撞檢測(cè),比如一顆子彈怎樣才算打中目標(biāo)。除此之外,游戲中還有很多障礙物,比如:油桶、沙袋、地雷等,有些障礙物被破壞之后會(huì)出現(xiàn)道具。游戲中共有四種不同的道具,英雄吃了不同道具后會(huì)得到不同的BUFF。游戲關(guān)卡還有三種小怪,每種小怪都有不同的武器、血量和動(dòng)作。玩家操
5、作的英雄也有血條、生命數(shù)和子彈數(shù)等狀態(tài)。2系統(tǒng)的開發(fā)環(huán)境介紹2.1JAVA知識(shí)背景簡(jiǎn)介Java自1995誕生,至今已經(jīng)16年歷史。Java的名字的來源:Java是印度尼西亞爪哇島的英文名稱,因盛產(chǎn)咖啡而聞名。Java語言中的許多庫類名稱,多與咖啡有關(guān),如JavaBeans(咖啡豆)、NetBeans(網(wǎng)絡(luò)豆)以及ObjectBeans(對(duì)象豆)等等。SUN和JAVA的標(biāo)識(shí)也正是一杯正冒著熱氣的咖啡。據(jù)JamesGosling回憶,最初這個(gè)為TV機(jī)頂盒所設(shè)計(jì)的語言在Sun內(nèi)部一直稱為Green項(xiàng)目。我們的新語言需要一個(gè)名字。Gosling注意到自己辦公室外一棵茂密的橡樹Oak,這是一種在硅谷很常
6、見的樹。所以他將這個(gè)新語言命名為Oak。但Oak是另外一個(gè)注冊(cè)公司的名字。這個(gè)名字不可能再用了。在命名征集會(huì)上,大家提出了很多名字。最后按大家的評(píng)選次序,將十幾個(gè)名字排列成表,上報(bào)給商標(biāo)律師。排在第一位的是SiIk(絲綢)。盡管大家都喜歡這個(gè)名字,但遭到JamesGosling的堅(jiān)決反對(duì)。排在第二和第三的都沒有通過律師這一關(guān)。只有排在第四位的名字、得到了所有人的認(rèn)可和律師的通過,這個(gè)名字就是Java。10多年來,Java就像爪哇咖啡一樣譽(yù)滿全球,成為實(shí)至名歸的企業(yè)級(jí)應(yīng)用平臺(tái)的霸主。而Java語言也如同咖啡一般醇香動(dòng)人。2.2JAVA語言起源Java語言源于Oak語言,這是SUN公司在一項(xiàng)消費(fèi)性
7、電子產(chǎn)品軟件發(fā)展方案中采用的語言。Oak的設(shè)計(jì)目標(biāo)是用以開發(fā)可靠、緊湊、易于移植的分布式嵌入系統(tǒng)。盡管Oak語言在技術(shù)上頗為成功,但由于商業(yè)上的原因,卻未能在市場(chǎng)的激烈競(jìng)爭(zhēng)中站穩(wěn)腳跟。然而Internet和WWW日新月異的發(fā)展卻為Oak創(chuàng)造了新的生存空間。Oak經(jīng)過改進(jìn),成為一種非常適合網(wǎng)絡(luò)開發(fā)的獨(dú)特語言一一Java,從而脫穎而出,一舉成名。Internet,中譯為“因特網(wǎng)”或“互聯(lián)網(wǎng)”是當(dāng)今最大的國(guó)際性計(jì)算機(jī)互聯(lián)網(wǎng)絡(luò)。它源于美國(guó)國(guó)防部高級(jí)研究計(jì)劃局(AdvancedResearchProjectAgency)的網(wǎng)絡(luò)ARPANET,但發(fā)展到今天,已成為一個(gè)龐大的全球網(wǎng)。顧名思義,這是一個(gè)“網(wǎng)間
8、網(wǎng)”它把各種異構(gòu)網(wǎng)絡(luò)聯(lián)接一起,使位于世界各地、不同網(wǎng)絡(luò)中的人們能夠自由地交換信息。Internet在全球的用戶以千萬計(jì),并在不斷激增;被它直接、間接連通的國(guó)家也越來越多。Internet上的協(xié)議標(biāo)準(zhǔn)也日益受到廣泛支持并在不斷地得到擴(kuò)充。WWW全稱為WorldWideWeb,中譯為“萬維網(wǎng)”“全球網(wǎng)”等,是Internet中最為直觀和富有魅力的資源。它運(yùn)用超文本(Hypertext)技術(shù)將信息組織成文字、聲音、圖像,用戶可以用瀏覽器讀取這些信息。WWW上信息種類繁多,用戶可以根據(jù)自己的需要在任何時(shí)間訪問自己所需的信息。WWW上的信息由頁面組成,頁面中包含超文本鏈接(HypertextLink),
9、把位于不同頁面的相關(guān)內(nèi)容鏈在一起,因而檢索信息非常方便。WWW的發(fā)展也是日新月異,它已不止局限于展示靜止信息,正在不斷增強(qiáng)交互和動(dòng)態(tài)性。許多商家和企業(yè)也把目光瞄準(zhǔn)了WWW,可以預(yù)料,WWW世界將變得越來越豐富多彩。Internet(含WWW)為人們提供了許多有用的信息,然而,Internet上的用戶使用著各種各樣的計(jì)算機(jī),系統(tǒng)軟件和用戶軟件也缺乏兼容性。在這些不兼容的平臺(tái)間交換信息,就像對(duì)許多語言不通的人講話一樣,是非常困難的。而Java與生俱來的特性剛好可以解決這道電腦界的“世紀(jì)難題”它建立的虛擬環(huán)境運(yùn)行標(biāo)準(zhǔn)解決了軟件跨平臺(tái)執(zhí)行的問題,使不同的平臺(tái)都能理解用Java編寫的程序,命名Java語
10、言成了網(wǎng)絡(luò)世界的通用語言。因此,Java在Internet和WWW環(huán)境下如魚得水,迅速風(fēng)靡全球??傊琂ava作為一種獨(dú)特的語言,誕生于Internet和WWW蓬勃發(fā)展的時(shí)期,可謂恰逢其時(shí)。如今的Java與當(dāng)初的Oak語言已不可同日而語。而且,Java技術(shù)的創(chuàng)始者SUN公司采用了一種“開放”策略,將它公諸于眾,更激發(fā)了第三方軟件開發(fā)商的極大熱情,紛紛發(fā)展Java技術(shù)。Java的前景是非常廣闊的。23JAVA技術(shù)簡(jiǎn)介Java語言具有鮮明的特點(diǎn),使它在分布式網(wǎng)絡(luò)應(yīng)用、多平臺(tái)應(yīng)用、圖形用戶界面、Web應(yīng)用、多線程應(yīng)用等軟件的開發(fā)中成為方便高效的工具。下面擇要進(jìn)行介紹。1)開發(fā)和使用簡(jiǎn)單性。Java的
11、語法風(fēng)格非常近似于C+語言,但刪改了C+中的指針、操作符重載等一些易混淆的地方。在內(nèi)存管理方面又提供了垃圾收集。這使程序員可以在實(shí)現(xiàn)程序功能方面投注更多的精力,而無需考慮諸如內(nèi)存釋放等枝節(jié)問題。C+中復(fù)雜而靈活的指針操作往往導(dǎo)致嚴(yán)重的錯(cuò)誤,一向是開發(fā)調(diào)試人員深感棘手的問題,而這在Java中卻不存在。Java虛擬機(jī)還能為程序鏈接本地甚至遠(yuǎn)程的類庫,開發(fā)人員不必關(guān)注其細(xì)節(jié)。2)分布式。Java對(duì)TCP/IP協(xié)議(如HTTP、FTP)的支持使Java程序可以輕易地建立網(wǎng)絡(luò)連接,并通過統(tǒng)一資源定位器URL(UniformResourceLocator)訪問遠(yuǎn)程文件,如同訪問本地文件一樣方便。Java的
12、運(yùn)行時(shí)系統(tǒng)能動(dòng)態(tài)地通過網(wǎng)絡(luò)裝入字節(jié)碼,動(dòng)態(tài)使用新的協(xié)議控制軟件。3)面向?qū)ο笮?。Java對(duì)面向?qū)ο蟮囊笫謬?yán)格,不允許定義獨(dú)立于類的變量和方法(函數(shù))oJava以類和對(duì)象為基礎(chǔ),任何變量和方法都只能包含于某個(gè)類的內(nèi)部。這就使程序的結(jié)構(gòu)更為清晰,為繼承和重用帶來便利。4)安全性。Java將安全性作為第一考慮,設(shè)置了層層防范。首先在編譯時(shí)進(jìn)行語法、語義的檢查。鏈接時(shí),還要再進(jìn)行一遍遍譯級(jí)的類型檢查,消除間接對(duì)象訪問。運(yùn)行時(shí),Java的運(yùn)行時(shí)系統(tǒng)將進(jìn)行字節(jié)碼檢驗(yàn),并記錄對(duì)象的存儲(chǔ)情況,將訪問限制在安全范圍之內(nèi)。本地的類與遠(yuǎn)程的類分開運(yùn)行,阻止遠(yuǎn)程系統(tǒng)對(duì)本地系統(tǒng)的破壞。支持Java的瀏覽器還允許用戶
13、控制Java軟件對(duì)本地系統(tǒng)的訪問。各種措施的綜合使Java程序的安全性得到保證。5)平臺(tái)獨(dú)立性和可移植性。Java的應(yīng)用程序接口(API)和運(yùn)行時(shí)系統(tǒng)是可移植性的關(guān)鍵。Java為支持它的各種操作系統(tǒng)提供了一致的API。在API界面上,所有Java程序?qū)⒍疾灰蕾囉谄脚_(tái)。Java的運(yùn)行時(shí)系統(tǒng)在解釋執(zhí)行程序時(shí),將字節(jié)碼轉(zhuǎn)化為當(dāng)前機(jī)器的機(jī)器碼。程序開發(fā)人員無需考慮使用應(yīng)用時(shí)的硬件條件和操作系統(tǒng)結(jié)構(gòu),用戶只需有Java的運(yùn)行時(shí)系統(tǒng),就可運(yùn)行編譯過的字節(jié)碼。6)多線程。Java提供了內(nèi)置的多線程支持,程序中可以方便地創(chuàng)建多個(gè)線程,各個(gè)線程執(zhí)行不同的工作。這使程序的工作簡(jiǎn)單。比如,用不同的線程分別控制聲音和
14、圖像,可以輕易構(gòu)筑聲像交織的復(fù)雜效果,而編程時(shí)只要分別安排各線程的工作,不必關(guān)心它們的合作,這也大大促進(jìn)了程序的動(dòng)態(tài)交互性和實(shí)時(shí)性。為了控制各線程的動(dòng)作,Java還提供了線程同步機(jī)制。這一機(jī)制的內(nèi)部實(shí)現(xiàn)基于管程。這一機(jī)制使不同線程在訪問共享資源時(shí)能夠相互配合,保證數(shù)據(jù)的一致性,避免出錯(cuò)。3需求分析系統(tǒng)需求分析就是把計(jì)劃期間建立的系統(tǒng)可行性分析求精和細(xì)化,分析各種可能的解法,并且分配給各個(gè)系統(tǒng)元素。需求分析是軟件定義階段中的第一步,是確定系統(tǒng)必須完成哪些工作,也就是對(duì)目標(biāo)系統(tǒng)提出完整、準(zhǔn)確、清晰、具體的要求。3.1系統(tǒng)目標(biāo)程序良好運(yùn)行,并且按照設(shè)計(jì)目的預(yù)想的完成具體功能。3.2主體功能玩家運(yùn)行程
15、序進(jìn)入主菜單,主菜單提供:開始游戲、操作說明、制作小組等三個(gè)選項(xiàng)。游戲開始會(huì)有開場(chǎng)動(dòng)畫,玩家坐在汽車內(nèi)攻擊,到達(dá)指定地點(diǎn)后自動(dòng)跳下。玩家可以通過w和s鍵選擇主菜單三個(gè)選項(xiàng),回車鍵選中。玩家選擇開始游戲后,通過ASD三個(gè)鍵控制英雄前進(jìn)后退下蹲等動(dòng)作,通過JKL鍵完成跳躍換槍射擊等英雄動(dòng)作。途中會(huì)有士兵地雷等,敵人。最終boss為坦克上的指揮官,會(huì)召喚摩托車隊(duì)玩家進(jìn)行攻擊。游戲過程中會(huì)統(tǒng)計(jì)玩家獲得分?jǐn)?shù),最終顯示在勝利畫面上。玩家擊敗boss通關(guān)整個(gè)地圖,獲得評(píng)分。玩家按Esc鍵返回主菜單。4系統(tǒng)概要設(shè)計(jì)系統(tǒng)設(shè)計(jì)是系統(tǒng)過程中重要的一個(gè)環(huán)節(jié),也關(guān)乎到系統(tǒng)的實(shí)用性,它的具體任務(wù)是依據(jù)系統(tǒng)分析工作得到的系
16、統(tǒng)功能和信息需求設(shè)計(jì)系統(tǒng)的處理流程,確定系統(tǒng)的應(yīng)用軟件結(jié)構(gòu),并對(duì)系統(tǒng)應(yīng)用軟件結(jié)構(gòu)的每一功能模塊給出其實(shí)現(xiàn)設(shè)計(jì)。4.1系統(tǒng)功能模塊劃分以下是各功能模塊的劃分:game類(主類)加載主菜單,碰撞檢測(cè),加載返回詢問框。hero類初始化英雄,加載英雄圖片,英雄動(dòng)作的組合。enemy類初始化敵人,加載敵人圖片status類加載圖片,繪制游戲狀態(tài)界面其他類播放游戲背景音樂,加載地圖,地雷,摩托車,boss等,結(jié)束游戲。4.2程序流程框圖流程圖如圖4.1所示:開始加載程序主菜單(Menu類)select=l?Esc_flag=0?結(jié)束加載退出詢問窗口圖4.15主要功能實(shí)現(xiàn)主要功能如下:1)英雄動(dòng)作合成:實(shí)現(xiàn)
17、方案:先把英雄動(dòng)作分拆成若干種,遇到不情景時(shí)再按照情景進(jìn)行組合。代碼見報(bào)告附錄(1)2)碰撞檢測(cè):實(shí)現(xiàn)方案:先把游戲元素按照大小在碰撞檢測(cè)數(shù)組_map中寫入相應(yīng)數(shù)值,然后再在_map數(shù)組中對(duì)每個(gè)元素進(jìn)行碰撞檢測(cè)。代碼見附錄(2)3)繪圖:實(shí)現(xiàn)方案:用了雙緩沖繪圖,可以防止閃爍,然后把游戲元素逐個(gè)加上去。代碼見附錄(3)6調(diào)試報(bào)告調(diào)試報(bào)告如表6.1所示:表6.1遇到的問題原因解決方法用if語句寫的碰撞檢測(cè)位置不對(duì)。if語句只能檢測(cè)某些點(diǎn)的與某些點(diǎn)的碰撞,而且代碼復(fù)雜度咼。把游戲兀素寫入一個(gè)碰撞檢測(cè)數(shù)組_map中,再用來_map檢測(cè)碰撞。碰撞檢測(cè)數(shù)組map里面全是0,游戲元素沒有寫入。游戲元素是在
18、repaint階段與入map數(shù)組的,而碰撞檢測(cè)在每個(gè)類中添加一個(gè)drawinmap方法,在碰撞檢是在repaint之前,所以_map里面全是0。測(cè)之前調(diào)用它把游戲兀素寫入map數(shù)組。游戲代碼的控制和繪圖混起來了,不利于后面的修改和維護(hù)。一開始寫的時(shí)候沒有考慮周全。把控制和繪圖分開,對(duì)于每個(gè)動(dòng)作:動(dòng)作本身對(duì)游戲元素坐標(biāo)(x,y)的影響;與動(dòng)作相應(yīng)的繪圖方法;二者分開寫。跳躍時(shí)調(diào)用的是set_jump_time()方法,不太安全跳躍動(dòng)作沒有分解好。把跳躍分解為jump和fall兩個(gè)階段,然后對(duì)每個(gè)階段都有一個(gè)初始化方法和控制方法,比如jump有init_jump()方法和jump()方法。英雄跳上
19、障礙物后下不來沒有實(shí)時(shí)檢測(cè)英雄是否在空中添加一個(gè)檢測(cè)英雄是否在空中的方法is_in_air()。實(shí)時(shí)調(diào)用。向后飛的子彈碰撞檢測(cè)有誤差向后飛的子彈的彈頭在后端,和向前飛的子彈不一樣。修改Bullet類的get_pos()方法,按照子彈的類型和方向返回位置。英雄踩雷時(shí)應(yīng)該掉2滴血,但卻把血全掉光了。重復(fù)檢測(cè)到同一個(gè)雷,重復(fù)掉血。踩到雷后,給雷作一個(gè)標(biāo)記。往左走時(shí),英雄腿部和身體不對(duì)齊。往左走和往右走不一樣,不能同樣處理。往右走時(shí)調(diào)整一下英雄身體的位置。英雄跳躍會(huì)穿過障礙物。沒有向卜碰撞檢測(cè)。加一個(gè)向下碰撞檢測(cè)。英雄穿過敵人時(shí)會(huì)向下掉一點(diǎn)點(diǎn)。敵人會(huì)把map數(shù)組里面的地面的數(shù)據(jù)覆蓋掉。把敵人位置往上調(diào)
20、一點(diǎn)點(diǎn)。從障礙物下來后,英雄的槍的位置不太準(zhǔn)。fall_time沒有及時(shí)清零。碰到地面后把fall_time清零_map數(shù)組有時(shí)會(huì)越界。在使用_map數(shù)組前先判斷是否越界敵人死后他打出的子彈也消失了。加載敵人子彈前先判斷了敵人是否存在。把加載敵人子彈前,對(duì)敵人存在的判斷去掉。第一種障礙物第一階可以穿過去。英雄的碰撞只用了中點(diǎn)檢測(cè)把中點(diǎn)檢測(cè)改為線檢測(cè),用一個(gè)for循環(huán)從頭掃到腳。人物移動(dòng)得很快不小心把敵人移動(dòng)的if語句寫成了while語句,所以一直在跑。把敵人移動(dòng)的while改成if。7總結(jié)該程序基本上達(dá)到了設(shè)計(jì)預(yù)期,玩家可較為完整的體驗(yàn)該游戲,但是仍存在關(guān)卡過短,游戲節(jié)奏太快等缺點(diǎn)。在設(shè)計(jì)的過
21、程中也遇到了許多問題,但是在老師和同學(xué)的幫助下基本解決。通過這次課程設(shè)計(jì),我對(duì)JAVA這門編程語言的理解進(jìn)一步加深,對(duì)于不了解的知識(shí),又有了新的學(xué)習(xí)。同時(shí)在此向幫助過我的老師和同學(xué)表示感謝!1)/初始化跳躍的函數(shù)publicvoidinit_jump()action=2;jump_time=24;v=30;on_land=0;/跳躍控制函數(shù)publicvoidjump()action=2;/保證在空中可以移動(dòng)if(jump_time+1)%4=0)y-=v;v-=5;/初始化下落的函數(shù)publicvoidinit_fall()action=3;fall_time=24;v=0;on_land=
22、0;/下落控制函數(shù)publicvoidfall()action=3;/保證在空中可以移動(dòng)if(fall_time+1)%4=0)if(v=0;-i)if(Game.is_in_map(i,hero_pos.x/3)&Game._mapihero_pos.x/3/100!=1)/改break;y=3*i-45-hight;action=0;fall_time=0;on_land=1;if(fall_time=0)if(down_blocked=0)y+=v;elseinti,height=stand0.getHeight(this),width=bodygun_typebody_point/N0
23、.getWidth(this);Pointhero_pos=getDown_pos();for(i=heropos.y/3;i=0;-i)if(Game.isinmap(i,(x+width/2)/3)&Game.mapi(x+width/2)/3/100!=1)/改y=break;3*i-45-height;action=0;fall_time=0;on_land=1;/控制移動(dòng)的函數(shù)publicvoidrun()action=1;if(direction=1)if(front_blocked=0&(Execute.getDistance()=6300&xGameFrame.DEFAULT_
24、WIDTH-305|x0)x-=3;/獲取槍位置的函數(shù)publicPointget_gun_pos()intattack_width=attackgun_type(ATTACK_TZME-attack_time)/N0.getWidth(this),body_width=bodygun_typebody_point/N0.getWidth(this),squat_hight=squat_stand0.getHeight(this),gun_x=x,gun_y=y+15;if(direction=1)gun_x+=attack_width;elsegun_x+=body_width-attack
25、_width;if(jump_time0|fall_time0)gun_y-=10;if(action=0&squat=1)gun_y+=squat_hight/2;Pointp=newPoint(gun_x,gun_y);returnp;/射擊函數(shù)publicvoidshoot()/時(shí)鐘延遲attack_time=ATTACK_TIME;if(Execute.getClk()=0)inti;/統(tǒng)計(jì)現(xiàn)在存在的子彈music.shootsound();for(i=0;iBULLET_X_NUM;+i)的個(gè)數(shù)if(!bulleti.is_exist()break;if(i0)gun_pos=get
26、_gun_pos();bulleti.set_bullet(gun_pos.x,gun_pos.y,1,4,direction);-shell_num;Execute.setClk(5);/時(shí)鐘延遲/切換槍的函數(shù)publicvoidshift_gun()if(Execute.getClk()=0)/時(shí)鐘延遲if(gun_type=0)gun_type=1;elsegun_type=0;Execute.setClk(5);/時(shí)鐘延遲/重生的函數(shù)publicvoidreborn()-life;hp=6;shell_num=shell_num10?shell_num:10;on_land=1;y=j
27、ump_time=attack_time=0;/初始化英雄死亡的函數(shù)publicvoidinit_die()die_time=DIE_TIME;/檢測(cè)英雄是否活著的函數(shù)publicbooleanis_alive()if(hp0)returntrue;returnfalse;/檢測(cè)是否在空中的函數(shù)publicbooleanis_in_air()/這個(gè)名字不女子/intwidth=body00.getWidth(this);Pointhero_pos=getDown_pos();if(on_land=1&Game.is_in_map(hero_pos.y/3+1,hero_pos.x/3)&Gam
28、e._maphero_pos.y/3+1hero_pos.x/3/100!=1)returntrue;returnfalse;/檢測(cè)是否在地上的函數(shù)publicbooleanis_on_land()if(on_land=0)returnfalse;returntrue;/檢測(cè)是否在下落的函數(shù)publicbooleanis_fall()if(jump_time=0&on_land=0)returntrue;returnfalse;(2)/檢測(cè)是否碰撞的函數(shù)publicstaticintis_collided(Pointp)intx=p.x/3,y=p.y/3;if(x=0&x=0&y134)re
29、turnGame._mapyx/100;return0;/游戲碰撞檢測(cè)函數(shù)privatevoidcollision_detection()/車子彈碰撞檢測(cè)for(inti=O;iVehicle.BULLET_MAX_NUM;+i)Pointbullet_pos=vehicle.bulleti.get_pos();if(vehicle.bulleti.is_exist()intid,obj=is_collided(bullet_pos);switch(obj)case0:break;case1:id=Game._mapbullet_pos.y/3bullet_pos.x/3%100;barrie
30、rid.setTough(barrierid.getTough()-1);vehicle.bulleti.setFlag(O);break;case3:id=Game._mapbullet_pos.y/3bullet_pos.x/3%100;hero.setScore(hero.getScore()+enemyid.getType()*1000);enemyid.setHp(enemyid.getHp()-1);intn=ra.nextInt(4)+1;music.enemydiesound(n);vehicle.bulleti.setFlag(O);break;/英雄的子彈碰撞檢測(cè)for(i
31、nti=0;i0)switch(enemyi.getType()case1:case2:barrierid.setTough(barrierid.getTough()-l);break;case3:barrierid.setTough(barrierid.getTough()-2);break;enemyi.bulletj.setFlag(O);break;case2:if(hero.getHp()0)switch(enemyi.getType()case1:case2:hero.setHp(hero.getHp()-1);break;case3:hero.setHp(hero.getHp()
32、-2);break;if(hero.getHp()=0)hero.init_die();enemyi.bulletj.setFlag(O);break;/坦克子彈碰撞檢測(cè)for(inti=O;ivTank.BULLET_MAX_NUM;+i)if(tank.bulleti.is_exist()Pointbullet_pos=tank.bulleti.get_pos();intid,obj=is_collided(bullet_pos);switch(obj)case0:break;case1:id=Game._mapbullet_pos.y/3bullet_pos.x/3%100;if(bar
33、rierid.getTough()0)barrierid.setTough(barrierid.getTough()-3);tank.bulleti.setFlag(O);break;case2:if(hero.getHp()0)hero.setHp(hero.getHp()-3);if(hero.getHp()=0)hero.init_die();tank.bulleti.setFlag(O);break;車碰撞檢測(cè)if(hero.getIn_vehicle()=l)Pointvehicle_pos=vehicle.get_vehicle_pos();intid,obj=is_collide
34、d(vehicle_pos);switch(obj)case0:break;case1:id=Game._mapvehicle_pos.y/3vehicle_pos.x/3%100;barrierid.setTough(0);break;case3:id=Game._mapvehicle_pos.y/3vehicle_pos.x/3%100;enemyid.setHp(O);intn=ra.nextInt(4)+1;music.enemydiesound(n);break;英雄碰撞檢測(cè)if(hero.getIn_vehicle()=0)前面碰撞檢測(cè)intid,obj,blocked=0,hig
35、ht=78;Pointhero_pos=hero.getFront_pos();for(inti=hero_pos.y/3;iv(hero_pos.y+hight)/3;+i)if(Game.is_in_map(i,hero_pos.x/3)id=Game._mapihero_pos.x/3%100;obj=is_collided(newPoint(hero_pos.x,i*3);switch(obj)case1:blocked=1;break;case4:if(mineid.is_exist()hero.setHp(hero.getHp()-2);if(hero.getHp()=0)hero
36、.init_die();mineid.init_bang();break;case5:hero.setScore(hero.getScore()+barrierid.getGift()*5000);switch(barrierid.getGift()case1:hero.setHp(hero.getHp()+1);break;case2:hero.setHp(hero.getHp()+2);break;case3:hero.setShell_num(hero.getShell_num()+1);break;case4:hero.setLife(hero.getLife()+1);barrier
37、id.setGift(0);break;&case6:if(hero.is_alive()tank.motoid.getAttack()=1)hero.setHp(hero.getHp()-3);if(hero.getHp()=0)hero.init_die();tank.motoid.setAttack(0);break;hero.setBlocked(front,blocked);后面碰撞檢測(cè)blocked=0;hero_pos=hero.getBack_pos();for(inti=hero_pos.y/3;iv(hero_pos.y+hight)/3;+i)if(Game.is_in_
38、map(i,hero_pos.x/3)id=Game._mapihero_pos.x/3%100;obj=is_collided(newPoint(hero_pos.x,i*3);switch(obj)case1:blocked=1;break;case4:if(mineid.is_exist()hero.setHp(hero.getHp()-2);if(hero.getHp()=0)hero.init_die();System.out.println(hero.getHp();mineid.init_bang();break;case5:hero.setScore(hero.getScore
39、()+barrierid.getGift()*5000);switch(barrierid.getGift()case1:hero.setHp(hero.getHp()+1);break;case2:hero.setHp(hero.getHp()+2);break;case3:hero.setShell_num(hero.getShell_num()+1);break;case4:hero.setLife(hero.getLife()+1);barrierid.setGift(0);break;&case6:if(hero.is_alive()tank.motoid.getAttack()=l
40、)hero.setHp(hero.getHp()-3);if(hero.getHp()=0)hero.init_die();tank.motoid.setAttack(0);break;hero.setBlocked(back,blocked);下面碰撞檢測(cè)blocked=0;hero_pos=hero.getDown_pos();obj=is_collided(hero_pos);if(obj=1IIhero_pos.y324)blocked=1;hero.setBlocked(down,blocked);publicvoidupdate(Graphicsg)if(iBuffer=null)iBuffer=createImage(this.getSize().width,this.getSize().height);gBuffer=iBuffer.getGraphics();if(logo_time0)logo.draw(gBuffer);-logo_time;elseif(gameover_time0)gameover.draw(gBuffer);-gameover_time;if(gameover_time=0)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新《行政處罰法》知識(shí)學(xué)習(xí)考試題庫500題(含答案)
- 2025年福建省職教高考《語文》考前沖刺模擬試題庫(附答案)
- 2025年桂林生命與健康職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- 10kV配電站房工程的成本控制與優(yōu)化策略
- 國(guó)標(biāo)柴油購銷合同
- 居間合同委托書范文年
- 煙草產(chǎn)品購銷合同
- 注冊(cè)規(guī)劃師聘用合同
- 土地平整工程承包合同
- 正規(guī)設(shè)備買賣交易合同
- 2024年北京東城社區(qū)工作者招聘筆試真題
- 一年級(jí)數(shù)學(xué)個(gè)位數(shù)加減法口算練習(xí)題大全(連加法-連減法-連加減法直接打印版)
- 五年級(jí)上冊(cè)數(shù)學(xué)試題試卷(8篇)
- 五年級(jí)上冊(cè)小數(shù)遞等式計(jì)算200道及答案
- 冀教版五年級(jí)下冊(cè)數(shù)學(xué)全冊(cè)教學(xué)課件
- T-SDASTC 006-2023 眩暈病中西醫(yī)結(jié)合基層診療指南
- 安全個(gè)人承諾書范文個(gè)人承諾書范文
- 遠(yuǎn)視儲(chǔ)備培訓(xùn)課件
- 嶺南膏方規(guī)范
- 【可行性報(bào)告】2023年虛擬演播室制作設(shè)備相關(guān)行業(yè)可行性分析報(bào)告
- 世界老年人跌倒的預(yù)防和管理指南解讀及跌倒應(yīng)急處理-
評(píng)論
0/150
提交評(píng)論