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

正文內(nèi)容

基于eclipse平臺(tái)的飛機(jī)游戲的開(kāi)發(fā)畢業(yè)論文設(shè)計(jì)(參考版)

2025-07-06 21:54本頁(yè)面
  

【正文】 在判斷語(yǔ)句 if(sbz==2)里,將根據(jù)玩家的位置自動(dòng)飛 行。 最后,要將 sbz 賦值為 1,消除 sboos 不停設(shè)置初始位置的 BUG。amp。 游戲中的獎(jiǎng)勵(lì)及相 關(guān)飛機(jī)的行為 根據(jù)游戲設(shè)定,當(dāng) y1=1000 時(shí),會(huì)出現(xiàn)如圖 48 所示的飛機(jī)(sboss),當(dāng)玩家擊落他后,屏幕會(huì)顯示 “援軍到達(dá)“,并且玩家剩余飛機(jī)數(shù)加 1。實(shí)際上, renderboss()是完全不需要的,只要在 render()函數(shù)中設(shè)置相關(guān)標(biāo)志位就可以解決關(guān)尾的繪圖問(wèn)題。 其中根據(jù) playerno 的值繪出玩家的飛機(jī)標(biāo)志數(shù) (應(yīng)該有更好方法,但是沒(méi)有想到 )當(dāng)每次刷新繪圖頁(yè)面時(shí),應(yīng)使用GameCanvas 的 flushGraphics()將屏幕后臺(tái)的緩沖區(qū)內(nèi)的圖像刷新到前臺(tái)來(lái) (flushGraphics()應(yīng)該寫(xiě)在 render(){ }的最后 )。 其次,使用()繪制屏幕上方的關(guān)卡信息、戰(zhàn)績(jī)、玩家剩余生命標(biāo)志。 render()和 renderboss() 在方法 render()過(guò)程中,除了要重繪飛機(jī)、地圖、子彈外還要在上方繪制關(guān)卡信息、戰(zhàn)果、玩家飛機(jī)數(shù)、及無(wú)敵狀態(tài)時(shí)的無(wú)敵時(shí)間、大飛機(jī)生命條等。當(dāng)程序循環(huán)運(yùn)行 時(shí) no,當(dāng)一次發(fā)射了三組子彈后,只有某一組子彈消失,即 no 等于 1 后才能繼續(xù)發(fā)射子彈。z++)初始化該組子彈中的 3 發(fā)子彈,而設(shè)置子彈位置的函數(shù)應(yīng)該在 if(huokebullet[i].no==1)語(yǔ)句外設(shè)置,因?yàn)楫?dāng)初設(shè)計(jì)的時(shí)候 mybullets 類里的函數(shù)寫(xiě)成了一次設(shè)置三組子彈的形式。其次,檢測(cè) huokebullet[i].no 是否等于1,當(dāng)?shù)扔?1 時(shí)使用語(yǔ)句 for( int z=i。i=6。 根據(jù)游戲設(shè)定,玩家一次最多只能發(fā)三組子彈,并且子彈有射程限制 (在類 mybullets 中使用整型變量 no 表示 ),而當(dāng)玩家按下 “開(kāi)火 “鍵時(shí),即 if((keystateamp。LEFT_PRESSED)==0)的作用是消除左、右飛后在上、下飛時(shí)飛機(jī)的形態(tài)不變的BUG。上、下、左的設(shè)置原理同上。 當(dāng) 按方向鍵時(shí),玩家飛機(jī)就向不同的方向運(yùn)行,這需要使用 (int x,int y)函數(shù),當(dāng)玩家控制飛機(jī)向左或右飛時(shí),需要使 ()函數(shù)改變飛機(jī)的圖形 (參見(jiàn)圖 47,此時(shí)飛機(jī)右飛 )。 首先使用 if(inputno==0)判斷用戶的輸入是否 被禁止,如為真,則用戶輸入不被禁止。 在 if(planert==2)判斷語(yǔ)句中,使用語(yǔ)句 move(0,2)使飛機(jī)自己向上運(yùn)動(dòng),使用 if(()(planepo24))判斷飛機(jī)是否到達(dá)屏幕最下方 (planepo 是屏幕下邊緣的坐標(biāo)),如條件為真,則將 inputno 設(shè)置為 1,圖 47 圖 48 14 圖 410 表示鍵盤可用,將 planert 賦值為 3,使 其不再執(zhí)行以上各步。設(shè)定inputno=1,即飛入屏幕的過(guò)程中手機(jī)鍵盤是不可以用的。 當(dāng) playerno0 時(shí),碰撞后,將變量 planert 賦值為 1,在之后的 if(planert==1)判斷語(yǔ)句中,重新設(shè)定玩家飛機(jī)的圖片和可視狀態(tài),同時(shí)使用 setPosition()函數(shù)設(shè)定玩家非的位置在屏幕下方。 玩家 4 次游戲機(jī)會(huì)的實(shí)現(xiàn)方法 根據(jù)游戲設(shè)置,玩家在每關(guān)中有共四次機(jī)會(huì),當(dāng)玩家飛機(jī)被擊中或撞擊爆炸后,程序首先檢測(cè)整型變量 playerno 的值,并根據(jù) playerno 的值決定屏幕右上角所畫(huà)玩家飛機(jī)標(biāo)志的數(shù)量 (參考圖 48), playerno 的初始值設(shè)為 3,因?yàn)榕鲎埠蟛艤p 1,所以玩家共有 4 次機(jī)會(huì),當(dāng) playerno0 時(shí),游戲結(jié)束,同時(shí)將變量 pver賦值為 1, render()或 renderboss()函數(shù)中, over=1 代表在屏幕上GAMEOVER 等相關(guān)信息,同時(shí),將整型變量 inputno 賦植為 1,以使手機(jī)的方向鍵失效,以消除玩家可 以控制爆炸圖像移動(dòng)這個(gè)BUG。在按 “開(kāi)火 ”鍵時(shí),使用 setImage()函數(shù)將 huokebullets 重新設(shè)定為子彈圖片 (每次擊落敵機(jī)后屏幕上的爆炸效果有 3 團(tuán),并且按 “開(kāi)火 ”后爆炸圖片就消失了,實(shí)際上 setVisavle(false)的應(yīng)該是子彈數(shù)組,而對(duì)敵人精靈使用 setImage(),這樣效果會(huì)好一些 )。由于設(shè)計(jì)的問(wèn)題,玩家 的子彈與敵機(jī)的碰撞檢測(cè)被寫(xiě)在了 mybullets 類中,并 且只檢測(cè)第一發(fā)子彈是否與敵人相碰撞,如果碰撞為真時(shí),則使用setVisible(false)函數(shù)將敵機(jī)隱藏,使用 setImage()函 數(shù) 將子彈精靈的三張圖片置換為爆炸圖片 ( 圖 48 )。使用 ()重新開(kāi)始程序的循環(huán)。完成此項(xiàng)功能的語(yǔ)句子為 [0] =“再來(lái)一次” 。當(dāng)用戶按下 “ 繼續(xù) ” 的時(shí)候, start()將重新產(chǎn)生一個(gè)線程繼續(xù)執(zhí)行相關(guān)的運(yùn)算和畫(huà)面繪制。必須調(diào)用 start()方法的原因是: J2ME 的線程已 stop()方法拿掉,如果想停止線程的運(yùn)做,就必須依靠一個(gè)旗標(biāo) (flag),在本程序中, flag 就是 boolean 型變量 conti。將 ”繼續(xù) “ 按紐 ” 添加進(jìn)來(lái)。 在 mandAction()方法中,使用 getabel()方法獲取命令的標(biāo)簽。 關(guān)于 mandAction()方法 每個(gè)創(chuàng)建 Command 實(shí)例的 J2ME 的應(yīng)用程序也必須創(chuàng)建實(shí)現(xiàn) CommandListener 接口的實(shí)例。 conti 的作用在于控制是否 進(jìn)行游戲畫(huà)面的重繪及其他需要在畫(huà)面重繪前進(jìn)行的運(yùn)算。同樣處于節(jié)約內(nèi)存的考慮, sboss 與 cboss 同用 3 個(gè) Sprite 類對(duì)象 bossbullet0, 1, 2。所以在 gameScreen類的構(gòu)造函數(shù)分配這 6 個(gè) Sprite 類的存儲(chǔ)空間,并且使用 new Sprite(Image img, int width, int height)實(shí)例化這 6 個(gè)類變量。 gameScreen 類的構(gòu)造函數(shù) gameScreen 類的構(gòu)造函數(shù)要將游戲中出現(xiàn)的所有精靈都實(shí)例化,實(shí)際上,這種方法 嚴(yán)重的占用了內(nèi)存,但在當(dāng)時(shí),我并沒(méi)有意識(shí)到這一點(diǎn)。 在 run()函數(shù)中的 while(conti)中, 使用語(yǔ)句 y1=y1+1 使得每次繪圖都使 地圖下移 1 個(gè)象素。 地圖的移動(dòng) 根據(jù)游戲的設(shè)定,游戲中地圖是向下移動(dòng)的,實(shí)現(xiàn)此功能的方法如下: 首先,在使用 createBackGround()函數(shù)創(chuàng)建地圖數(shù)組時(shí),用 (row+1)*16getHeight() 語(yǔ)句對(duì)整型變量 row2 賦值,其中 row+1 代表地圖有多 少列, 16 為地圖片的高度,而減去 getHeight()是因?yàn)橐舫鲆粋€(gè)屏幕的可視區(qū)域,由于 J2ME 規(guī)定坐標(biāo)系中下方向?yàn)檎允褂谜Z(yǔ)句 y1=row2 將row2 的數(shù)值變?yōu)樨?fù)數(shù)。 畫(huà)出地圖后,由 ()將地圖添加到 LayerManager 類對(duì)象 lm 中。i++)取得, column 由語(yǔ)句 column=i%15 取進(jìn)入游戲 y11550 pzbzover==0 顯示敵人 玩家被擊落了嗎 ? 玩家是否還有機(jī)會(huì)? 繼續(xù)游戲 是否過(guò)關(guān) 返回主界面 Y Y N Y Y N 圖 44 N 12 (0,y1) y1=y1+1。其中 i 的值由循環(huán) for(int i=0。在方法中,定義整型數(shù)組 map1[]以存儲(chǔ) Cell 的索引值。先利用 TiledLayer 的構(gòu)造函數(shù)建立 TiledLayer,根據(jù)構(gòu)造函數(shù)的參數(shù)可以給定 Cell 數(shù)組 的大小,并且地圖圖片切割成等尺寸的畫(huà)面,并調(diào)用 setCell()設(shè)置具體的圖象格內(nèi)容。 TiledLayer 指的是由一塊一塊類似用瓷磚拼湊起來(lái)的畫(huà)面。 地圖的創(chuàng)建 由于手機(jī)存儲(chǔ)空間的限制,不可能將整張地圖完整地存儲(chǔ)在手機(jī)中,為了節(jié)約空間,往往提出地圖中相同的 圖片組成一張 PNG 格式的圖片,然后象拼圖一樣拼出地圖來(lái),專業(yè)的游戲設(shè)計(jì)者往往自己寫(xiě)一個(gè)地圖編輯器,以使拼圖過(guò)程不是那么痛苦。 gameScreen 類 包括了 LayerManager,這樣所有靜態(tài)和動(dòng)態(tài)的圖象都不需要手動(dòng)刷新,只需要在 LayerManager中加 入所有的需要控制的 精靈 ,在統(tǒng)一由 LayerManager 刷新即可 , 因此 ,在 gameScreen 中創(chuàng)建 LayerManager 的對(duì)象lm,并在構(gòu)造函數(shù)中實(shí)例子化。其主邏輯如圖 44 所示。它運(yùn)行在獨(dú)立的線程中,以恒定的頻率刷新畫(huà)面。 mybullets 類在 gameScreen 中建立了對(duì)象數(shù)組 huokebullet[9],代表玩家所能發(fā)射的 9 發(fā)子彈。類中定義的方法 setfirstposition()起到定義玩家子彈發(fā)射坐標(biāo)的作用 (此方法在設(shè)計(jì)時(shí)起到的作用是消除每按一次開(kāi)火玩家子彈位置就重新定位這個(gè) BUG,但是,這個(gè) BUG 完全 可以用設(shè)置標(biāo)志位的方法消除 )。 11 Mybullets 類繼承 自 Sprite 類,以實(shí)現(xiàn)玩家子彈的相關(guān)功能。 當(dāng)移動(dòng)選項(xiàng)條到某項(xiàng),并點(diǎn)擊 ok 時(shí),在 mandAction()方法中根據(jù) menuIndex 的值判斷選擇了哪個(gè)選項(xiàng),列如當(dāng)選擇“相關(guān)信息 ”時(shí),將調(diào)用 lzhhdm 類中的 renwuShow()方法以顯示“相關(guān)信息” 界面(圖 43),在 renwuShow()方法中, Form 類對(duì)象 a=null,表示清空 Form,并重新調(diào)用用 append()方法在表單上放置 StringItem 類的實(shí)例以顯 示游戲關(guān)于信息, “游戲幫助” 界面的顯示與 “相關(guān)信息” 界面相同,只不過(guò)調(diào)用的是 helpShow()方法。當(dāng)玩家按住上或下鍵時(shí),在函數(shù)keyPressed(int code)中的整型變量 menuIndex 相應(yīng)的減 1 或加 1,相應(yīng)的,在 paint()函數(shù)中會(huì)根據(jù)menuIndex 繪制選項(xiàng)是否被選中。在類 menuscreen 中定義了 lowColor 和 highColor、 highBGColor 三個(gè)整型變量及布爾型變量 co。當(dāng)玩家點(diǎn)擊 ok 后將調(diào)用 (menuscreen) 以顯示游戲菜單 menuscreen(圖 42)。調(diào)用 addCommand()命令建立 ok命令與 Form 之間的關(guān)聯(lián),調(diào)用 setCommandListener()命令使 Form 與 CommandListener 建立關(guān)聯(lián)。使用語(yǔ)句 ok=new Command(ok,1)。本程序主類為lzhhdm, 并實(shí)現(xiàn)接口 CommandListener。該類中擁有可以管理程序的創(chuàng)建、開(kāi)始、暫停(手機(jī)中很可能有正在運(yùn)行程序卻突然來(lái)電的情況,這時(shí)應(yīng)進(jìn)入暫停狀態(tài)。 10 圖 41 圖 42 圖 43 4 程序分析和具體實(shí)現(xiàn) 游戲進(jìn)入前的選擇 每個(gè) MIDlet 程序都必須有一個(gè)主類,該類必須繼承自 MIDlet。對(duì)游戲基本算法等做了詳細(xì)敘述?;煜螅w積大約能減少 25%,這對(duì)當(dāng)前費(fèi)用較貴的無(wú)線網(wǎng)絡(luò)傳輸是有一定意義的。 混淆器的作用不僅僅是保護(hù)代碼,它也有精簡(jiǎn)編譯后程序大小的作用。 由此引入混淆器的概念。目前流行的如 decode, JAD 等反編譯工 具可以以很快的速度生成源文件。它包括了所有的信息。在程序運(yùn)行中也可以調(diào)用 System 類的gc()函數(shù)手動(dòng)收回廢棄的內(nèi)存。其中,允許強(qiáng)制垃圾回收 (Garbage Collection)。 包括內(nèi)存狀況的檢測(cè)(手機(jī)上的內(nèi)存空間十分有限,必須時(shí)刻關(guān)注機(jī)載內(nèi)存是否大于程序所能使用到的最大可能的內(nèi)存空間),網(wǎng)絡(luò)狀況的檢測(cè),運(yùn)行函數(shù)的跟蹤等。 將 PNG 格式的小分辨率圖象合并在一張大的高分辨率圖象中,由于減少了頭文件的大小,將比合并前的總大小減少許多。 (4)盡量不使用靜態(tài)變量。所有這些可以借助混淆器來(lái)幫助實(shí)現(xiàn) (2)所有代碼寫(xiě)為一個(gè)類。 內(nèi)存的優(yōu)化 手機(jī)內(nèi)存空間小,所以在程序設(shè)計(jì)時(shí)應(yīng)該注意以下幾點(diǎn),以盡量減少內(nèi)存的使用: (1)盡量縮短命名的長(zhǎng)度。 使用每組子彈的第一發(fā)作為與敵人進(jìn)行碰撞檢測(cè)的精靈,同時(shí)相關(guān)的標(biāo)志位也設(shè)在第一發(fā)子彈中。由于本游戲僅有一關(guān),所以子彈速度設(shè)定的差別沒(méi)有體現(xiàn)出來(lái)??上в捎跁r(shí)間關(guān)系沒(méi) 有實(shí)現(xiàn)。 在關(guān)尾出現(xiàn)的 BOSS,其在屏幕上方左右移動(dòng)并發(fā)射子彈。 在游戲進(jìn) 行中出現(xiàn)的大型飛機(jī),由于其不可能立即被擊落,所以應(yīng)該設(shè)置其的運(yùn)行方法,理論上講還是根據(jù)玩家飛機(jī)的坐標(biāo),但是,在此設(shè)置一個(gè)標(biāo)志位,使得敵人在取的玩家位置后即開(kāi)始玩家方向運(yùn)動(dòng),這期間,將不執(zhí)行取得玩家飛機(jī)位置重設(shè)飛行方向的步驟。 在普通敵機(jī)中,有一組敵機(jī)的其中一架具有跟蹤功能,其原理為:當(dāng)其進(jìn)入屏幕后,根據(jù)玩家飛機(jī)的
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1