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

正文內(nèi)容

基于j2me的java游戲坦克大戰(zhàn)的開發(fā)畢業(yè)設(shè)計論文-全文預(yù)覽

2025-07-09 14:39 上一頁面

下一頁面
  

【正文】 檢測矩形區(qū)域設(shè)置為與原來圖片一樣大小。canPass()檢測是否有障礙物及是否到邊界。他們可被外部調(diào)用,以取得生命值、死亡記數(shù)、重置位置。在玩家坦克發(fā)射的子彈中,就必須將攻擊對象設(shè)置為所有的敵人。接著使用append()將子彈貼到layerManager上顯示出來。當(dāng)開炮時,調(diào)用BulletSprite的setLayerManager()將子彈與layerManager聯(lián)系起來。getTileIndex()將檢測傳遞來的象素處是什么類型的障礙物,它將象素除以8(即障礙物的象素寬度),取整,再通過getCell()得到。為了能提前預(yù)測碰撞,調(diào)用了defineCollisionRectangle(0,1,11,12)將碰撞矩形向前設(shè)置了一個象素,具體原理見第二章。 坦克的共同行為 在TankSprite中定義了所有坦克(包括敵方坦克和玩家坦克)的共同行為和屬性。在每次刷新繪圖頁面時,應(yīng)使用GameCanvas的flushGraphics()將屏幕后臺的緩沖區(qū)內(nèi)的圖象刷新到前臺來。效果如圖46所示。如果玩家已經(jīng)死亡,就需要使用LayerManager的insert()將gameover字樣插入到最上層,以免被其他物體覆蓋。當(dāng)它閃光完畢后,敵人就會從閃光位置出現(xiàn)。進(jìn)入下一關(guān)時,許多變量需要重新被初始化,如地圖的繪制、敵人出現(xiàn)位置的重置、敵人的數(shù)量、玩家坦克的當(dāng)前位置。每次循環(huán)中將檢測是否死亡,屏幕上坦克的數(shù)量,是否該過關(guān)統(tǒng)計分?jǐn)?shù),檢測用戶輸入的按鍵、重繪整個屏幕及回收垃圾內(nèi)存(Garbage Collection)。本程序設(shè)置為6。這是很有必要的。每個整數(shù)代表一種障礙物。地圖實際即為TiledLayer的一個對象,可調(diào)用setCell設(shè)置其具體的圖象格內(nèi)容。因此,有必要在其中創(chuàng)立一個LayerManager的對象。程序中建立了另外的兩個類,分別表述了敵人坦克和玩家坦克的功能。它運行在獨立的線程中,以恒定的頻率刷新畫面。startChoice繼承了List類,用于顯示列表選項,使用其append()函數(shù)可將選項加入到列表中。繼承了mandListener的類必須擁有mandAction(),以決定對按鍵采取什么樣的行為。但是當(dāng)顯示的畫面元素超過一屏大小時,將自動轉(zhuǎn)換為永久狀態(tài)。在startApp()函數(shù)中,隨即調(diào)用了Displable的setCurrent()函數(shù)將當(dāng)前屏幕設(shè)置為startChoice。)、結(jié)束的函數(shù)。目前流行的Obfuscator有RetroGuard等。 混淆器的作用不僅僅是保護(hù)代碼,它也有精簡編譯后程序大小的作用。目前流行的如decode,JAD等反編譯工具可以以很快的速度生成源文件。將PNG格式的小分辨率圖象合并在一張大的高分辨率圖象中,由于減少了chunks,將比合并前的總大小減少許多。在應(yīng)用程序內(nèi),對于所建立的類、接口、方法及變量名而言,都需要賦予一個識別的名稱,所命名的名稱每多一個字符就會在類文件內(nèi)多產(chǎn)生一個字節(jié),對于一個較復(fù)雜的應(yīng)用程序而言就會增加為數(shù)不小的數(shù)據(jù)量。打印到屏幕上時,記錄ID號即為排名,因此將顯示三項數(shù)據(jù)。每次有新的更高的記錄就會插入進(jìn)相應(yīng)的位置,將最低一名排擠出記錄。利用輸入輸出流可以寫入及讀取不同數(shù)據(jù)類型的數(shù)據(jù),做法是在寫入數(shù)據(jù)時先將一個DataOutputStream數(shù)據(jù)流對象串接到一個ByteArrayOutStream數(shù)據(jù)流對象,然后再依字段的數(shù)據(jù)類型用writeInt()、writeBoolean()等方法寫入,最后把ByteArrayOutputStream內(nèi)的元素數(shù)據(jù)寫入record中。將所有要存放的數(shù)據(jù)用字符串表示,但是在字段和字段之間以一個特殊的符號作為分隔。第一項記錄的ID是1,其后的每個記錄ID遞增。Record store 每次被修改后都會自動在其屬性上附加上時間戳,這為同步化引擎和程序的控制都極為有效。同一個包內(nèi)的MIDlets可以直接互相訪問它們的記錄集,不同包內(nèi)也可產(chǎn)生共享,但這需要有包的授權(quán)屬性決定。RMS是專門針對移動設(shè)備的服務(wù)的。對磚墻將有能力將其擊毀,使之在畫面上消失;對水泥鋼筋將不能發(fā)生作用,子彈也不能通過;對于河流,坦克不可以通過,但子彈可以;對于草叢,子彈和坦克都可以通過。敵人之間顯然,如上已經(jīng)提過,不需要檢測,但敵人與玩家之間應(yīng)當(dāng)可以互相消除子彈,以便在狹窄的路口中仍有存活的機(jī)會。子彈使用的是象素級的碰撞檢測,因為子彈的圖片形狀不規(guī)則,如果使用矩形碰撞檢測,將有可能在子彈尚未接觸到物體時就已返回碰撞的真值。本程序中并未使用過多復(fù)雜的人工智能算法,如有時間,將可能再此方面加以完善。本程序設(shè)置為:當(dāng)碰撞到障礙物或邊界時立即轉(zhuǎn)向,但碰到玩家坦克時需要有一個等待的時間,這個時間由碰撞前隨機(jī)取得的在某方向上的持續(xù)行走步數(shù)決定,當(dāng)發(fā)生坦克間碰撞時,此隨機(jī)數(shù)將在下一次循環(huán)前減少為原來的2/3,這樣就實現(xiàn)了加快轉(zhuǎn)向的時間,避免死鎖在一個方向上靜止的停留過長的時間。敵方坦克由于需要具有一定的智能性,以便對玩家攻擊,使之具有一定的可玩性。為了提前預(yù)知碰撞,可以將所有坦克的碰撞范圍設(shè)定為一個比坦克圖片稍大一些的矩形,此矩形僅在坦克前方比坦克圖形多出一個象素。敵方按照規(guī)則不能和用戶坦克重合,則它每行走一步就需要把用戶坦克掃描一次,判斷其是否碰撞到了用戶的坦克。將以位的形式返回鍵盤上所有鍵的按與釋放的狀態(tài),當(dāng)bit為1時,鍵就是被按下的狀態(tài),為0時則為釋放狀態(tài)。在某些不支持keyRepeat功能的設(shè)備上,反復(fù)執(zhí)行的按鍵,比如發(fā)射子彈,將不能因為長時間按壓而自動重復(fù),這樣就需要用戶高頻率的手動擊鍵,這在操縱空間非常有限的移動設(shè)備上是非常困難的。J2ME中并沒有J2SE中的File類,獲取外部文件的手段很有限,僅僅在Class類中提供了一個getResourceAsStream函數(shù),將外部文件獲取為輸入流,再由InputStream的繼承類讀出。本程序中的地圖即為游戲背景。該類使不需要高分辨率的圖象就能創(chuàng)建大幅圖面成為可能。默認(rèn)是(0,0)點,如果需要,可將參考點設(shè)置在畫面邊界之外。本程序中的雙方坦克、子彈都由Sprite繼承得到。不同的frame可交相顯示,構(gòu)成動態(tài)的效果。改變View Window的位置可以制造出滾動屏幕的效果。LM存儲了一個層的列表,新的層可以用append函數(shù)附加、刪除和插入。 Game包中的新功能 ,為游戲的開發(fā)帶來了極大的便利。這些代碼包含在每一個單獨的png格式圖象中,然而如果將多個png圖象合并在一張幅面稍大一些的整圖中,多個chunks就可以得到精簡,圖片的大小可以得到控制。 PNG格式PNG(Portable Network Graphics)格式是MIDlet唯一支持的圖象格式,PNG具體格式由PNG Specification,Version 。 Graphics類Graphics類提供了簡單的2D繪圖功能。Canvas提供了鍵盤事件、指點桿事件(如果設(shè)備支持),并定義了允許將鍵盤按鍵映射為游戲控制鍵的函數(shù)。如果已死亡或完成所有的關(guān)數(shù),程序?qū)⒂脩羲玫姆謹(jǐn)?shù)記載到RMS數(shù)據(jù)庫中,進(jìn)行永久性保存。它決定了游戲何時該結(jié)束,何時分配敵人數(shù)量,GameOver字樣的閃現(xiàn)規(guī)則,地圖的繪制及整個游戲的調(diào)度。TankMain類是繼承自MIDlet的控制主程序啟動的首先被載入系統(tǒng)的部分。在屏幕重繪的主程序中,將在每次的循環(huán)中判斷若干事件。用戶控制的坦克運行在主線程中,隨屏幕刷新的頻率而步進(jìn)。在MIDP規(guī)格中定義了MIDlet的生命周期,以及可以存在的三種狀態(tài),包括Paused、Active以及Destroyed,每一個MIDlet在任何時刻只可能處于其中的一個狀態(tài)。以上相關(guān)技術(shù)細(xì)節(jié)和整體流程將分別在以下小節(jié)闡述。手機(jī)中由于處理器和內(nèi)存空間、存儲空間都十分有限,其數(shù)據(jù)庫系統(tǒng)與普通PC大相徑庭。同時,地圖關(guān)卡不宜保存在手機(jī)有限的內(nèi)存中,而最好采取外部文件的讀入讀出方法。6. 游戲的結(jié)束、開始、動態(tài)信息畫面作為構(gòu)成一個完美程序都是必不可少的重要部分。另外,子彈在運行過程中也需要實時掃描是否碰撞到了相關(guān)障礙物或屏幕邊界。敵人坦克的運行算法也需要進(jìn)行適當(dāng)?shù)脑O(shè)置,以免游戲過于簡單,單調(diào)。因此,其邏輯設(shè)計應(yīng)當(dāng)相當(dāng)嚴(yán)謹(jǐn),需將所有可能發(fā)生的事件及意外情況考慮在設(shè)計中。[關(guān)鍵字]:J2ME,手機(jī)游戲,Java,坦克大戰(zhàn)手機(jī)中將Java語言引入,作為一種通用的開發(fā)標(biāo)準(zhǔn),并將向市場推廣普及僅僅短短幾年,J2ME仍是一種新型的技術(shù),中文資料除臺灣出版過相關(guān)書籍外,國內(nèi)相關(guān)介紹資源很有限,國內(nèi)J2ME開發(fā)商也屈指可數(shù),名聲較響的DigitalRed公司也僅成立于1999年。隨著手機(jī)的日益普及、Java功能在移動設(shè)備上的實現(xiàn),Java應(yīng)用程序產(chǎn)生的手機(jī)增值服務(wù)逐漸體現(xiàn)出其影響力,對豐富人們的生活內(nèi)容、提供快捷的資訊起著不可忽視的作用。Java語言面向?qū)ο蟮膬?yōu)勢也使得開發(fā)游戲變得非常容易。本論文介紹了任天堂紅白機(jī)的軟硬件特性、J2ME的相關(guān)技術(shù)及本程序的結(jié)構(gòu)分析和具體功能的實現(xiàn)。一個實時運行的最終作品,每秒都會運行成千上萬行程序,繪圖事件、鍵盤事件都會以極高的頻率在后臺等待響應(yīng),若有絲毫的差別都將很容易導(dǎo)致程序在運行不久后可能出現(xiàn)嚴(yán)重錯誤,甚至死循環(huán)。Java的多線程能力為實現(xiàn)這樣的游戲提供了可能。這需要對所有的對象有較好的控制。每一次刷新頁面、每前進(jìn)一步都需要將所有的周圍環(huán)境都進(jìn)行掃描。否則,不僅難于控制和處理過多的元素,也會因過多的大型圖片而不能限制程序的大小,失去手機(jī)上程序的原則和Java的優(yōu)勢。記錄分?jǐn)?shù)的存儲方式也需要有較好的解決方案。除開發(fā)過程中對結(jié)構(gòu)上的控制、變量的使用、算法的優(yōu)化等優(yōu)化外,還可以使用混淆器(Obfuscator)進(jìn)行程序打包后的優(yōu)化。消減狀態(tài)(Destroyed)停止?fàn)顟B(tài)(Paused)運行狀態(tài)(Active)StartApp()DestroyApp()呼叫MIDlet的構(gòu)造函數(shù)DestroyApp()PauseApp()圖11 MIDlet的流程。在主程序運行的線程中,畫面刷新將以一定的頻率采用雙緩沖技術(shù)對屏幕重繪,實時反映整個游戲的進(jìn)行狀態(tài)。用戶再次發(fā)射子彈時只是將終止的線程再次激活。主程序流程如圖32所示:Logo 畫面選項畫面主程序屏幕繪圖本關(guān)記分統(tǒng)計顯示GameOver顯示歷史記分表About開始敵方需要出坦克時,生成坦克初始化參數(shù)死亡時符合結(jié)束條件時圖12 本程序的主流程圖程序為需要完成獨立功能的需顯示的模塊
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1