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

正文內(nèi)容

基于j2me手機(jī)坦克大戰(zhàn)游戲設(shè)計(jì)與開發(fā)畢業(yè)論文-資料下載頁

2025-07-01 19:43本頁面

【導(dǎo)讀】著不可忽視的作用。本論文著眼于J2ME技術(shù)的應(yīng)用,開發(fā)一款可商用的手機(jī)游。戲程序——坦克大戰(zhàn)。本程序的界面和運(yùn)作方式繼承于日本任天堂公司在20世。更流行的硬件平臺提供應(yīng)用軟件。次坦克大戰(zhàn)的手機(jī)游戲。并且實(shí)現(xiàn)了游戲中的諸多功能:音效,運(yùn)行流暢度,道。具運(yùn)用,敵方坦克的智能運(yùn)行等。解決方案,并因其“WriteOnce,runanywhere”的Java特性而提高開發(fā)的效率。師的指導(dǎo)下進(jìn)行的研究工作及取得的成果。盡我所知,除文中特別加。究所取得的研究成果。除了文中特別加以標(biāo)注引用的內(nèi)容外,本論文。不包含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫的成果作品。究做出重要貢獻(xiàn)的個(gè)人和集體,均已在文中以明確方式標(biāo)明。全意識到本聲明的法律后果由本人承擔(dān)。本學(xué)位論文作者完全了解學(xué)校有關(guān)保留、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向國家有關(guān)部門或機(jī)構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán)大學(xué)可以將本學(xué)位。印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。涉密論文按學(xué)校規(guī)定處理。

  

【正文】 、結(jié)束、以及游戲中信息的布局作為一個(gè)游戲的重要部分。制作友好的用戶界面可以更加吸引玩家,這也需要參考大量的同類型游戲。 以上相關(guān)技術(shù)細(xì)節(jié)和整體流程將分別在以下小節(jié)闡述。 繪圖基礎(chǔ) 低級屏顯 Canvas 類 如同高級界面屏幕類都繼承 Screen 類一樣,在使用到低級用戶界面必須要繼承 Canvas 這個(gè)抽象類, Canvas 是 Displayable 的直接子類,屬于 J2ME 中的低級 API。 用戶利用這些低級 API 可對設(shè)備精確控制,如繪制像素 ,接受原始的用戶輸入事件等。 與高級 API 相比控制更加靈活,但這是以其復(fù)雜性、高成本為代價(jià)的,并犧牲了一定的可移植性。它的基本用法與其他 Displayable 對象一致。Canvas 的核心是 paint()這個(gè)方法, 這個(gè)方法做是負(fù)責(zé)繪制屏幕上的畫面,每當(dāng)屏幕需要重新繪制時(shí),就會產(chǎn)生重繪事件,系統(tǒng)就會自動調(diào)用 paint(),并傳入一個(gè) Graphics 對象。從程序開發(fā)的觀點(diǎn)看, Canvas 類可與高級 Screen 類交互,程序可在需要時(shí)在 Canvas 中摻入高級類的組件。 Canvas 提供了鍵盤事件、指點(diǎn)桿事件(如果設(shè)備支持), 并定義了允許將鍵盤按鍵映射為游戲控制鍵的函數(shù) 。鍵盤事件由鍵代碼指定,但這樣控制游戲會導(dǎo)致缺乏通用性,并不是每個(gè)設(shè)備的鍵盤布局都適合游戲的操作。應(yīng)當(dāng)將鍵代碼轉(zhuǎn)換為游戲鍵的代碼,以便硬件開發(fā)商能定義他們自己的游戲鍵布局。本程序中,操縱用戶坦克運(yùn)行的按鍵都定義為游戲控制鍵,這樣便能適應(yīng)所有的機(jī)器 [13]。 Graphics 類 Graphics 類中提供了一套各不相同的關(guān)于圖形繪制的方法 ,一般來說,圖形繪制首先要調(diào)用相關(guān)的方法進(jìn)行顏色設(shè)置、坐標(biāo)變換和剪裁。針對不同的需要,Graphics 類中提供了用于描繪線條、繪制和填充矩形或圓角矩形、繪制和填充圓弧以及文本和圖像的方法。程序只能在 paint()函數(shù)中使用 Graphics 繪制,GameCanvas 可調(diào)用 getGraphics()函數(shù)直接繪制在緩沖區(qū)上,可以在任何時(shí)間請 16 求傳輸?shù)角芭_。其對象會被傳給 Canvas 的 paint()函數(shù),以便最終顯示。 圖片格式 PNG(Portable Network Graphics)格式是 MIDlet 唯一支持的圖象格式。 PNG 格式圖片中包含許多定義其圖片特性的冗余部分 (Chunks)。這些代碼包含在每一個(gè)單獨(dú)的 png 格式圖象中,然而如果將多個(gè) png 圖象合并在一張幅面稍大一些的整圖中,多個(gè) chunks 就可以得到精簡,圖片的大小可以得到控制。使用 Image 類中的 createImage 函數(shù)可從整圖中分割出所需要的元素。 Game 包中的 TiledLayer和 Sprite 類都整合了這樣的功能。 雙緩沖技術(shù) 在沒有 前,進(jìn)行游戲繪圖一般需要手動編程使用雙緩沖。需要在paint()方法內(nèi)所想要畫的圖形畫在一張預(yù)先準(zhǔn)備好的背景,等所有繪圖操作都完成后再將背景的數(shù)據(jù)拷貝到實(shí)際的屏幕上。 Image 類提供了一個(gè)建立背景的靜態(tài)方法 createImage(int width, int height),再利用 getGraphics()方法取得屬于這個(gè)背景的 Graphics 對象,所進(jìn)行的繪圖操作都會作用在背景上,等到全部的繪圖操作完成后,再調(diào)用 drawImage()方法將背景的數(shù)據(jù)復(fù)制到實(shí)際顯示的屏幕上。 這樣的技術(shù)在繪制動畫時(shí)特別有用。繪制動畫時(shí)經(jīng)常需要不斷地更新畫面,而更新畫面的操作就是先將屏幕 以 fillRect()的方式清除,再將下一張圖片畫在屏幕上,然而反復(fù)的清除及重繪會造成屏幕的閃爍現(xiàn)象 (flicker),因此使用雙重緩沖的好處就是在背景進(jìn)行這個(gè)清除及重繪的操作,再將完成的繪圖拷貝到屏幕上,由于用戶看不到清除的操作,因此就不會出現(xiàn)閃爍的現(xiàn)象了。 按鍵處理 事件可以分為:低層事件 (lowlevel event)與高層事件 (highlevel event)。低層事件一般用來處理設(shè)備事件,如:按鍵事件、探針事件。高層事件用來處理應(yīng)用中的相關(guān)事件,如:命令事件、組件狀態(tài)變化事件。由于開發(fā) 手機(jī)游戲時(shí)我們主要用到的是 Key 事件的處理方法,因?yàn)橐苿釉O(shè)備的鍵盤是傳遞用戶意圖的最主要的輸入設(shè)備, Key 事件屬于低層事件。那么低層事件中用下面的兩種方法來處理應(yīng)用的 Key 事件。 在鍵盤響應(yīng)中又分為監(jiān)聽按鍵處理和放開按鍵處理,本章接下面將以更詳細(xì)的內(nèi)容來介紹這兩個(gè)部分。 17 Key Pressed 方法 方法 key Pressed 是用來處理鍵被按下的事件,這個(gè)方法沒有與其對應(yīng)的顯示的聽眾對象 (Listener),這些聽眾對象有系統(tǒng)根據(jù)實(shí)際對象缺省提供,例如后面提到的 Canvas 對象就是默認(rèn)的 key 事件 聽眾對象,它缺省地實(shí)現(xiàn)了 Key Listener接口 [14]。簡單的一個(gè)樣例代碼: //監(jiān)聽按鍵信息并處理按鍵 public void keyPressed (int keyCode) { if (keyCode 0) { } } //輸出當(dāng)前被按下鍵的鍵碼 System. (“keyPressed ” +( (char) keyCode ) )。 } else { … } 當(dāng)按下手機(jī)的操作鍵盤上的按鍵時(shí),就會觸發(fā)這 key 事件,系統(tǒng)并會自動調(diào)用 keyPressed( )方法, 并且系統(tǒng)將捕獲到的鍵碼傳遞給該方法,在上面的那段代碼中方法判斷了所按的按鍵值是否大于 0,如果大于 0 輸出所按的手機(jī)鍵盤上的實(shí)際值,否則執(zhí)行其他的操作任務(wù)。 在本程序中 KeyPressed( )方法應(yīng)用于整個(gè)程序的各個(gè)可交互界面,如菜單部分,選關(guān)部分和游戲部分等等。 Key Released 方法 可以說方法 key Released 與上面提到的 keyPressed 方法是對應(yīng)的。它是用來處理手機(jī)操作鍵盤上的按鍵被釋放的事件,這個(gè)方法也同樣沒有與之對應(yīng)的顯示的聽眾,這些聽眾也是由系統(tǒng)根據(jù)實(shí)際對象 提供的。下面是一個(gè)樣例代碼: / /輸出當(dāng)前被釋放鍵的鍵碼 public void keyReleased(int keyCode) { if (keyCode 0 ) { } } 18 //輸出當(dāng)前被 釋放 鍵的鍵碼 (“keyReleased ” +( (char) keyCode) )。 } else { … } } 當(dāng)釋放手機(jī)操作鍵盤上被按下的按鍵時(shí),則會觸發(fā)這個(gè) key 事件,系統(tǒng)并會自動交由 keyReleased( )方法來處理該事件,同樣的上面的這段代碼中,該方法判斷了所按的按鍵值是否大于 0,如果大于 0 則輸出所釋放的手機(jī)鍵盤上的被按下的按鍵的實(shí)際鍵值,否則執(zhí)行其他的操作任務(wù)。 內(nèi)存使用的最佳化 通常在 MIDP 應(yīng)用程序的手機(jī)執(zhí)行環(huán)境中,所牽涉的內(nèi)存有下列三種: 一 、應(yīng)用程序存儲內(nèi)存 二 、 RecordStore 存儲內(nèi)存 三 、執(zhí)行時(shí)期內(nèi)存 (Java Heap)。 其中前兩種是持久性的內(nèi)存,關(guān)閉電源后還能保持?jǐn)?shù)據(jù)的正確性,通常這兩種內(nèi)存所能存儲的容量是合并計(jì)算的,這個(gè)上限對每種手機(jī)都不一樣,大部分在一兩 百 KB 內(nèi)。在這樣的情況下需要在不影響原有功能的情況下適當(dāng)?shù)目s減 JAR文件的大小,除了可以克服內(nèi)存空間的限制外,也能大幅度縮短下載的時(shí)間(費(fèi)用也降低了),勢必會有更多的人愿意下載所開發(fā)的程序。 為了避免這種情況的發(fā)生,我們找出了幾種 方法: 第一,就是盡量縮短命名的長度。在應(yīng)用程序內(nèi),對于所建立的類、接口、方法及變量名而言,都需要賦予一個(gè)識別的名稱,所命名的名稱每多一個(gè)字符就會在類文件內(nèi)多產(chǎn)生一個(gè)字節(jié),對于一個(gè)較復(fù)雜的應(yīng)用程序而言就會增加為數(shù)不小的數(shù)據(jù)量。所有這些可以借助混淆器來幫助實(shí)現(xiàn)。 第二是減少復(fù)雜的程序結(jié) 構(gòu),為一些共同的行為建立一個(gè)抽象類 (Abstract Class) 來表示繼承的子類的共通性。 第三是減少圖形數(shù)據(jù)的大小。將 PNG 格式的小分辨率圖象合并在一張大的高分辨率圖象中,由于減少了 chunks,將比合并前的總大小減少許多。這樣在處理起來就會更加流暢和節(jié)省運(yùn)行時(shí)間。 19 混淆器 (Obfuscator)的使用 Java 語言并沒有完全編譯成二進(jìn)制可執(zhí)行文件,編譯出的 .class 文件是一種介于源程序和二進(jìn)制之間的一中基于半解釋的字節(jié)碼,需要虛擬機(jī)來執(zhí)行。它包括了所有的信息。然而這樣會導(dǎo)致 .class 很容 易被反編譯為源代碼,從而不能保護(hù)作者的知識成果。目前流行的如 decode, JAD 等反編譯工具可以以很快的速度生成源文件。如果不加以施行有效的措施,將造成嚴(yán)重的后果。 由此引入混淆器的概念?;煜鲗⒋a中的所有變量、函數(shù)、類的名稱變?yōu)楹喍痰挠⑽淖帜复?,如果缺乏相?yīng)的函數(shù)名指示和程序注釋,即使被反編譯,也將難以閱讀。 混淆器的作用不僅僅是保護(hù)代碼,它也有精簡編譯后程序大小的作用。由于以上介紹的減少變量、函數(shù)的命名長度的關(guān)系,編譯后也會從 .class 文件中減少這些冗余的信息?;煜螅w積大約能減少 25%,這對當(dāng)前費(fèi)用較貴的無線網(wǎng)絡(luò)傳輸是有一定意義的。 為了能與各種 IDE 集成,就像 Java2 SDK 一樣,混淆器采用命令行參數(shù)的形式,以便可被其調(diào)用。目前流行的 Obfuscator 有 RetroGuard 等 [15]。 本章小結(jié) 本章通過對坦克大戰(zhàn)運(yùn)行過程中可能存在的一些技術(shù)問題進(jìn)行了簡要的分析,和對程序中所需要使用到的技術(shù)有了一個(gè)簡要的了解,接下來的一個(gè)章節(jié)就是對程序進(jìn)行理論的分析。 20 第五章 程序分析和具體實(shí)現(xiàn) 游戲總體 控制類 此次設(shè)計(jì)的坦克大戰(zhàn)總共 20 關(guān),每關(guān)會有不同的地圖,同時(shí) 要考慮其中的地圖元素。地圖元素有:空白區(qū)域、鐵墻、磚墻、草地和飛鷹標(biāo)志,飛鷹標(biāo)志是玩家守護(hù)的對象。由于專業(yè)限制本設(shè)計(jì)所有地圖美工文件和聲音文件均是由朋友提供。 每個(gè) MIDlet 程序都必須有一個(gè)主類,該類必須繼承自 MIDlet。它控制著整個(gè)程序的運(yùn)行,并且可以通過相應(yīng)函數(shù)從程序描述文件中獲取相關(guān)的信息。該類中擁有可以管理程序的創(chuàng)建、開始、暫停(手機(jī)中很可能有正在運(yùn)行程序卻突然來電的情況,這時(shí)應(yīng)進(jìn)入暫停狀態(tài)。)、結(jié)束的函數(shù)。 進(jìn)入時(shí),首先載入畫面的不是游戲運(yùn)行狀態(tài),而是提供游戲的基本信息,當(dāng)再次選擇開始時(shí)才正式 運(yùn)行。游戲的啟動選項(xiàng)畫面在 TankCanvas 類中,在控制主程序運(yùn)行的 MIDlet 中, startApp()函數(shù)隨即調(diào)用了 Displayable 的 setCurrent()函數(shù)將當(dāng)前屏幕設(shè)置為 TankCanvas。同時(shí)這個(gè)類還繼承了 mandListener,這樣就可以使用高級界面的 Command 按鈕。繼承了 mandListener 的類必須擁有 mandAction()以決定對按鍵采取什么樣的行為。即按鈕事件觸發(fā)后需執(zhí)行的函數(shù)。在設(shè)置好 mandlistener 后,需要調(diào)用 setCommandListener()以將按鈕事件激活。鍵盤事件中,可用 getCommandType()返回的 Command 類型來確定選擇的是什么按鈕 , 本程序中主要是通過 MEAU 命令按鈕來連接各個(gè)界面之間的相互轉(zhuǎn)換。 在本程序開始的界面中,先由下而上先顯示出本程序的片頭圖片: BattleCity,在圖片顯示動畫結(jié)束之后會顯示出供玩家選擇的三個(gè)選項(xiàng)按鈕,它們分別為:PLAY、 DIFFICALTY、 CONSTRUCTION 代表著開始游戲、難度選擇和游戲說明。選擇開始游戲后,手機(jī)界面窗口會彈出一個(gè)關(guān)卡選項(xiàng)界面,通過上下鍵玩家可以自 由選擇想要進(jìn)入的關(guān)卡,點(diǎn)擊確定即可進(jìn)入選擇的關(guān)卡進(jìn)行游戲。在難度選擇界面玩家可以自由選擇普通模式和困難模式,普通模式屏幕上最多出現(xiàn)的敵方坦克數(shù)為 5,而困難模式屏幕上能出現(xiàn)的最大坦克數(shù)為 7。在游戲說明界面玩家可以了解到游戲的一些基本信息,以及制作者的相關(guān)情況。在本程序中主要劃分為 8 個(gè)類: TankCanvas、 TankMIDlet、 Enemy、 SoundPlayer、 EnemyPool、 Hero、Bonous、 Bullet。下文圍繞著具體的游戲邏輯以及涉及到的若干主要的類對程序的運(yùn)行進(jìn)行簡要的分析。 21 主 游戲邏輯及涉及到的若干類 TankCanvas 主管著所有類之間的協(xié)調(diào),決定何時(shí)死亡,何時(shí)分配新的敵人,及控制敵人出現(xiàn)處的閃光圖標(biāo)、游戲結(jié)束后的顯示字樣。它運(yùn)行在獨(dú)立的線程中,以恒定的頻率刷新畫面。刷新速度需大于 30 毫秒才能使畫面顯示因人眼的暫時(shí)停留效應(yīng)流暢運(yùn)行。本程序 設(shè)置 為 50 毫秒。其主邏輯如圖 12 所示。程序中建立了另外的兩個(gè)類,分別表述了敵人坦克和玩家坦克的功能。它們分別為: Enemy和 Hero。 這兩個(gè)類均在 TankCanvas 中建立了對象,以便進(jìn)行統(tǒng)一調(diào)度。其他的,如 記分統(tǒng)計(jì)畫面也都需在此主邏輯中建立相 應(yīng)對象。還需保存的變量有,游戲開始時(shí)間、結(jié)束時(shí)間(用于統(tǒng)計(jì)分?jǐn)?shù))、敵人的總數(shù)、屏幕上敵人的數(shù)量、下一個(gè)敵人需要出現(xiàn)的位置(總共允許在三個(gè)不同的位置出現(xiàn),分別位于屏幕的左、中、右方)、游戲是否已成功結(jié) 束或是否已死亡。 構(gòu)造函數(shù)中,需初始
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1