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

正文內(nèi)容

基于j2me的java游戲--坦克大戰(zhàn)的開(kāi)發(fā)-資料下載頁(yè)

2025-05-05 20:27本頁(yè)面
  

【正文】 的數(shù)據(jù),做法是在寫(xiě)入數(shù)據(jù)時(shí)先將一個(gè) DataOutputStream數(shù)據(jù)流對(duì)象串接到一個(gè) ByteArrayOutStream 數(shù)據(jù)流對(duì)象,然后再依 字段的數(shù)據(jù)類型用 writeInt()、 writeBoolean()等方法寫(xiě)入,最后把ByteArrayOutputStream 內(nèi)的元素?cái)?shù)據(jù)寫(xiě)入 record 中。反之若要讀取數(shù)據(jù),則先要串接一個(gè) DataInputStream 對(duì)象和 ByteArrayInputStream,依字段的數(shù)據(jù)類用 readInt()、 readBoolean()等方法讀取。 本程序中主要存放在永久區(qū)的內(nèi)容為 用戶得到的最高分?jǐn)?shù)的記錄。一共可以存儲(chǔ) 10 條最高分。每次有新的更高的記錄就會(huì)插入進(jìn)相應(yīng)的位置,將最低一名排擠出記錄。 在輸入記錄前,要求用戶 在 TextField 框中 寫(xiě)入他自己的名字 。返回的 getString 可以將名字輸送給字節(jié)流。因 為每個(gè)記錄包括用戶名和分?jǐn)?shù),因此需要使用多字段的方式編入。打印到屏幕上時(shí),記錄 ID號(hào)即為排名 ,因此將顯示三項(xiàng)數(shù)據(jù)。 內(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)。在這樣的情況下需要在不影響原有功能的情況下適當(dāng)?shù)目s減 JAR文件的大小, 除了可以克服內(nèi)存空間的限制外,也能 大幅度縮短下載的時(shí)間(費(fèi)上海交通大學(xué)本科生學(xué)士 學(xué)位論文 基于 J2ME 的 Java 游戲開(kāi)發(fā) 17 用也降低了),勢(shì)必會(huì)有更多的人愿意下載 所開(kāi)發(fā)的程序。 其方法有: 第一 , 就是盡量縮短命名的長(zhǎng)度。在應(yīng)用程序內(nèi),對(duì)于所建立的類、接口、方法及變量名而言,都需要賦予一個(gè)識(shí)別的名稱,所命名的名稱每多一個(gè)字符就會(huì)在類文件內(nèi)多產(chǎn)生一個(gè)字節(jié), 對(duì)于一個(gè)較復(fù)雜的應(yīng)用程序而言就會(huì)增加為數(shù)不小的數(shù)據(jù)量。 所有這些可以借助混淆器來(lái)幫助實(shí)現(xiàn)。 第二是減少?gòu)?fù)雜的程序結(jié)構(gòu),為一些共同的行為建立一個(gè)抽象類 (Abstract Class) 來(lái)表示繼承的子類的共通性。 第三 是減少圖形數(shù)據(jù)的大小。 將 PNG 格式的小分辨率圖象合并在一張大的高分辨率圖象中,由于減少了 chunks,將比合并前的總大小減少許多。 混淆器 (Obfuscator)的使用 Java 語(yǔ)言并沒(méi)有完全編譯成二進(jìn)制可執(zhí)行文件,編譯出的 .class 文件是一種介于源程序和二進(jìn)制之間的一中基于半解釋的 字節(jié)碼,需要虛擬機(jī)來(lái)執(zhí)行。它包括了所有的信息 。然而這樣會(huì)導(dǎo)致 .class 很容易被反編譯為源代碼,從而不能保護(hù)作者的知識(shí)成果。目前流行的如 decode,JAD 等反編譯工具可以以很快的速度生成源文件。如果不加以施行 有效的措施,將造成嚴(yán)重的后果。 由此引入混淆器的概念?;煜鲗⒋a中的所有變量、函數(shù)、類的名稱變?yōu)楹?jiǎn)短的英文字母代號(hào),如果缺乏相應(yīng)的 函數(shù)名 指示和 程序注釋,即使被反編譯,也將難以閱讀。 混淆器的作用不僅僅是保護(hù)代碼,它也有精簡(jiǎn)編譯后程序大小的作用。 由于以上介紹的減少變量、函數(shù)的命名長(zhǎng)度的關(guān)系 ,編譯后也會(huì)從 .class 文件中減少這些冗余的信息。 混淆后,體積大約能減少 25%,這對(duì)當(dāng)前費(fèi)用較貴的無(wú)線網(wǎng)絡(luò)傳輸是有一定意義的 。 為了能與各種 IDE 集成, 就像 Java2 SDK 一樣, 混淆器 采用命令行參數(shù)的形式 ,以便 可被其調(diào)用。 目前流行的 Obfuscator 有 RetroGuard 等。 模擬器的相關(guān)調(diào)試 IDE 整合的 Wireless Tool Kit 提供了許多在運(yùn)行時(shí)監(jiān)視運(yùn)行狀態(tài)的工具。 包括內(nèi)存狀況的檢測(cè)(手機(jī)上的內(nèi)存空間十分有限,必須時(shí)刻關(guān)注機(jī)載內(nèi)存是否大于程序所能使用到的最大可能的內(nèi)存空間),網(wǎng)絡(luò)狀況的檢測(cè),運(yùn)行函數(shù)的跟蹤等。如圖 34,是內(nèi)存跟蹤測(cè)試隨時(shí)間變化的調(diào)試器。其中,允許 強(qiáng)制 垃圾回收 (Garbage Collection)。由于 Java 語(yǔ)言中,不像許多其他的如 C++語(yǔ)言,不需要指定 回收函數(shù)中特定不使用的資源,資源回收機(jī)制將自動(dòng)清空無(wú)效變量占用的空間 。在程序運(yùn)行中也可以調(diào)用 System 類的 gc()函數(shù)手動(dòng)收回廢棄的內(nèi)存。 上海交通大學(xué)本科生學(xué)士 學(xué)位論文 基于 J2ME 的 Java 游戲開(kāi)發(fā) 18 本章小結(jié) : 第三章中介紹了程序的流程、相關(guān)技術(shù)的思想及其在本程序中的應(yīng)用。分別對(duì)繪圖、數(shù)據(jù)庫(kù)、游戲基本算法等做了詳細(xì)敘述。具體算法的代碼實(shí)現(xiàn)和詳細(xì)流程將在下章介紹。 圖 34 內(nèi)存監(jiān)視器 上海交通大學(xué)本科生學(xué)士 學(xué)位論文 基于 J2ME 的 Java 游戲開(kāi)發(fā) 19 第四章 程序 分析和具體實(shí)現(xiàn) 游戲 進(jìn)入前的選擇 每個(gè) MIDlet 程序都必須有一個(gè)主類,該類必須繼承自 MIDlet。它控制著整個(gè)程序的運(yùn)行,并且可以通過(guò)相應(yīng)函數(shù)從程 序描述文件中獲取相關(guān)的信息。該類中擁有可以管理程序的創(chuàng)建、開(kāi)始、暫停(手機(jī)中很可能有正在運(yùn)行程序卻突然來(lái)電的情況,這時(shí)應(yīng)進(jìn)入暫停狀態(tài)。)、結(jié)束的函數(shù)。 進(jìn)入時(shí),首先載入畫(huà)面的不是游戲運(yùn)行狀態(tài),而是提供選項(xiàng),當(dāng)再次選擇 Start Game 時(shí)才正式運(yùn)行。運(yùn)行畫(huà)面如圖 41 所示。 因此,在 TankMain 的構(gòu)造函數(shù)中分配了 StartChoice 類,即選項(xiàng)畫(huà)面的內(nèi)存空間 。在 startApp()函數(shù)中 , 隨即調(diào)用了 Displable的 setCurrent()函數(shù)將當(dāng)前屏幕設(shè)置為startChoice。在顯示高級(jí)用戶界面 前,建造了一個(gè)Alert 類。 Alert 對(duì)象用于顯示提示、警告等告之用戶信息的臨時(shí)閃現(xiàn)的屏幕,它可作為 setCurrent 的參數(shù),提前顯示在最終需要顯示的屏幕前。 當(dāng)將 FOREVER 作為 Alert的參數(shù)時(shí),將永久顯示,直到用戶點(diǎn)擊相應(yīng)按鈕 手動(dòng)結(jié)束。但是當(dāng)顯示的畫(huà)面元素超過(guò)一屏大小時(shí),將自動(dòng)轉(zhuǎn)換為永久狀態(tài)。在此,由于貼在 Alert 上的圖片大小超出了其范圍,故已成為永久狀態(tài)。 效果如圖 42 所示。 startChoice 繼承了接口 mandListener,這樣,就可以使用高級(jí)界面的 Command 按鈕。 繼承了 mandListener 的類必須擁有 mandAction(),以決定對(duì)按鍵采取什么樣的行為。即按鈕事件觸發(fā)后需執(zhí)行的函數(shù)。 在設(shè)置好 mandlistener 后,需要調(diào)用 setCommandListener()以將按鈕事件激活 。 鍵盤事件中,可用 getCommandType()返回的 Command 類型來(lái)確定選擇的是什么按鈕。 startChoice 繼承了 List 類,用于顯示列表選項(xiàng),使用其 append()函數(shù)可將選項(xiàng)加入到列表中。getSelectIndex()可檢測(cè)到選擇的項(xiàng)目的序號(hào),序號(hào)從 0 開(kāi) 始遞增。 其中,當(dāng)選擇第一項(xiàng)時(shí)將載入正式游戲畫(huà)面 BattleCanvas 類,第二項(xiàng)將顯示幫助信息 (效圖 41 游戲前的選項(xiàng)畫(huà)面 圖 42 程序開(kāi)始時(shí)的 logo 畫(huà)面 圖 43 使用說(shuō)明畫(huà)面 上海交通大學(xué)本科生學(xué)士 學(xué)位論文 基于 J2ME 的 Java 游戲開(kāi)發(fā) 20 果如圖 43),第三項(xiàng)則是重新顯示 與作品和作者相關(guān)的 logo 畫(huà)面。 主游戲 邏輯 及其涉及到的若干類 BattleCanvas 主管著所有類之間的協(xié)調(diào),決定何時(shí)死亡,何時(shí)分配新的敵人,及控制敵人出現(xiàn)處的閃光圖標(biāo)、游戲結(jié)束后的動(dòng)態(tài) Gameover 字樣。 它運(yùn)行在獨(dú)立的線程中,以恒定的頻率刷新畫(huà)面。 刷新速度需大于 30/秒才能使畫(huà)面顯示因人眼的暫時(shí)停留效應(yīng)流暢運(yùn)行。 本程序設(shè)置為 20毫秒。 其主邏輯如圖 44所示。 程序中建立了另外的兩個(gè)類,分別表述了敵人坦克和玩家坦克的功能。它們分別為:EnemySprite 和 UserSprite。這兩個(gè)類均在BattleCanvas中建立了對(duì)象,以便進(jìn)行統(tǒng)一調(diào)度。BattleCanvas 包括了 LayerManager,這樣所有靜態(tài)和動(dòng)態(tài)的圖象都不需要手動(dòng)刷新,只需要在LayerManager 中加入所有的需控制的元素,再統(tǒng)一由 LayerManager 刷新即可。因此,有必要在其中創(chuàng)立一個(gè) LayerManager 的對(duì)象。 其他,如 Sprite 類的 gameover 字樣 、記分統(tǒng)計(jì)畫(huà)面也都需在此主邏輯中建立相應(yīng)對(duì)象。 還需保存的變量有,游戲開(kāi)始時(shí)間、結(jié)束時(shí)間(用于統(tǒng)計(jì)分?jǐn)?shù))、敵人的總數(shù)、屏幕上敵人的數(shù)量、下一個(gè)敵人需要出現(xiàn)的位置(總共允許在三個(gè)不同的位置出現(xiàn),分別位于屏幕的左、中、右方)、游戲是否已成功結(jié)束或是否已死亡 。 構(gòu)造函數(shù)中,需初始化地圖。地圖實(shí)際即為TiledLayer 的一個(gè)對(duì)象,可調(diào)用 setCell 設(shè)置其具體的圖象格內(nèi)容。 地圖由外部文件讀入。外部文件分別命名為 level*.png,利用 MIDP 中唯一獲取外部文件為程序內(nèi)資源的getResourceAsStream()函數(shù)將地圖文件讀入程序。在創(chuàng)建了 InputStream 類的 map 對(duì)象后,使用 read()函數(shù)可將流中的下一個(gè)字節(jié)讀出,并返回此字節(jié)代表的整數(shù)。每個(gè)整數(shù)代表一種障礙物。 用二維循環(huán)將讀出的每個(gè)整數(shù),通過(guò) setCell()將整幅地圖畫(huà)出即可。 地圖文件可用十六進(jìn)制的文本編輯器生成,如本程序使用的 Ultraedit。 開(kāi)始 敵人數(shù)量小于 0 嗎? 顯示記分畫(huà)面 最后一關(guān)或死亡了嗎? 進(jìn)入下一關(guān) 敵人數(shù)量大于屏幕上的數(shù)量嗎? 增 加一個(gè)敵人 玩家是否死亡 顯示 GameOver 重繪屏幕 內(nèi)存回收 結(jié)束 Y N Y N N Y Y N 圖 44 BattleCanvas 類主要關(guān)系流程圖 上海交通大學(xué)本科生學(xué)士 學(xué)位論文 基于 J2ME 的 Java 游戲開(kāi)發(fā) 21 圖 45 游戲結(jié)束的畫(huà)面 繪出地圖后,可用 LayerManager 的 append()將地圖放置在第一層。這是很有必要的。因?yàn)榈貓D上的障礙物之一 —— 草,在坦克運(yùn)行中時(shí)是必須處于坦克的上層的,否則將失去真實(shí)性。為此,地圖必 須首先載入。 由于敵人將依次出現(xiàn)在屏幕上,同時(shí)出現(xiàn)的數(shù)量應(yīng)當(dāng)受到控制。本程序設(shè)置為 6。所以在構(gòu)造函數(shù)中,也應(yīng)當(dāng)分配 6個(gè) EnemySprite 對(duì)象的內(nèi)存空間。 構(gòu)造坦克時(shí),將把坦克的 png 圖片作為參數(shù)傳遞給 EnemySprite 和 UserSprite,BattleCanvas 中創(chuàng)建坦克僅調(diào)用 createEnemy()和 createUser()實(shí)現(xiàn)。 在構(gòu)造函數(shù)自己調(diào)用了線程的 start 后,程序?qū)㈤_(kāi)始循環(huán)運(yùn)行,直至跳出while 的循環(huán)。每次循環(huán)中將檢測(cè)是否死亡,屏幕上坦克的數(shù)量,是否該過(guò)關(guān)統(tǒng)計(jì)分?jǐn)?shù),檢測(cè)用戶輸入的 按鍵、重繪整個(gè)屏幕及回收垃圾內(nèi)存 (Garbage Collection)。 當(dāng)敵人坦克完全死亡時(shí) (enemyNum 為 0),需調(diào)用 System 類的currentTimeMillis()賦值給結(jié)果的時(shí)間。 接著調(diào)用 setCurrent()顯示統(tǒng)計(jì)分?jǐn)?shù)的畫(huà)面 ,為了進(jìn)入下一關(guān),統(tǒng)計(jì)畫(huà)面只是停留四秒,就重新轉(zhuǎn)回 BattleCanvas畫(huà)面。當(dāng)然,如果當(dāng)前已是最后一關(guān),就不會(huì)再轉(zhuǎn)回。 進(jìn)入下一關(guān)時(shí),許多變量需要重新被初始化,如地圖的繪制、敵人出現(xiàn)位置的重置、敵人的數(shù)量、玩家坦克的當(dāng)前位置。 如果游戲未結(jié)束,則需判斷屏上坦 克是否已小于還剩坦克的總數(shù),如果是這樣,就需要再提供一輛坦克。提供新坦克之前,在屏幕上設(shè)置了一個(gè)專用指示的閃光符號(hào) ,它繼承了 Sprite,運(yùn)行在單獨(dú)的線程中。 以在兩秒鐘內(nèi)反復(fù)閃現(xiàn)兩次為一個(gè)生命周期。當(dāng)它閃光完畢后,敵人就會(huì)從閃光位置出現(xiàn)。這樣可提示玩家具體敵人將在什么時(shí)刻出現(xiàn) ,以便做好準(zhǔn)備。 閃光位置設(shè)置了三處坐標(biāo),由于敵人不能同時(shí)出現(xiàn),便設(shè)置了 enemyOutDelay 的倒數(shù)計(jì)時(shí),每次屏幕刷新會(huì)減少一次計(jì)數(shù),直到為 0時(shí)就準(zhǔn)備一輛坦克。 本程序設(shè)置的兩次坦克出現(xiàn)的最小間隔為 2秒。 如果玩家已經(jīng)死亡,就需要使用 LayerManager的 insert()將 gameover 字樣插入到最上層,以免被其他物體覆蓋。 效果如圖 45所示。 在檢測(cè)用戶輸入 的input()函數(shù)中,當(dāng)按方向鍵時(shí),玩家坦克就將向不同的方向運(yùn)行,這調(diào)用了UserSprite 的 go()函數(shù) ;當(dāng)開(kāi)炮時(shí),就調(diào)用其fire()函數(shù),作出相應(yīng)的行為。 在出現(xiàn)正式畫(huà)面前設(shè)置了一個(gè) loading state*字樣的單獨(dú)屏幕,調(diào)用
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1