freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于j2me的java游戲坦克大戰(zhàn)的開(kāi)發(fā)畢業(yè)設(shè)計(jì)論文-免費(fèi)閱讀

  

【正文】 我在一星期內(nèi)寫(xiě)了15000字,經(jīng)過(guò)了幾次的修改,終于完成了現(xiàn)在的程序設(shè)計(jì)。因?yàn)槠涓鱾€(gè)模塊間的聯(lián)系十分緊密,代碼重復(fù)執(zhí)行率高,當(dāng)經(jīng)過(guò)無(wú)數(shù)次的調(diào)試、修改后,能最終看到成品,有無(wú)比自豪的心情。6. 當(dāng)敵人和自己同時(shí)死亡時(shí),仍會(huì)過(guò)關(guān),但Game Over字樣會(huì)出現(xiàn),下一關(guān)坦克不會(huì)出現(xiàn),但可以隱身發(fā)炮。即使是作為操作系統(tǒng)的各種版本的Windows也時(shí)常會(huì)發(fā)生許多類(lèi)型的錯(cuò)誤和漏洞。按鈕由addCommand()加入,并設(shè)置了mandListener()確定按鍵事件發(fā)生后的動(dòng)作。在這個(gè)在刷新屏幕時(shí)(repaint()被調(diào)用)需要執(zhí)行的方法中,設(shè)置了一個(gè)整形的duration,用來(lái)記錄完成一關(guān)所用的時(shí)間。使用它只是為了將記錄的指針向后推移到可以讀出分?jǐn)?shù)字段的位置。在BattleCanvas請(qǐng)求調(diào)入分?jǐn)?shù)統(tǒng)計(jì)的屏幕時(shí),將首先調(diào)用initRs()初始化一些環(huán)境變量。因?yàn)閘ayerManager的remove函數(shù)并不會(huì)真正將層移除。這將針對(duì)四個(gè)不同的方向分別以象素級(jí)檢測(cè)。這幾項(xiàng)參數(shù)在編寫(xiě)時(shí)很容易出錯(cuò)。 setShootCheck(EnemySprite enemySprite[]);setUserSprite(UserSprite userSprite);setEnemySprite(EnemySprite enemySprite)都是將相關(guān)的坦克傳入到子彈類(lèi)里來(lái),以便確認(rèn)來(lái)源或攻擊目標(biāo)。它擁有一個(gè)很重要的變量,isFromEnemy。當(dāng)隨機(jī)發(fā)炮數(shù)減少到0時(shí),就進(jìn)行發(fā)炮的動(dòng)作。collidesInOtherTank()雖與上面的函數(shù)很相似,但仍有一些細(xì)微不同,那就是不需要在檢測(cè)前設(shè)置被檢測(cè)方的矩形區(qū)域。只是需要乘以每秒會(huì)刷新的屏幕的次數(shù)。此函數(shù)由BattleCanvas調(diào)用。這樣的判斷必須排除在考慮范圍外。!collidesEnemy())檢測(cè)是否可以行走。無(wú)論子彈是屬于敵人還是玩家的,它都必須記錄自己的來(lái)源和攻擊的對(duì)象。 玩家坦克的功能屬性 構(gòu)造函數(shù)中需要將坦克方向設(shè)置為向上,因?yàn)閯偝霈F(xiàn)時(shí)就是這樣的狀態(tài)。構(gòu)造函數(shù)中創(chuàng)建了每個(gè)坦克必須擁有的一顆子彈,這些子彈就將只跟隨自己的坦克調(diào)動(dòng)。該三維欄的上方為白色,下方為黑色,就創(chuàng)造了立體感。本程序設(shè)置的兩次坦克出現(xiàn)的最小間隔為2秒。當(dāng)然,如果當(dāng)前已是最后一關(guān),就不會(huì)再轉(zhuǎn)回。由于敵人將依次出現(xiàn)在屏幕上,同時(shí)出現(xiàn)的數(shù)量應(yīng)當(dāng)受到控制。在創(chuàng)建了InputStream類(lèi)的map對(duì)象后,使用read()函數(shù)可將流中的下一個(gè)字節(jié)讀出,并返回此字節(jié)代表的整數(shù)。BattleCanvas包括了LayerManager,這樣所有靜態(tài)和動(dòng)態(tài)的圖象都不需要手動(dòng)刷新,只需要在LayerManager中加入所有的需控制的元素,再統(tǒng)一由LayerManager刷新即可。開(kāi)始敵人數(shù)量小于0嗎?顯示記分畫(huà)面最后一關(guān)或死亡了嗎?進(jìn)入下一關(guān)敵人數(shù)量大于屏幕上的數(shù)量嗎?增加一個(gè)敵人玩家是否死亡顯示GameOver重繪屏幕內(nèi)存回收結(jié)束YNYNNYYN圖34 BattleCanvas類(lèi)主要關(guān)系流程圖 主游戲邏輯及其涉及到的若干類(lèi) BattleCanvas主管著所有類(lèi)之間的協(xié)調(diào),決定何時(shí)死亡,何時(shí)分配新的敵人,及控制敵人出現(xiàn)處的閃光圖標(biāo)、游戲結(jié)束后的動(dòng)態(tài)Gameover字樣。圖43 使用說(shuō)明畫(huà)面startChoice繼承了接口mandListener,這樣,就可以使用高級(jí)界面的Command按鈕。因此,在TankMain的構(gòu)造函數(shù)中分配了StartChoice類(lèi),即選項(xiàng)畫(huà)面的內(nèi)存空間。為了能與各種IDE集成,就像Java2 SDK一樣,混淆器采用命令行參數(shù)的形式,以便可被其調(diào)用。從而不能保護(hù)作者的知識(shí)成果。其方法有:第一,就是盡量縮短命名的長(zhǎng)度。一共可以存儲(chǔ)10條最高分。主要有兩種方法:1. 標(biāo)記法。RecordStore的API采用了時(shí)間戳的概念,其長(zhǎng)整型變量由System的currentTimeMillis()函數(shù)返回決定。微小的存儲(chǔ)空間也限制了它們的結(jié)構(gòu)不能過(guò)于復(fù)雜。其次,子彈之間需要檢測(cè)是否碰撞。這是允許的,但需要對(duì)他們標(biāo)注狀態(tài),即當(dāng)坦克剛出現(xiàn)時(shí)暫時(shí)允許重合,一旦在某個(gè)時(shí)間他們脫離了重合狀態(tài),就不能在允許重合,如果不設(shè)置這樣的判斷,剛出現(xiàn)的坦克將會(huì)因?yàn)槭艿阶枞肋h(yuǎn)不能前進(jìn),坦克將混成一團(tuán)。如果發(fā)生碰撞,則坦克應(yīng)當(dāng)選擇掉轉(zhuǎn)方向,此時(shí),兩輛碰撞的坦克又因?yàn)槠渚匦螀^(qū)域不重合而不符合collidesWith的條件,就可以繼續(xù)正常運(yùn)行了。同時(shí),這樣的機(jī)制也可檢測(cè)到幾個(gè)鍵同時(shí)按下的狀態(tài),從而提供斜向運(yùn)行等相應(yīng)功能。這樣的機(jī)制并不適合某些游戲場(chǎng)合。多塊格可由大塊同時(shí)替換組合而模擬動(dòng)態(tài)的背景,這不需要逐塊替換所有的靜態(tài)圖象格而顯得非常方便。參考點(diǎn)由defineReferencePixel函數(shù)確定未翻轉(zhuǎn)圖片狀態(tài)時(shí)的坐標(biāo)。Sprite類(lèi)是繼承自Layer的用于存儲(chǔ)多楨的基本可視元素。它包括了一系列自動(dòng)獲取了代號(hào)和位置的層,簡(jiǎn)化了各層加入游戲畫(huà)面的過(guò)程,提供了自動(dòng)排序和繪制的能力。PNG格式圖片中包含許多定義其圖片特性的冗余部分(Chunks)。本程序中,操縱用戶(hù)坦克運(yùn)行的按鍵都定義為游戲控制鍵,這樣便能適應(yīng)所有的機(jī)器。在每關(guān)的結(jié)束或死亡后都將載入ScoreScreen類(lèi),統(tǒng)計(jì)當(dāng)前的分?jǐn)?shù)。主程序流程如圖32所示:Logo 畫(huà)面選項(xiàng)畫(huà)面主程序屏幕繪圖本關(guān)記分統(tǒng)計(jì)顯示GameOver顯示歷史記分表About開(kāi)始敵方需要出坦克時(shí),生成坦克初始化參數(shù)死亡時(shí)符合結(jié)束條件時(shí)圖12 本程序的主流程圖程序?yàn)樾枰瓿瑟?dú)立功能的需顯示的模塊設(shè)置了單獨(dú)的類(lèi)。在主程序運(yùn)行的線程中,畫(huà)面刷新將以一定的頻率采用雙緩沖技術(shù)對(duì)屏幕重繪,實(shí)時(shí)反映整個(gè)游戲的進(jìn)行狀態(tài)。除開(kāi)發(fā)過(guò)程中對(duì)結(jié)構(gòu)上的控制、變量的使用、算法的優(yōu)化等優(yōu)化外,還可以使用混淆器(Obfuscator)進(jìn)行程序打包后的優(yōu)化。否則,不僅難于控制和處理過(guò)多的元素,也會(huì)因過(guò)多的大型圖片而不能限制程序的大小,失去手機(jī)上程序的原則和Java的優(yōu)勢(shì)。這需要對(duì)所有的對(duì)象有較好的控制。一個(gè)實(shí)時(shí)運(yùn)行的最終作品,每秒都會(huì)運(yùn)行成千上萬(wàn)行程序,繪圖事件、鍵盤(pán)事件都會(huì)以極高的頻率在后臺(tái)等待響應(yīng),若有絲毫的差別都將很容易導(dǎo)致程序在運(yùn)行不久后可能出現(xiàn)嚴(yán)重錯(cuò)誤,甚至死循環(huán)。Java語(yǔ)言面向?qū)ο蟮膬?yōu)勢(shì)也使得開(kāi)發(fā)游戲變得非常容易。[關(guān)鍵字]:J2ME,手機(jī)游戲,Java,坦克大戰(zhàn)手機(jī)中將Java語(yǔ)言引入,作為一種通用的開(kāi)發(fā)標(biāo)準(zhǔn),并將向市場(chǎng)推廣普及僅僅短短幾年,J2ME仍是一種新型的技術(shù),中文資料除臺(tái)灣出版過(guò)相關(guān)書(shū)籍外,國(guó)內(nèi)相關(guān)介紹資源很有限,國(guó)內(nèi)J2ME開(kāi)發(fā)商也屈指可數(shù),名聲較響的DigitalRed公司也僅成立于1999年。敵人坦克的運(yùn)行算法也需要進(jìn)行適當(dāng)?shù)脑O(shè)置,以免游戲過(guò)于簡(jiǎn)單,單調(diào)。6. 游戲的結(jié)束、開(kāi)始、動(dòng)態(tài)信息畫(huà)面作為構(gòu)成一個(gè)完美程序都是必不可少的重要部分。手機(jī)中由于處理器和內(nèi)存空間、存儲(chǔ)空間都十分有限,其數(shù)據(jù)庫(kù)系統(tǒng)與普通PC大相徑庭。在MIDP規(guī)格中定義了MIDlet的生命周期,以及可以存在的三種狀態(tài),包括Paused、Active以及Destroyed,每一個(gè)MIDlet在任何時(shí)刻只可能處于其中的一個(gè)狀態(tài)。在屏幕重繪的主程序中,將在每次的循環(huán)中判斷若干事件。它決定了游戲何時(shí)該結(jié)束,何時(shí)分配敵人數(shù)量,GameOver字樣的閃現(xiàn)規(guī)則,地圖的繪制及整個(gè)游戲的調(diào)度。Canvas提供了鍵盤(pán)事件、指點(diǎn)桿事件(如果設(shè)備支持),并定義了允許將鍵盤(pán)按鍵映射為游戲控制鍵的函數(shù)。 PNG格式PNG(Portable Network Graphics)格式是MIDlet唯一支持的圖象格式,PNG具體格式由PNG Specification,Version 。 Game包中的新功能 ,為游戲的開(kāi)發(fā)帶來(lái)了極大的便利。改變View Window的位置可以制造出滾動(dòng)屏幕的效果。本程序中的雙方坦克、子彈都由Sprite繼承得到。該類(lèi)使不需要高分辨率的圖象就能創(chuàng)建大幅圖面成為可能。J2ME中并沒(méi)有J2SE中的File類(lèi),獲取外部文件的手段很有限,僅僅在Class類(lèi)中提供了一個(gè)getResourceAsStream函數(shù),將外部文件獲取為輸入流,再由InputStream的繼承類(lèi)讀出。將以位的形式返回鍵盤(pán)上所有鍵的按與釋放的狀態(tài),當(dāng)bit為1時(shí),鍵就是被按下的狀態(tài),為0時(shí)則為釋放狀態(tài)。為了提前預(yù)知碰撞,可以將所有坦克的碰撞范圍設(shè)定為一個(gè)比坦克圖片稍大一些的矩形,此矩形僅在坦克前方比坦克圖形多出一個(gè)象素。本程序設(shè)置為:當(dāng)碰撞到障礙物或邊界時(shí)立即轉(zhuǎn)向,但碰到玩家坦克時(shí)需要有一個(gè)等待的時(shí)間,這個(gè)時(shí)間由碰撞前隨機(jī)取得的在某方向上的持續(xù)行走步數(shù)決定,當(dāng)發(fā)生坦克間碰撞時(shí),此隨機(jī)數(shù)將在下一次循環(huán)前減少為原來(lái)的2/3,這樣就實(shí)現(xiàn)了加快轉(zhuǎn)向的時(shí)間,避免死鎖在一個(gè)方向上靜止的停留過(guò)長(zhǎng)的時(shí)間。子彈使用的是象素級(jí)的碰撞檢測(cè),因?yàn)樽訌椀膱D片形狀不規(guī)則,如果使用矩形碰撞檢測(cè),將有可能在子彈尚未接觸到物體時(shí)就已返回碰撞的真值。對(duì)磚墻將有能力將其擊毀,使之在畫(huà)面上消失;對(duì)水泥鋼筋將不能發(fā)生作用,子彈也不能通過(guò);對(duì)于河流,坦克不可以通過(guò),但子彈可以;對(duì)于草叢,子彈和坦克都可以通過(guò)。同一個(gè)包內(nèi)的MIDlets可以直接互相訪問(wèn)它們的記錄集,不同包內(nèi)也可產(chǎn)生共享,但這需要有包的授權(quán)屬性決定。第一項(xiàng)記錄的ID是1,其后的每個(gè)記錄ID遞增。利用輸入輸出流可以寫(xiě)入及讀取不同數(shù)據(jù)類(lèi)型的數(shù)據(jù),做法是在寫(xiě)入數(shù)據(jù)時(shí)先將一個(gè)DataOutputStream數(shù)據(jù)流對(duì)象串接到一個(gè)ByteArrayOutStream數(shù)據(jù)流對(duì)象,然后再依字段的數(shù)據(jù)類(lèi)型用writeInt()、writeBoolean()等方法寫(xiě)入,最后把ByteArrayOutputStream內(nèi)的元素?cái)?shù)據(jù)寫(xiě)入record中。打印到屏幕上時(shí),記錄ID號(hào)即為排名,因此將顯示三項(xiàng)數(shù)據(jù)。將PNG格式的小分辨率圖象合并在一張大的高分辨率圖象中,由于減少了chunks,將比合并前的總大小減少許多。 混淆器的作用不僅僅是保護(hù)代碼,它也有精簡(jiǎn)編譯后程序大小的作用。)、結(jié)束的函數(shù)。但是當(dāng)顯示的畫(huà)面元素超過(guò)一屏大小時(shí),將自動(dòng)轉(zhuǎn)換為永久狀態(tài)。startChoice繼承了List類(lèi),用于顯示列表選項(xiàng),使用其append()函數(shù)可將選項(xiàng)加入到列表中。程序中建立了另外的兩個(gè)類(lèi),分別表述了敵人坦克和玩家坦克的功能。地圖實(shí)際即為T(mén)iledLayer的一個(gè)對(duì)象,可調(diào)用setCell設(shè)置其具體的圖象格內(nèi)容
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1