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

正文內(nèi)容

畢業(yè)設(shè)計(jì)基于j2me的手機(jī)游戲設(shè)計(jì)-預(yù)覽頁(yè)

 

【正文】 面世的當(dāng)時(shí),能在硬件上運(yùn)行這樣的2D程序不得不令人驚嘆,難怪常有人說游戲程序是最大限度發(fā)揮硬件水平的載體。 2. 開發(fā)環(huán)境及相關(guān)技術(shù)的介紹 開發(fā)環(huán)境操作系統(tǒng):Microsoft Windows XP程序語(yǔ)言:J2ME開發(fā)包: Java Development Kit Wireless Tool Kit IDE: Java語(yǔ)言的特點(diǎn)[2]1. 平臺(tái)無(wú)關(guān)性Java引進(jìn)虛擬機(jī)原理,并運(yùn)行于虛擬機(jī),實(shí)現(xiàn)不同平臺(tái)之間的Java接口。它提供了安全管理器,防止程序的非法訪問。Java取消了C語(yǔ)言的結(jié)構(gòu)、指針、define語(yǔ)句、多重繼承、goto語(yǔ)句、操作符、重載等不易被掌握的特性,提供垃圾收集器自動(dòng)回收不用的內(nèi)存空間。更難能可貴的是,Eclipse是一個(gè)開放源代碼的項(xiàng)目,任何人都可以下載Eclipse的源代碼,并且在此基礎(chǔ)上開發(fā)自己的功能插件,同時(shí)可以通過開發(fā)新的插件擴(kuò)展現(xiàn)有插件的功能,比如為了進(jìn)行手機(jī)應(yīng)用程序的開發(fā)就是通過J2ME插件的擴(kuò)展來(lái)加以實(shí)現(xiàn)的。雖然它沒有強(qiáng)大的功能和完善的調(diào)試手段,但它提供運(yùn)行模擬器的最基本組件,是其他IDE需集成采用的必備元素。整個(gè)詳細(xì)的運(yùn)作流程如圖21所示。因此,其邏輯設(shè)計(jì)應(yīng)當(dāng)相當(dāng)嚴(yán)謹(jǐn),需將所有可能發(fā)生的事件及意外情況考慮在設(shè)計(jì)中。敵人坦克的運(yùn)行算法也需要進(jìn)行適當(dāng)?shù)脑O(shè)置,以免游戲過于簡(jiǎn)單,單調(diào)。另外,子彈在運(yùn)行過程中也需要實(shí)時(shí)掃描是否碰撞到了相關(guān)障礙物或屏幕邊界。6. 游戲的結(jié)束、開始、動(dòng)態(tài)信息畫面作為構(gòu)成一個(gè)完美程序都是必不可少的重要部分。同時(shí),地圖關(guān)卡不宜保存在手機(jī)有限的內(nèi)存中,而最好采取外部文件的讀入讀出方法。手機(jī)中由于處理器和內(nèi)存空間、存儲(chǔ)空間都十分有限,其數(shù)據(jù)庫(kù)系統(tǒng)與普通PC大相徑庭。以上相關(guān)技術(shù)細(xì)節(jié)和整體流程將分別在以下小節(jié)闡述。在MIDP規(guī)格中定義了MIDlet的生命周期,以及可以存在的三種狀態(tài),包括Paused、Active以及Destroyed,每一個(gè)MIDlet在任何時(shí)刻只可能處于其中的一個(gè)狀態(tài)。在主程序運(yùn)行的線程中,畫面刷新將以一定的頻率采用雙緩沖技術(shù)對(duì)屏幕重繪,實(shí)時(shí)反映整個(gè)游戲的進(jìn)行狀態(tài)。用戶再次發(fā)射子彈時(shí)只是將終止的線程再次激活。主程序流程如圖32所示。閃過后載入StartChoice類,為用戶提供可選擇的選項(xiàng)。敵方坦克與用戶坦克的相關(guān)功能和具體行為分別定義在EnemySprite和UserSprite類中,它們都繼承自TankSprite公共類,以簡(jiǎn)化程序的代碼、理清結(jié)構(gòu)。 與主程序相關(guān)的類的UML視圖 提供低級(jí)繪制的Canvas類為了能有程序開發(fā)人員控制接口的外觀和行為,需要使用大量的初級(jí)用戶接口類,尤其在游戲程序中,幾乎完全依賴的就是Canvas抽象類進(jìn)行繪圖。應(yīng)當(dāng)將鍵代碼轉(zhuǎn)換為游戲鍵的代碼,以便硬件開發(fā)商能定義他們自己的游戲鍵布局。程序只能在paint()函數(shù)中使用Graphics繪制,GameCanvas可調(diào)用getGraphics()函數(shù)直接繪制在緩沖區(qū)上,可以在任何時(shí)間請(qǐng)求傳輸?shù)角芭_(tái)。坦克之間或與障礙物碰撞時(shí)就不會(huì)因?yàn)楸尘坝刑囟ǖ念伾?,顯示出的效果像貼上的圖片而缺乏真實(shí)感,物體之間輕微重疊時(shí)最上層圖片也不會(huì)覆蓋超過其有效象素外的部分。在Game包中的TiledLayer和Sprite類都整合了這樣的功能。 LayerManager(以下簡(jiǎn)稱LM)提供控制整體畫面層的控制。層號(hào)總是連續(xù)的,即使有中間的層被移除,其他層的序號(hào)會(huì)作相應(yīng)的調(diào)整以保持整體的完整性。唯有界面右側(cè)的計(jì)分欄由Graphics類繪制。Sprite也可以從整合的圖象中讀圖,讀圖時(shí)將把大圖分解為若干等寬等高的小圖。由此,引入?yún)⒖键c(diǎn)的概念。子彈的參考點(diǎn)設(shè)置在子彈底部的中心,因?yàn)樽訌椧怀雠谕驳臅r(shí)候緊挨著坦克的象素就是其底部中心。一塊整圖可被分割成等大小的圖象格,每塊格有其對(duì)應(yīng)的序號(hào),按照行列遞增。地圖背景分為20*22個(gè)圖象格,每個(gè)格使用一個(gè)字節(jié)表示其中的障礙物,圖象文件存儲(chǔ)在外部文件中,以16進(jìn)制的整數(shù)串表示,因此每個(gè)地圖的大小為固定的440字節(jié)。需要在paint()方法內(nèi)所想要畫的圖形畫在一張預(yù)先準(zhǔn)備好的背景,等所有繪圖操作都完成后再將背景的數(shù)據(jù)拷貝到實(shí)際的屏幕上。不過在某些MIDP的實(shí)現(xiàn)上已經(jīng)加上了雙重緩沖的支持,因此在處理前應(yīng)先利用Canvas類的isDoubleBuffer()方法來(lái)判斷。在某些不支持keyRepeat功能的設(shè)備上,反復(fù)執(zhí)行的按鍵,比如發(fā)射子彈,將不能因?yàn)殚L(zhǎng)時(shí)間按壓而自動(dòng)重復(fù),這樣就需要用戶高頻率的手動(dòng)擊鍵,這在操縱空間非常有限的移動(dòng)設(shè)備上是非常困難的。將以位的形式返回鍵盤上所有鍵的按與釋放的狀態(tài),當(dāng)bit為1時(shí),鍵就是被按下的狀態(tài),為0時(shí)則為釋放狀態(tài)。敵方按照規(guī)則不能和用戶坦克重合,則它每行走一步就需要把用戶坦克掃描一次,判斷其是否碰撞到了用戶的坦克。為了提前預(yù)知碰撞,可以將所有坦克的碰撞范圍設(shè)定為一個(gè)比坦克圖片稍大一些的矩形,此矩形僅在坦克前方比坦克圖形多出一個(gè)象素。敵方坦克由于需要具有一定的智能性,以便對(duì)玩家攻擊,使之具有一定的可玩性。本程序設(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è)方向上靜止的停留過長(zhǎng)的時(shí)間。本程序中并未使用過多復(fù)雜的人工智能算法,如有時(shí)間,將可能再此方面加以完善。子彈使用的是象素級(jí)的碰撞檢測(cè),因?yàn)樽訌椀膱D片形狀不規(guī)則,如果使用矩形碰撞檢測(cè),將有可能在子彈尚未接觸到物體時(shí)就已返回碰撞的真值。敵人之間顯然,如上已經(jīng)提過,不需要檢測(cè),但敵人與玩家之間應(yīng)當(dāng)可以互相消除子彈,以便在狹窄的路口中仍有存活的機(jī)會(huì)。對(duì)磚墻將有能力將其擊毀,使之在畫面上消失;對(duì)水泥鋼筋將不能發(fā)生作用,子彈也不能通過;對(duì)于河流,坦克不可以通過,但子彈可以;對(duì)于草叢,子彈和坦克都可以通過。RMS是專門針對(duì)移動(dòng)設(shè)備的服務(wù)的。同一個(gè)包內(nèi)的MIDlets可以直接互相訪問它們的記錄集,不同包內(nèi)也可產(chǎn)生共享,但這需要有包的授權(quán)屬性決定。Record store 每次被修改后都會(huì)自動(dòng)在其屬性上附加上時(shí)間戳,這為同步化引擎和程序的控制都極為有效。第一項(xiàng)記錄的ID是1,其后的每個(gè)記錄ID遞增。將所有要存放的數(shù)據(jù)用字符串表示,但是在字段和字段之間以一個(gè)特殊的符號(hào)作為分隔。利用輸入輸出流可以寫入及讀取不同數(shù)據(jù)類型的數(shù)據(jù),做法是在寫入數(shù)據(jù)時(shí)先將一個(gè)DataOutputStream數(shù)據(jù)流對(duì)象串接到一個(gè)ByteArrayOutStream數(shù)據(jù)流對(duì)象,然后再依字段的數(shù)據(jù)類型用writeInt()、writeBoolean()等方法寫入,最后把ByteArrayOutputStream內(nèi)的元素?cái)?shù)據(jù)寫入record中。每次有新的更高的記錄就會(huì)插入進(jìn)相應(yīng)的位置,將最低一名排擠出記錄。打印到屏幕上時(shí),記錄ID號(hào)即為排名,因此將顯示三項(xiàng)數(shù)據(jù)。在應(yīng)用程序內(nèi),對(duì)于所建立的類、接口、方法及變量名而言,都需要賦予一個(gè)識(shí)別的名稱,所命名的名稱每多一個(gè)字符就會(huì)在類文件內(nèi)多產(chǎn)生一個(gè)字節(jié),對(duì)于一個(gè)較復(fù)雜的應(yīng)用程序而言就會(huì)增加為數(shù)不小的數(shù)據(jù)量。將PNG格式的小分辨率圖象合并在一張大的高分辨率圖象中,由于減少了chunks,將比合并前的總大小減少許多。目前流行的如decode,JAD等反編譯工具可以以很快的速度生成源文件。 混淆器的作用不僅僅是保護(hù)代碼,它也有精簡(jiǎn)編譯后程序大小的作用。目前流行的Obfuscator有RetroGuard等。其中,允許強(qiáng)制垃圾回收(Garbage Collection)。分別對(duì)繪圖、數(shù)據(jù)庫(kù)、游戲基本算法等做了詳細(xì)敘述。該類中擁有可以管理程序的創(chuàng)建、開始、暫停(手機(jī)中很可能有正在運(yùn)行程序卻突然來(lái)電的情況,這時(shí)應(yīng)進(jìn)入暫停狀態(tài)。因此,在TankMain的構(gòu)造函數(shù)中分配了StartChoice類,即選項(xiàng)畫面的內(nèi)存空間。當(dāng)將FOREVER作為Alert的參數(shù)時(shí),將永久顯示,直到用戶點(diǎn)擊相應(yīng)按鈕手動(dòng)結(jié)束。繼承了mandListener的類必須擁有mandAction(),以決定對(duì)按鍵采取什么樣的行為。startChoice繼承了List類,用于顯示列表選項(xiàng),使用其append()函數(shù)可將選項(xiàng)加入到列表中。它運(yùn)行在獨(dú)立的線程中,以恒定的頻率刷新畫面。程序中建立了另外的兩個(gè)類,分別表述了敵人坦克和玩家坦克的功能。因此,有必要在其中創(chuàng)立一個(gè)LayerManager的對(duì)象。地圖實(shí)際即為TiledLayer的一個(gè)對(duì)象,可調(diào)用setCell設(shè)置其具體的圖象格內(nèi)容。每個(gè)整數(shù)代表一種障礙物。這是很有必要的。本程序設(shè)置為6。每次循環(huán)中將檢測(cè)是否死亡,屏幕上坦克的數(shù)量,是否該過關(guān)統(tǒng)計(jì)分?jǐn)?shù),檢測(cè)用戶輸入的按鍵、重繪整個(gè)屏幕及回收垃圾內(nèi)存(Garbage Collection)。進(jìn)入下一關(guān)時(shí),許多變量需要重新被初始化,如地圖的繪制、敵人出現(xiàn)位置的重置、敵人的數(shù)量、玩家坦克的當(dāng)前位置。當(dāng)它閃光完畢后,敵人就會(huì)從閃光位置出現(xiàn)。如果玩家已經(jīng)死亡,就需要使用LayerManager的insert()將gameover字樣插入到最上層,以免被其他物體覆蓋。在繪圖的render()過程中,除了要重繪坦克、地圖、子彈外,還會(huì)在右邊空白處繪出一個(gè)生命統(tǒng)計(jì)欄。在允許敵人出現(xiàn)前,需要檢測(cè)給即將出現(xiàn)的敵人分配一個(gè)數(shù)組序號(hào)。在transformDirection[]中定義了坦克四個(gè)方向分別應(yīng)將原始圖片旋轉(zhuǎn)的角度,分別為TRANS_NONE,TRANS_ROT90,TRANS_ROT180,TRANS_ROT270,以便在后來(lái)的setTransform()中將這些常量代入。canPass()函數(shù)將返回坦克是否能夠向前前進(jìn),考慮到的因素有邊界、障礙物。因?yàn)樗械恼系K物中只有草不會(huì)阻礙坦克的向前運(yùn)行。這些都由坦克傳遞給子彈。子彈一旦開始運(yùn)行,就脫離了當(dāng)前坦克的控制,直到其生命周期終止。在setShootCheck()的參數(shù)中,傳給子彈的是敵人的數(shù)組,子彈的對(duì)象就被確定了。amp。當(dāng)可以行走時(shí),就在當(dāng)前方向的坐標(biāo)上增加或減少一個(gè)象素。事實(shí)上,敵人坦克此時(shí)并沒有阻礙玩家前進(jìn)。其主要功能流程圖見圖45。 setEnemyShootCheck()函數(shù)與UserSprite中的一樣,設(shè)置了攻擊的對(duì)象,并且此函數(shù)將繼續(xù)把參數(shù)傳遞給自身的子彈,以便子彈可以識(shí)別攻擊對(duì)象。 return (())%4+1。 return ((())%4)*50。這樣,它們才可以自動(dòng)檢測(cè)自己是否與同伴發(fā)生了碰撞,以便采取躲避、轉(zhuǎn)向等行動(dòng)。語(yǔ)句將避免檢測(cè)到自己,永遠(yuǎn)返回真。如果一出現(xiàn),出口就被堵死,顯然,不能永遠(yuǎn)不出現(xiàn),那就應(yīng)采取其他的辦法,否則兩輛坦克將因?yàn)槎继幵谂鲎矤顟B(tài)中而無(wú)法移出。如果剛出現(xiàn),就直接走一步,具體如何行走將在go()函數(shù)中決定,并且此go()與UserSprite中的有所區(qū)別。其他的隨機(jī)值也應(yīng)當(dāng)重置。 子彈的運(yùn)行和控制 子彈繼承了Runnable,運(yùn)行在獨(dú)立的線程中。 checkHit(int x,int y)調(diào)用了getTileIndex(x,y)獲取當(dāng)前子彈擊中的是什么障礙物,如果返回了false就表示沒有擊中任何東西。擊中鋼筋時(shí),將只產(chǎn)生爆炸效果。 (x =5) amp。 (y 171))作為循環(huán)的條件可以控制子彈出界的范圍。在隨后的checkHit(RIGHT)調(diào)用中,它將檢測(cè)它是否在x+3點(diǎn),即160點(diǎn)擊中了某個(gè)障礙物,但是160/8=20。如果為真,就繼續(xù)檢測(cè)碰撞上了什么樣的物體。這根據(jù)子彈的來(lái)源分為兩種情況。如果玩家生命已死亡殆盡,就需要在進(jìn)行以上操作的同時(shí)將玩家坦克的位置放置到屏幕外的部分。這將會(huì)是很荒唐的場(chǎng)面。采用的是手機(jī)專用的一種簡(jiǎn)化的數(shù)據(jù)庫(kù)RMS。(NoName) (0),將記錄中的條目的用戶名置為NoName,所有的分?jǐn)?shù)置為0。() ,score=()將分別讀出用戶名和分?jǐn)?shù),然而前者讀出后并不加以利用,因?yàn)樵诒容^分?jǐn)?shù)的過程中,并不需要用到用戶名。并將所有相關(guān)的InputStream的繼承類用close()關(guān)閉,以便釋放內(nèi)存資源。由于ScoreScreen類繼承了Canvas,所以必須有paint()函數(shù)。因此完成的時(shí)間越短,得到的分?jǐn)?shù)就越高。僅停留4秒種,供用戶快速參考后便會(huì)跳入下一關(guān)的起始畫面。 本章小結(jié)第四章中按照相應(yīng)步驟描述了所有關(guān)鍵類的具體算法實(shí)現(xiàn),引用了相關(guān)函數(shù)進(jìn)行了具體流程的解釋,并對(duì)原理稍復(fù)雜的函數(shù)做了詳細(xì)的分析。但幾乎每一個(gè)計(jì)算機(jī)程序都會(huì)有這樣那樣的不足,尤其是未經(jīng)過精心維護(hù)的非商業(yè)軟件。 2. 敵人的人工智能變化較少,不夠理想。 5. 最好有接寶物的設(shè)置,增強(qiáng)可玩性。 3. 當(dāng)坦克在草叢中時(shí),對(duì)方坦克發(fā)出的子彈不能將其擊毀。因?yàn)槠涓鱾€(gè)模塊間的聯(lián)系十分緊密,代碼重復(fù)執(zhí)行率高,當(dāng)經(jīng)過無(wú)數(shù)次的調(diào)試、修改后,能最終看到成品,有無(wú)比自豪的心情。本程序打包后體積23K,運(yùn)行時(shí)如進(jìn)行g(shù)c()內(nèi)存回收可將運(yùn)行時(shí)堆內(nèi)存控制在50K以內(nèi),大小與目前大部分手機(jī)的100K左右的可使用內(nèi)存和500K左右的存儲(chǔ)空間。而許多J2ME游戲程序需要200K的運(yùn)行內(nèi)存空間、200MHz的處理器,仍運(yùn)行不夠流暢。感謝答辯組對(duì)本畢業(yè)設(shè)計(jì)的考核,如果可以得到專家的認(rèn)可將對(duì)我的學(xué)習(xí)和工作給予極大的鼓勵(lì)。謝謝你們!附錄 :package tank。public class BattleCanvas extends GameCanvas implements Runnable{ /** Constructor */private UserSprite userSprite。private Sprite gameOver。 //total enemy number in current level。public static int currentLevel=1。public static boolean dead=false。 layerManager=new LayerManager()。 userSprit
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1