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

正文內(nèi)容

基于j2me的java游戲坦克大戰(zhàn)的開(kāi)發(fā)畢業(yè)設(shè)計(jì)畢業(yè)設(shè)計(jì)論文-文庫(kù)吧資料

2025-06-24 14:48本頁(yè)面
  

【正文】 試隨時(shí)間變化的調(diào)試器。 模擬器的相關(guān)調(diào)試 IDE整合的Wireless Tool Kit提供了許多在運(yùn)行時(shí)監(jiān)視運(yùn)行狀態(tài)的工具。為了能與各種IDE集成,就像Java2 SDK一樣,混淆器采用命令行參數(shù)的形式,以便可被其調(diào)用。由于以上介紹的減少變量、函數(shù)的命名長(zhǎng)度的關(guān)系?;煜鲗⒋a中的所有變量、函數(shù)、類的名稱變?yōu)楹?jiǎn)短的英文字母代號(hào),如果缺乏相應(yīng)的函數(shù)名指示和程序注釋,即使被反編譯,也將難以閱讀。如果不加以施行有效的措施,將造成嚴(yán)重的后果。從而不能保護(hù)作者的知識(shí)成果。 混淆器(Obfuscator)的使用Java 語(yǔ)言并沒(méi)有完全編譯成二進(jìn)制可執(zhí)行文件,需要虛擬機(jī)來(lái)執(zhí)行。第三是減少圖形數(shù)據(jù)的大小。所有這些可以借助混淆器來(lái)幫助實(shí)現(xiàn)。其方法有:第一,就是盡量縮短命名的長(zhǎng)度。 內(nèi)存使用的最佳化通常在MIDP應(yīng)用程序的手機(jī)執(zhí)行環(huán)境中,所牽涉的內(nèi)存有下列三種:﹡應(yīng)用程序存儲(chǔ)內(nèi)存﹡RecordStore存儲(chǔ)內(nèi)存﹡執(zhí)行時(shí)期內(nèi)存(Java Heap)其中前兩種是持久性的內(nèi)存,關(guān)閉電源后還能保持?jǐn)?shù)據(jù)的正確性,通常這兩種內(nèi)存所能存儲(chǔ)的容量是合并計(jì)算的,這個(gè)上限對(duì)每種手機(jī)都不一樣,大部分在一兩百KB內(nèi)。因?yàn)槊總€(gè)記錄包括用戶名和分?jǐn)?shù),因此需要使用多字段的方式編入。在輸入記錄前,要求用戶在TextField框中寫入他自己的名字。一共可以存儲(chǔ)10條最高分。反之若要讀取數(shù)據(jù),則先要串接一個(gè)DataInputStream對(duì)象和ByteArrayInputStream,依字段的數(shù)據(jù)類用readInt()、readBoolean()等方法讀取。方法一中所有的字段只能以字符串的形式存儲(chǔ),要對(duì)這些字段作進(jìn)一步的處理非常麻煩。符號(hào)不能和字段內(nèi)的數(shù)據(jù)相同的字符。主要有兩種方法:1. 標(biāo)記法。Record是以字節(jié)為基本單位來(lái)存放的,所以所有要寫入record的數(shù)據(jù)都必須先將其轉(zhuǎn)為字節(jié)才能寫入,從record所讀出來(lái)的數(shù)據(jù)也是字節(jié),必須將其轉(zhuǎn)換為原先寫入時(shí)的數(shù)據(jù)類型才有意義。區(qū)別記錄的唯一標(biāo)記是他們的ID值,作為記錄集的主鍵。記錄是字節(jié)數(shù)組。RecordStore的API采用了時(shí)間戳的概念,其長(zhǎng)整型變量由System的currentTimeMillis()函數(shù)返回決定。訪問(wèn)模式會(huì)在準(zhǔn)備提供共享的RecordStore被建立時(shí)被創(chuàng)建。當(dāng)MIDlet包從平臺(tái)中被移除后,所有與該包有關(guān)的的記錄集都同時(shí)會(huì)被移除。RMS包中包括RecordStore類。微小的存儲(chǔ)空間也限制了它們的結(jié)構(gòu)不能過(guò)于復(fù)雜。 RMS數(shù)據(jù)庫(kù)系統(tǒng)MIDP為MIDlets提供了一種永久存儲(chǔ)和后來(lái)讀出數(shù)據(jù)的數(shù)據(jù)庫(kù)解決方案,被稱為Record Managerment System(RMS),是一種類簡(jiǎn)單的基于記錄的數(shù)據(jù)庫(kù)。子彈對(duì)不同障礙物將有不同的反映。玩家的子彈需要在每一步檢測(cè)所有敵人的子彈的運(yùn)行狀態(tài)。其次,子彈之間需要檢測(cè)是否碰撞。分為兩種情況,如果此子彈來(lái)自于敵方,將只檢測(cè)玩家坦克,因?yàn)閿撤街g的子彈必須允許可以透明的穿過(guò),以保證不會(huì)在敵人之間發(fā)生子彈的消減。在其出現(xiàn)在屏幕上的運(yùn)行周期中,每一步都需要循環(huán)檢測(cè)以下條件:是否與某坦克發(fā)生了碰撞,即擊中了這輛坦克。 子彈的運(yùn)行和控制每一個(gè)坦克都有他自己的一顆子彈,這顆子彈在任何一輛坦克被構(gòu)造時(shí)就一直存在,直至此坦克生命的結(jié)束,子彈的再次只是將屏幕上暫時(shí)掩蓋的圖象重新置于坦克炮筒才恰當(dāng)位置,并使其顯示出來(lái),這與現(xiàn)實(shí)中每個(gè)子彈都是單獨(dú)的個(gè)體有所不同。這是允許的,但需要對(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ā)炮間隔和轉(zhuǎn)后的具體方向都由隨機(jī)數(shù)決定。如果一定發(fā)生轉(zhuǎn)向,試想,當(dāng)敵方碰到玩家時(shí),如果它立即轉(zhuǎn)向,將不會(huì)對(duì)玩家發(fā)射射向他的子彈,就不構(gòu)成任何威脅,當(dāng)然,也不能永遠(yuǎn)不轉(zhuǎn)向。敵人可以自動(dòng)行走,但是應(yīng)當(dāng)在以下適當(dāng)?shù)那闆r下轉(zhuǎn)向:首先是是否超出界面的邊界,其次是是否與地圖障礙物發(fā)生了碰撞,再次是是否與用戶坦克發(fā)生了碰撞。如果發(fā)生碰撞,則坦克應(yīng)當(dāng)選擇掉轉(zhuǎn)方向,此時(shí),兩輛碰撞的坦克又因?yàn)槠渚匦螀^(qū)域不重合而不符合collidesWith的條件,就可以繼續(xù)正常運(yùn)行了。在多出的11個(gè)象素中,按照每個(gè)象素依次檢查此象素是否于外界發(fā)生碰撞,如果不是按照象素檢查,則當(dāng)坦克與障礙物錯(cuò)位并同時(shí)與兩種物體接觸時(shí)將有可能忽略檢測(cè)其中的一樣物體。因?yàn)槿绻l(fā)生碰撞,collidesWith成立,則兩輛坦克已經(jīng)發(fā)生了圖象重合,違反了規(guī)則,甚至若再進(jìn)行collidesWith判斷的話,其結(jié)果將永為真。Sprite類中提供了collidesWith函數(shù),用于判斷是否與某個(gè)TiledLayer、Sprite、Image的對(duì)象有圖象上的重合(即游戲中的碰撞)。同時(shí),這樣的機(jī)制也可檢測(cè)到幾個(gè)鍵同時(shí)按下的狀態(tài),從而提供斜向運(yùn)行等相應(yīng)功能。只需要此一個(gè)函數(shù)的返回值就可以返回所有鍵的狀態(tài)。 GameCanvas提供getKeyStates函數(shù)可獲取當(dāng)前鍵盤上的信息。同時(shí),事件的執(zhí)行周期也并不一定適合游戲的場(chǎng)合,也許需要更高頻率執(zhí)行的按鍵卻只能在指定的周期內(nèi)規(guī)律的響應(yīng)。這樣的機(jī)制并不適合某些游戲場(chǎng)合。 坦克的控制和敵方的智能運(yùn)行 。繪制動(dòng)畫時(shí)經(jīng)常需要不斷地更新畫面,而更新畫面的操作就是先將屏幕以fillRect()的方式清除,再將下一張圖片畫在屏幕上,然而反復(fù)的清除及重繪會(huì)造成屏幕的閃爍現(xiàn)象(flicker),因此使用雙重緩沖的好處就是在背景進(jìn)行這個(gè)清除及重繪的操作,再將完成的繪圖拷貝到屏幕上,由于用戶看不到清除的操作,因此就不會(huì)出現(xiàn)閃爍的現(xiàn)象了。Image類提供了一個(gè)建立背景的靜態(tài)方法createImage(int width, int height),再利用getGraphics()方法取得屬于這個(gè)背景的Graphics對(duì)象,所進(jìn)行的繪圖操作都會(huì)作用在背景上,等到全部的繪圖操作完成后,再調(diào)用drawImage()方法將背景的數(shù)據(jù)復(fù)制到實(shí)際顯示的屏幕上。 有關(guān)繪圖的一些技術(shù),進(jìn)行游戲繪圖一般需要手動(dòng)編程使用雙緩沖。如果整塊地圖均由繪圖產(chǎn)生,將導(dǎo)致體積迅速增加,且對(duì)坦克與障礙物的碰撞也難以檢測(cè)。每塊障礙物都有其響應(yīng)的代號(hào),其中,用戶需保護(hù)的總部因?yàn)轶w積稍大,使用了四塊圖象格顯示。多塊格可由大塊同時(shí)替換組合而模擬動(dòng)態(tài)的背景,這不需要逐塊替換所有的靜態(tài)圖象格而顯得非常方便。這項(xiàng)技術(shù)通常應(yīng)用在2D游戲平臺(tái)的滾動(dòng)背景的繪圖。TiledLayer是有一組圖象格元素(grid of cells)組成的整塊虛擬圖象。本程序中的坦克的參考點(diǎn)定義在圖片正中,以便簡(jiǎn)便的實(shí)現(xiàn)轉(zhuǎn)向等功能。參考點(diǎn)由defineReferencePixel函數(shù)確定未翻轉(zhuǎn)圖片狀態(tài)時(shí)的坐標(biāo)。在有些情況下,控制主角的翻轉(zhuǎn),尤其是多幅圖片配合顯示的過(guò)程,如果將多圖的共享定位點(diǎn)設(shè)置在通常的左上角,將很不容易控制,因?yàn)樵S多翻轉(zhuǎn)都是以其他點(diǎn)為參考電的(比如,中心點(diǎn))。每個(gè)小圖按照其排列順序有相應(yīng)的序號(hào),在程序中調(diào)用其序號(hào),就可以繪制出相應(yīng)的圖片。圖片可翻轉(zhuǎn)、顛倒、由一個(gè)主角圖片就可以方便的得到所有方向的顯示狀態(tài),相比原先只能使用Canvas繪圖,需要將所有方向的主角圖象都繪制在png圖象中簡(jiǎn)化了許多。Sprite類是繼承自Layer的用于存儲(chǔ)多楨的基本可視元素。本程序中所有的地圖、坦克都采用LM控制,敵方坦克的生成由附加一個(gè)EnemySprite對(duì)象得到。LM中的View Window控制著與LM相對(duì)坐標(biāo)的可視區(qū)域。層的序號(hào)相當(dāng)于坐標(biāo)的Z軸,0層表示最接近用戶視覺(jué),層數(shù)越高,離用戶越遠(yuǎn)。它包括了一系列自動(dòng)獲取了代號(hào)和位置的層,簡(jiǎn)化了各層加入游戲畫面的過(guò)程,提供了自動(dòng)排序和繪制的能力。地圖繪制、主角的動(dòng)態(tài)顯示、按鍵的檢測(cè)、圖層的控制等游戲?qū)俚奶匦远嫉玫搅嗽谝苿?dòng)設(shè)備上最大的發(fā)揮。實(shí)現(xiàn)了方便的管理和程序體積的精簡(jiǎn)。使用Image類中的createImage函數(shù)可從整圖中分割出所需要的元素。PNG格式圖片中包含許多定義其圖片特性的冗余部分(Chunks)。PNG格式提供透明背景的圖象,這對(duì)繪制游戲畫面和被操縱主角極有幫助。其對(duì)象會(huì)被傳給Canvas的paint()函數(shù),以便最終顯示。它具有24位深度色彩的繪制能力,以三原色分別各占一個(gè)字節(jié)表示其顏色。本程序中,操縱用戶坦克運(yùn)行的按鍵都定義為游戲控制鍵,這樣便能適應(yīng)所有的機(jī)器。鍵盤事件由鍵代碼指定,但這樣控制游戲會(huì)導(dǎo)致缺乏通用性,并不是每個(gè)設(shè)備的鍵盤布局都適合游戲的操作。從程序開(kāi)發(fā)的觀點(diǎn)看,Canvas類可與高級(jí)Screen類交互,程序可在需要時(shí)在Canvas中摻入高級(jí)類的組件。載入過(guò)程中將對(duì)所得分?jǐn)?shù)與以往歷史比較,放置到合適的位置中,形成排序。在每關(guān)的結(jié)束或死亡后都將載入ScoreScreen類,統(tǒng)計(jì)當(dāng)前的分?jǐn)?shù)。圖33 與主程序相關(guān)的類的UML視圖圖33是程序中類之間的UML分析圖。在選擇開(kāi)始后,將運(yùn)行BattleCanvas類中的總流程控制。載入程序后首先啟動(dòng)的是程序介紹的信息畫面。主程序流程如圖32所示:Logo 畫面選項(xiàng)畫面主程序屏幕繪圖本關(guān)記分統(tǒng)計(jì)顯示GameOver顯示歷史記分表About開(kāi)始敵方需要出坦克時(shí),生成坦克初始化參數(shù)死亡時(shí)符合結(jié)束條件時(shí)圖32 本程序的主流程圖程序?yàn)樾枰瓿瑟?dú)立功能的需顯示的模塊設(shè)置了單獨(dú)的類。如:用戶坦克的生命是否已完全用盡,敵方坦克數(shù)是否已經(jīng)為零,屏幕上的坦克數(shù)量是否少于仍剩下的坦克數(shù)量等。用戶再次發(fā)射子彈時(shí)只是將終止的線程再次激活。敵方坦克將在游戲開(kāi)始時(shí)逐漸新增線程,每增加一個(gè)敵方對(duì)象就新增加一條線程,一旦線程數(shù)滿到最大值(本程序暫設(shè)置為6),就不允許敵人再繼續(xù)出現(xiàn)。在主程序運(yùn)行的線程中,畫面刷新將以一定的頻率采用雙緩沖技術(shù)對(duì)屏幕重繪,實(shí)時(shí)反映整個(gè)游戲的進(jìn)行狀態(tài)。這三種狀態(tài)的轉(zhuǎn)換關(guān)系如圖所示:本程序采用面向?qū)ο蟮脑O(shè)計(jì)模式,對(duì)游戲中的所有物體賦予對(duì)象的概念和屬性。消減狀態(tài)(Destroyed)停止?fàn)顟B(tài)(Paused)運(yùn)行狀態(tài)(Active)StartApp()DestroyApp()呼叫MIDlet的構(gòu)造函數(shù)DestroyApp()PauseApp()圖31 MIDlet的流程。 程序流程MIDlet suite是MIDP應(yīng)用程序的最小單位,JAM負(fù)責(zé)將手機(jī)內(nèi)的MIDlet suite以圖形化的方式呈現(xiàn),讓用戶能夠選取欲執(zhí)行的MIDlet suite,一旦選取了某個(gè)MIDlet suite,操作系統(tǒng)就會(huì)激活KVM執(zhí)行里面的MIDlet。除開(kāi)發(fā)過(guò)程中對(duì)結(jié)構(gòu)上的控制、變量的使用、算法的優(yōu)化等優(yōu)化外,還可以使用混淆器(Obfuscator)進(jìn)行程序打包后的優(yōu)化。其數(shù)據(jù)庫(kù)結(jié)構(gòu)較為簡(jiǎn)單,被稱之為RMS系統(tǒng)。記錄分?jǐn)?shù)的存儲(chǔ)方式也需要有較好的解決方案。8. 用戶運(yùn)行游戲時(shí)需要有分?jǐn)?shù)記錄的可能。否則,不僅難于控制和處理過(guò)多的元素,也會(huì)因過(guò)多的大型圖片而不能限制程序的大小,失去手機(jī)上程序的原則和Java的優(yōu)勢(shì)。良好的用戶界面更是吸引用戶的硬指標(biāo),相關(guān)的美術(shù)構(gòu)圖也需要有一定的考慮。每一次刷新頁(yè)面、每前進(jìn)一步都需要將所有的周圍環(huán)境都進(jìn)行掃描。如此過(guò)多的線程同時(shí)在本來(lái)效率就不高的KVM虛擬機(jī)上運(yùn)行,也許會(huì)導(dǎo)致程序的緩慢。這需要對(duì)所有的對(duì)象有較好的控制。4. 對(duì)于雙方坦克發(fā)出的子彈的控制也需要對(duì)其跟蹤控制,子彈也需要處在獨(dú)立的線程中。Java的多線程能力為實(shí)現(xiàn)這樣的游戲提供了可能。2. 游戲中為了美觀,適用性強(qiáng),可能需要采用外部文件引入的圖片貼圖,有關(guān)貼圖,使得解決靜態(tài)或動(dòng)態(tài)、畫面背景、屏幕刷新的雙緩沖等都有較好的解決方案。一個(gè)實(shí)時(shí)運(yùn)行的最終作品,每秒都會(huì)運(yùn)行成千上萬(wàn)行程序,繪圖事件、鍵盤事件都會(huì)以極高的頻率在后臺(tái)等待響應(yīng),若有絲毫的差別都將很容易導(dǎo)致程序在運(yùn)行不久后可能出現(xiàn)嚴(yán)重錯(cuò)誤,甚至死循環(huán)。存儲(chǔ)媒體手機(jī)內(nèi)建瀏覽器JavaAppicationManagerKVM描述檔圖示檔JAR檔Java ServletHTML網(wǎng)頁(yè)6.安裝應(yīng)用程序8.載入并執(zhí)行應(yīng)用程序使用者手機(jī)網(wǎng)站網(wǎng)絡(luò)1.瀏覽網(wǎng)頁(yè)圖21 JAM工作流程圖 本章小結(jié):第二章介紹了Java語(yǔ)言的特點(diǎn)、本程序的開(kāi)發(fā)環(huán)境及其相關(guān)工具的原理和使用。Java Application Manager 會(huì)從網(wǎng)絡(luò)上下載代表該Application Suite 的JAR 檔,接著在手機(jī)上安裝此MIDlet Suite,然后在手機(jī)開(kāi)始執(zhí)行該應(yīng)用程序。 Java Appication Manager手機(jī)中負(fù)責(zé)調(diào)配程序運(yùn)行資源的管理后臺(tái)是Java Application Manager。它通用性高,開(kāi)發(fā)出的應(yīng)用程序可保證能運(yùn)行在大部分設(shè)備上,而不像專用廠商具有一定的不兼容性。當(dāng)兩年前還是JBuilder6時(shí),現(xiàn)今已推出了10的版本。JBuilder集成了Borland公司開(kāi)發(fā)工具系列的優(yōu)秀特性,使得使用過(guò)C++Builder,Delphi的程序員很容易的過(guò)度到JBuilder的開(kāi)發(fā)環(huán)境當(dāng)中。JBuilder是遵循Sun公司J2EE標(biāo)準(zhǔn)的可視化集成開(kāi)發(fā)工具。Java取消了C語(yǔ)言的結(jié)構(gòu)、指針、define語(yǔ)句、多重繼承、goto語(yǔ)句、操作符、重載等不易被掌握的特性,提供垃圾收集器自動(dòng)回收不用的內(nèi)存空間。4. 分布式Java建立在TCP/IP網(wǎng)絡(luò)平臺(tái)上,提供了用HTTP和FTP協(xié)議傳送和接收信息的庫(kù)函數(shù),使用其相關(guān)技術(shù)可以十分方便的構(gòu)建分布式應(yīng)用系統(tǒng)。它提供了安全管理器,防止程序的非法訪問(wèn)。Java的數(shù)據(jù)類型與機(jī)器無(wú)關(guān)。 第二章 開(kāi)發(fā)環(huán)境及相關(guān)技術(shù)的介紹 開(kāi)發(fā)環(huán)境操作系統(tǒng):Microsoft Windows XP程序語(yǔ)言:Java 2開(kāi)發(fā)包: Java(TM) 2 Standard Edition (build ) Sun Micro. J2ME Wireless Tool Kit IDE:
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1