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

正文內(nèi)容

基于eclipse平臺的飛機游戲的開發(fā)畢業(yè)論文設(shè)計-資料下載頁

2025-06-22 00:49本頁面
  

【正文】 lumn=i%15 取得、行由 row=(icolumn)/15 取得。 畫出地圖后,由 ()將地圖添加到 LayerManager 類對象 lm 中。由于地圖位于 Layer 的最低層,即離用戶視線最遠的層,所以 Tiledlayer 最后一個被添加到 lm 中。 地圖的移動 根據(jù)游戲的設(shè)定,游戲中地圖是向下移動的,實現(xiàn)此功能的方法如下: 首先,在使用 createBackGround()函數(shù)創(chuàng)建地圖數(shù)組時,用(row+1)*16getHeight() 語句對整型變量 row2 賦值,其中 row+1 代表地圖有多少列, 16 為地圖片的高度,而減去 getHeight()是因為要留出一個屏幕的可視區(qū)域,由于 J2ME 規(guī)定坐標(biāo)系中下方向為正,所以使用語句 y1=row2將 row2 的數(shù)值變?yōu)樨?fù)數(shù)。 其次,render()函數(shù)中,使用 (0,0,getWidth(),getHeight()+10000)設(shè)定可視區(qū)域的范圍,(0,0)表示 View Window 的起始坐標(biāo),(getWidth() ,getHeight()+10000) 使用 (g,0,y1)決定View Window 從屏幕的哪里畫起。在 run()函數(shù)中的 while(conti)中,使用語句 y1=y1+1 使得每次繪圖都使地圖下移 1 個象素。如圖 46 所示。 gameScreen 類的構(gòu)造函數(shù)gameScreen 類的構(gòu)造函數(shù)要將游戲中出現(xiàn)的所有精靈都實例化,實際上,這種方法嚴(yán)重的占用了內(nèi)存,但在當(dāng)時,我并沒有意屏幕13識到這一點。由于敵人要求不停的出現(xiàn),但是不可能設(shè)置過多的精靈,解決的辦法是設(shè)定 6 個 Sprite 類對象j0、jj2 及 jbulletjbulletjbullet2 ,分別代表三架敵機及其配屬的子彈。所以在 gameScreen 類的構(gòu)造函數(shù)分配這 6 個 Sprite 類的存儲空間,并且使用 new Sprite(Image img, int width,int height)實例化這 6 個類變量。同關(guān)尾 cboss 與游戲進行中的大飛機其他的 Sprite 類對象都需要使用相同的方法實例化。同樣處于節(jié)約內(nèi)存的考慮,sboss 與 cboss 同用 3 個 Sprite 類對象 bossbullet0,1,2。 在構(gòu)造函數(shù)中,定義 boolean 型變量 conti=true。conti 的作用在于控制是否進行游戲畫面的重繪及其他需要在畫面重繪前進行的運算。 在構(gòu)造函數(shù)中,將 mybullets 類里的 no 和 score 初始化,現(xiàn)在看來 no 的初始化沒有必要,但是score 的初始化是必須的,因為這個變量存儲著玩家每次游戲的成績,如果不在此進行初始化,則玩家重新開始游戲后 score 并不歸 0。 關(guān)于 mandAction()方法每個創(chuàng)建 Command 實例的 J2ME 的應(yīng)用程序也必須創(chuàng)建實現(xiàn) CommandListener 接口的實例。每當(dāng)用戶通過 mandAction()方法的方式與命令進行交互的時候,就會通過 現(xiàn) CommandListener 的類必須實現(xiàn) mandAction()方法。在 mandAction()方法中,使用 getabel()方法獲取命令的標(biāo)簽。如果 getLabel()=“暫停”時,表示玩家點擊了暫停鍵,此時,conti 賦值為 false,游戲畫面的繪制及游戲相關(guān)的運算暫停,并且,使用removeCommand(c)語句將“暫?!币瞥褂?addCommand(new Command(繼續(xù),2))。將”繼續(xù)“按紐”添加進來。當(dāng)玩家點擊“繼續(xù)“時,conti 賦值為 true,并且,一定要調(diào)用 start()方法,否則繼續(xù)功能不可用。必須調(diào)用 start()方法的原因是:J2ME 的線程已 stop()方法拿掉,如果想停止線程的運做,就必須依靠一個旗標(biāo)(flag),在本程序中,flag 就是 boolean 型變量 conti。所以一旦此標(biāo)識變量被設(shè)為 false,那么 while(conti)循環(huán)就會結(jié)束,線程也會跟著結(jié)束。當(dāng)用戶按下“繼續(xù)”的時候,start()將重新產(chǎn)生一個線程繼續(xù)執(zhí)行相關(guān)的運算和畫面繪制。當(dāng)玩家通關(guān)時或者任務(wù)失敗時,將顯示相應(yīng)信息,并使用上面的方法將“暫?!辨I變?yōu)椤胺祷亍辨I盤,當(dāng)點擊“返回”鍵時,將返回主菜單選項,調(diào)用類 lzhhdm 里的方法 menuscreensecond(),在此方法中,實例化一個 MenuScreen 類對象,并且使選項“開始游戲”改變?yōu)椤霸賮硪淮巍?圖 47)。完成此項功能的語句子為 [0] =“再來一次”。當(dāng)選擇”再來一次“時,使用gamescreen=new gameScreen(this)將使所有變量重新被初始化,如地圖的繪制、敵人出現(xiàn)位置的重置、敵人的數(shù)量、玩家飛機的當(dāng)前位置等。使用()重新開始程序的循環(huán)。 Sprite 類對象的碰撞檢測及相關(guān)屬性游戲進行中,即在 while(conti){ }中,需要進行玩家飛機、子彈與敵機的碰撞檢測,即使用函數(shù)collidesWith(Sprite,boolean)。由于設(shè)計的問題,玩家的子彈與敵機的碰撞檢測被寫在了 mybullets 類中,并且只檢測第一發(fā)子彈是否與敵人相碰撞,如果碰撞為真時,則使用setVisible(false)函數(shù)將敵機隱藏,使用 setImage()函數(shù)將子彈精靈的三張圖片置換為爆炸圖片( 圖 48 )。當(dāng)敵人剩余飛機消失后,即所有的敵人都飛出了屏幕后,使用函數(shù)setVisible(true)將敵機重新設(shè)置為可見。在按“開火”鍵時,使用 setImage()函數(shù)將 huokebullets 重新設(shè)定為子彈圖片( 每次擊落敵機后屏幕上的爆炸效果有 3 團,并且按“開火”后爆炸圖片就消失了,實際上 setVisavle(false)的應(yīng)該是子彈數(shù)組,而對敵人精靈使用 setImage(),這樣效果會好一些) 。敵機與玩家的碰撞檢測原理同上,都是使圖 4714用的 collidesWith()函數(shù),遺憾的是,我在寫這段代碼的時候,并沒有考慮設(shè)置玩家有 4 次機會,所以對敵人飛機 setVisable(fasle)了,而將玩家的飛機換成了爆炸圖片,之后,添加了玩家 4 次機會這個功能,由于玩家被擊落后會重新從屏幕下方進入屏幕,所以爆炸的圖片一閃而過,效果不是很好。 玩家 4 次游戲機會的實現(xiàn)方法 根據(jù)游戲設(shè)置,玩家在每關(guān)中有共四次機會,當(dāng)玩家飛機被擊中或撞擊爆炸后,程序首先檢測整型變量 playerno 的值,并根據(jù) playerno 的值決定屏幕右上角所畫玩家飛機標(biāo)志的數(shù)量(參考圖 48),playerno 的初始值設(shè)為 3,因為碰撞后才減 1,所以玩家共有 4 次機會,當(dāng) playerno0 時,游戲結(jié)束,同時將變量 pver 賦值為 1,render() 或 renderboss()函數(shù)中,over=1 代表在屏幕上 GAMEOVER 等相關(guān)信息,同時,將整型變量 inputno 賦植為 1,以使手機的方向鍵失效,以消除玩家可以控制爆炸圖像移動這個 BUG。同時整型變量 pzbz 賦植為 1,以消除玩家爆炸圖像繼續(xù)與敵人進行碰撞檢測這個 BUG。當(dāng) playerno0 時,碰撞后,將變量 planert 賦值為 1,在之后的 if(planert==1)判斷語句中,重新設(shè)定玩家飛機的圖片和可視狀態(tài),同時使用 setPosition()函數(shù)設(shè)定玩家非的位置在屏幕下方。設(shè)定 pzbz=1,即不檢測碰撞,玩家有短暫時間無敵,無敵時間由屏幕右上角進度條表示。設(shè)定 inputno=1,即飛入屏幕的過程中手機鍵盤是不可以用的。設(shè)置 planert=2,即以上這些設(shè)置只執(zhí)行一便。在 if(planert==2)判斷語句中,使用語句 move(0,2)使飛機自己向上運動,使用 if(()(planepo24))判斷飛機是否到達屏幕最下方(planepo 是屏幕下邊緣的坐標(biāo)),如條件為真,則將inputno 設(shè)置為 1,表示鍵盤可用,將 planert 賦值為 3,使其不再執(zhí)行以上各步。 input() input()函數(shù)的作用是檢測用戶的輸入。首先使用if(inputno==0)判斷用戶的輸入是否被禁止,如為真,則用戶輸入不被禁止。其次,調(diào)用 getKeyStates()查詢按鍵的狀態(tài)。當(dāng)按方向鍵時,玩家飛機就向不同的方向運行,這需要使用(int x,int y)函數(shù),當(dāng)玩家控制飛機向左或右飛時,需要使 ()函數(shù)改變飛機的圖形( 參見圖 47,此時飛機右飛 )。同時,還需要判斷飛機是否飛出屏幕,如,當(dāng)飛機右飛時,用 if(()(getWidth()()))語句判斷(getWith() 為屏幕的寬度,() 為玩家飛機 c1 的寬度) ,如果條件為真,則使用 ((getWidth()()),())語句將飛機設(shè)置在緊靠屏幕右邊的位置。上、下、左的設(shè)置原理同上。語句 if((keystateamp。LEFT_PRESSED)==0)的作用是消除左、右飛后在上、下飛時飛機的形態(tài)不變的BUG。如果為真,則執(zhí)行語句 (0),表示只要左鍵松開飛機的形態(tài)都是平飛。根據(jù)游戲設(shè)定,玩家一次最多只能發(fā)三組子彈,并且子彈有射程限制(在類 mybullets 中使用整型變量 no 表示),而當(dāng)玩家按下“開火“鍵時,即 if((keystateamp。FIRE_PRESSED)!=0)中判斷條件為真時,首先執(zhí)行循環(huán)語句 for(int i=0。i=6。i=i+3),即檢測 3 組子彈中每組的第一發(fā),即 0,3,6。其次,檢測 huokebullet[i].no 是否等于1,當(dāng)?shù)扔?1 時使用語句 for( int z=i。zi+3。z++)初始化該組子彈中的 3 發(fā)子彈,而設(shè)置子彈位置的函數(shù)應(yīng)該在 if(huokebullet[i].no==1)語句外設(shè)置,因為當(dāng)初設(shè)計的時候 mybullets 類里的函數(shù)寫成了一次設(shè)置三組子彈的形式。huokebullet[z].no=huokebullet[z].bulletheight 賦予子彈射程。當(dāng)程序循環(huán)運行時 no,當(dāng)一次發(fā)射了三組子彈后,只有某一組子彈消失,即 no 等于 1 后才能繼續(xù)發(fā)射子彈。現(xiàn)在看來,玩家發(fā)射子彈的設(shè)置是完全失敗的,降低了效率。 render()和 renderboss()圖 4815圖 410在方法 render()過程中,除了要重繪飛機、地圖、子彈外還要在上方繪制關(guān)卡信息、戰(zhàn)果、玩家飛機數(shù)、及無敵狀態(tài)時的無敵時間、大飛機生命條等。首先使用 ()和 ()設(shè)定可視范圍 ViewWindow 和從哪里畫起 (見 )。其次,使用()繪制屏幕上方的關(guān)卡信息、戰(zhàn)績、玩家剩余生命標(biāo)志。drawString()中使用 (huokebullet[0].rscore()+huokebullet[3]. rscore()+huokebullet[6].rscore())返回玩家成績 score 的字符串表示。其中根據(jù) playerno 的值繪出玩家的飛機標(biāo)志數(shù)(應(yīng)該有更好方法,但是沒有想到 )當(dāng)每次刷新繪圖頁面時,應(yīng)使用 GameCanvas 的 flushGraphics()將屏幕后臺的緩沖區(qū)內(nèi)的圖像刷新到前臺來(flushGraphics()應(yīng)該寫在 render(){ }的最后)。renderboss()方法重繪的是關(guān)尾的精靈 cboss、相關(guān)信息等,與 render()的區(qū)別在與于函數(shù) (g,0,0),起始坐標(biāo)是不可變的,即,關(guān)尾的地圖背景是不可變的。實際上,renderboss()是完全不需要的,只要在 render()函數(shù)中設(shè)置相關(guān)標(biāo)志位就可以解決關(guān)尾的繪圖問題。玩家飛機的生命標(biāo)志使用 drawImage()就可以繪制在屏幕上了。 游戲中的獎勵及相關(guān)飛機的行為 根據(jù)游戲設(shè)定,當(dāng) y1=1000 時,會出現(xiàn)如圖 48 所示的飛機(sboss),當(dāng)玩家擊落他后,屏幕會顯示“援軍到達“,并且玩家剩余飛機數(shù)加 1。使用 if((y1==1000)amp。amp。(sbz==0)){ }設(shè)定 sboss 的初始位置,根據(jù)游戲設(shè)定,sboos 從屏幕上方倒飛入屏幕,所以 sboss 設(shè)定的初始位置(50,planepoup65),其中planepoup 為屏幕上邊緣的標(biāo)志位。最后,要將 sbz 賦值為 1,消除 sboos 不停設(shè)置初始位置的 BUG。當(dāng) sboss 飛入屏幕后,將 sbz 賦值為 2,以執(zhí)行下面的 if(sbz==2)語句。 在判斷語句 if(sbz==2)里,將根據(jù)玩家的位置自動飛行。首先,根據(jù)玩家飛機的位置對 sbmove 賦值,當(dāng) c1 在 sboos 的上、下、左、右時,其對應(yīng)的值為4 在這 4 個 if 語句中,要設(shè)置標(biāo)志位(smovebz==0)。設(shè)置這個標(biāo)志位的目的是防止 sboos 根據(jù) c1 的位置不停的改變運行狀態(tài),即防止 sboos 成為跟蹤飛機。當(dāng) sboos 根據(jù) c1 的位置改變一次運行方向后,smovebz 賦值為 1,即不檢測 c1 的位置。只有 sboss 運行到屏幕的邊緣時,才將 smovebz 重新賦值為 0,使其可以再次通過 c1 的位置決定 sboos 的運行方向。當(dāng)玩家子彈擊中 sboss 后,使用 (1),此時飛機變紅,在本次 repaint 結(jié)束前,使用(0)使飛機變?yōu)楸緛眍伾?,而程序設(shè)定每 1/20 秒畫一次,由此得到飛機被擊中后變色的效果。( 參見圖
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1