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

正文內(nèi)容

基于javame的手機(jī)游戲(編輯修改稿)

2025-06-10 20:34 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 分析和具體實(shí)現(xiàn) 游戲進(jìn)入前的選擇 每個(gè) MIDlet 程序都必須有一個(gè)主類,該類必須繼承自 MIDlet。它控制著整個(gè)程序的運(yùn)行,并且可以通過(guò)相應(yīng) 函數(shù)從程序描述文件中獲取相關(guān)的信息。該類中擁有可以管理程序的創(chuàng)建、開始、暫停(手機(jī)中很可能有正在運(yùn)行程序卻突然來(lái)電的情況,這時(shí)應(yīng)進(jìn)入暫停狀態(tài)。)、結(jié)束的函數(shù)。本程序主類為 tkdz,并實(shí)現(xiàn)接口CommandLIstener。 首先顯示的是游戲的背景介紹(圖 41),為此,在類 tkdz定義 Form類對(duì)象 a,在 startApp()函數(shù)中判斷 isSplash 是否為真,如果為真的話,將創(chuàng)建 Form類的實(shí)例 a,并且調(diào)用 append()方法在表單上放置 StringItem 類的實(shí)例以顯示游戲背景 信 息 。 使 用 語(yǔ) 句 ok=new Command(ok,1)。 實(shí)例化用addCommand() 命令建立 ok 命令與 Form 之間的關(guān)聯(lián),調(diào)用setCommandListener()命令使 Form 與 CommandListener 建立關(guān)聯(lián)。調(diào)用 Displayable 的seturrent()函數(shù)顯示背景介紹窗口。 進(jìn)入游戲 y11550 pzbzover==0 顯示敵人 玩家被擊落了嗎 ? 玩家是否還有機(jī)會(huì)? 繼續(xù)游戲 是否過(guò)關(guān) 返回主界面 Y Y N Y Y N 圖 44gameScreen 類主要關(guān)系流程圖 N 圖 41 圖 42 13 當(dāng)玩家點(diǎn)擊 ok 后將調(diào)用 (menuscreen)以顯示游戲菜單 menuscreen(圖 42)類 menuscreen 繼承自 Canvas 類,并實(shí)現(xiàn)接口 Runnable 和 CommandListener。在類 menuscreen 中定義了 lowColor 和 highColor、 highBGColor 三個(gè)整型變量及布爾型變量 co。其中 lowColor 賦值為 0x000000FF,代表蘭色, higColor 賦值為 0x00FF0000,代表紅色 ,highBGColor 賦值為 0x00CCCCCC,代表蘭灰色,即背景條。當(dāng)玩家按住上或下鍵時(shí),在函數(shù) keyPressed(int code)中的整型變量 menuIndex 相應(yīng)的減 1 或加 1,相應(yīng)的,在 paint()函數(shù)中會(huì)根據(jù) menuIndex 繪制選項(xiàng)是否被選中。在函數(shù) run()中,如果 co 為真,則不停的repaint(),設(shè)置 co 的意義在于,當(dāng)進(jìn)入游戲主畫面后, co 賦值為 false,以終止繪制選項(xiàng)的repaint(),提高游戲速度。當(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)用 tkdz類中的renwuShow()方法以顯示 ” 關(guān)于 ” 界面(圖 44),在 renwuShow()方法中, Form 類對(duì)象a=null,表示清 空 Form,并重新調(diào)用用 append()方法在表單上放置 StringItem 類的實(shí)例以顯示游戲關(guān)于信息,“幫助”界面(圖 43)的顯示與”關(guān)于“界面相同,只不過(guò)調(diào)用的是helpShow()方法。 圖 43 圖 44 mybullets 類 在介紹游戲主類 gameScreen 類之前,應(yīng)該先簡(jiǎn)要說(shuō)明一下玩家子彈類 mybullets 類,實(shí)際上 ,mybullets 類是應(yīng)該刪除的,其要實(shí)現(xiàn)的功能應(yīng)該放在 gameScreen 類中, 但是由于設(shè)計(jì)游戲的過(guò)程也是一個(gè)學(xué)習(xí)的過(guò)程,而在當(dāng)時(shí),我并沒有意識(shí)到這一點(diǎn)。 14 Mybullets 類繼承自 Sprite 類,以實(shí)現(xiàn)玩家子彈的相關(guān)功能。首先,創(chuàng)建子彈狀態(tài)數(shù)組 private int[][] bullets,其中, [i][0]代表子彈的 X 坐標(biāo), [i][1]代表子彈的 Y 坐標(biāo), [i][2]代表子彈 Y 方向速度, [i][3]代表子彈存活狀態(tài) (由于此類是在早期設(shè)計(jì)的,而之后子彈存活狀態(tài)使用了子彈射程作為標(biāo)志位,所以 其并沒有起到作用。 mybullets 類在 gameScreen 中建立了對(duì)象數(shù)組 huokebullet[9],代表玩家所能發(fā)射的 9發(fā)子彈。 游戲邏輯及 gameScreen 類 gameScreen 類是游戲的主類,決定著敵人何時(shí)出現(xiàn),控制著敵人出現(xiàn)的方法,判斷敵人及玩家是否被擊中等。它運(yùn)行在獨(dú)立的線程中,以恒定的頻率刷新畫面。本程序設(shè)置為1/20 秒。其主邏輯如圖 44所示。 gameScreen 類所實(shí)現(xiàn)的功能 gameScreen 類要實(shí)現(xiàn)地圖的滾動(dòng)、敵軍的相關(guān)屬性、玩家的相關(guān)屬性等功能。gameScreen 類 包括了 LayerManager,這樣所有靜態(tài)和動(dòng)態(tài)的圖象都不需要手動(dòng)刷新,只需要在 LayerManager中加 入所有的需要控制的精靈 ,在統(tǒng)一由 LayerManager刷新即可 , 因此 ,在 gameScreen 中創(chuàng)建 LayerManager 的對(duì)象 lm,并在構(gòu)造函數(shù)中實(shí)例子化。 其他精靈類的對(duì)象如敵軍、玩家、玩家的子彈、敵人的子彈、 BOSS 及 BOSS 所屬的子彈都需在 gameScreen()類中建立相應(yīng)的對(duì)象,并在構(gòu)造喊數(shù)中實(shí)例化,且由 ()方法添加到 LayerManager 類對(duì) 象 lm中。 地圖的創(chuàng)建 由于手機(jī)存儲(chǔ)空間的限制,不可能將整張地圖完整地存儲(chǔ)在手機(jī)中,為了節(jié)約空間,往往提出地圖中相同的圖片組成一張 PNG 格式的圖片,然后象拼圖一樣拼出地圖來(lái),專業(yè)的游戲設(shè)計(jì)者往往自己寫一個(gè)地圖編輯器,以使拼圖過(guò)程不是那么痛苦。 創(chuàng)建地圖就需要使用 TiledLayer。 TiledLayer 指的是由一塊一塊類似用瓷磚拼湊起來(lái)的畫面。地圖實(shí)際即為 TiledLayer 的一個(gè)對(duì)象。先利用 TiledLayer 的構(gòu)造函數(shù)建立 TiledLayer,根據(jù)構(gòu)造函數(shù)的參數(shù)可以給定 Cell 數(shù)組 的大小 ,并且地圖圖片切割成等尺寸的畫面,并調(diào)用 setCell()設(shè)置具體的圖象格內(nèi)容,地圖圖片如圖 45 所示。 (圖 45) 因此,創(chuàng)建一個(gè)返回 TtiledLayer 的方法 createBackGround(),以便在 gameScreen()的構(gòu)造函數(shù)中調(diào)用。在方法中,定義整型數(shù)組 map1[]以存儲(chǔ) Cell 的索引值。并使用 15 (column,row,map1[i])設(shè)定 TtiledLayer 的內(nèi)容,以形成地圖。其中 i 的值由循環(huán) for(int i=0。i。i++)取得, column 由語(yǔ)句 column=i%15 取得、行由row=(icolumn)/15 取得。 畫出地圖后,由 ()將地圖添加到 LayerManager 類對(duì)象 lm 中。由于地圖位于 Layer 的最低層,即離用戶視線最遠(yuǎn)的層,所以 Tiledlayer 最后一個(gè)被添加到 lm 中。 地圖的移動(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ù) 值 變 為 負(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)中,使用語(yǔ)句 y1=y1+1使得每次繪圖都使地圖下移 1 個(gè)象素。 gameScreen 類的構(gòu)造函數(shù) gameScreen 類的構(gòu)造函數(shù)要將游戲中出現(xiàn)的所有精靈都實(shí)例化,實(shí)際上,這種方法嚴(yán)重的占用了內(nèi)存,但在當(dāng)時(shí),我并沒有意識(shí)到這一點(diǎn)。由于敵人要求不停的出現(xiàn),但是不可能設(shè)置過(guò)多的精靈,解決的辦法是設(shè)定 6個(gè) Sprite 類對(duì)象 j0、 j j2及 jbullet jbulletjbullet2,分別代表三架敵機(jī)及其 配屬的子彈。所以在 gameScreen 類的構(gòu)造函數(shù)分配這 6個(gè) Sprite 類的存儲(chǔ)空間,并且使用 new Sprite(Image img, int width, int height)實(shí)例化這6個(gè)類變量。同關(guān)尾 cboss 與游戲進(jìn)行中的大飛機(jī)其他的 Sprite 類對(duì)象都需要使用相同的方法實(shí)例化。同樣處于節(jié)約內(nèi)存的考慮, sboss 與 cboss 同用 3個(gè) Sprite 類對(duì)象 bossbullet0, 1,2。 在構(gòu)造函數(shù)中,定義 boolean 型變量 conti=true。 conti 的作用在于控制是否進(jìn)行游戲畫面的重繪及其 他需要在畫面重繪前進(jìn)行的運(yùn)算。 在構(gòu)造函數(shù)中,將 mybullets 類里的 no 和 score 初始化,現(xiàn)在看來(lái) no 的初始化沒有必要,但是 score 的初始化是必須的,因?yàn)檫@個(gè)變量存儲(chǔ)著玩家每次游戲的成績(jī),如果不在此進(jìn)行初始化,則玩家重新開始游戲后 score 并不歸 0。 關(guān)于 mandAction()方法 16 每個(gè)創(chuàng)建 Command 實(shí)例的 J2ME 的應(yīng)用程序也必須創(chuàng)建實(shí)現(xiàn) CommandListener 接口的實(shí)例。每當(dāng)用戶通過(guò) mandAction()方法的方式與命令進(jìn)行交互的時(shí)候,就會(huì)通過(guò) CommandListener 的類必須實(shí)現(xiàn) mandAction()方法。 在 mandAction()方法中,使用 getabel()方法獲取命令的標(biāo)簽。如果 getLabel()=“暫停”時(shí),表示玩家點(diǎn)擊了暫停鍵,此時(shí), conti賦值為 false,游戲畫面的繪制及游戲相關(guān)的運(yùn)算暫停,并且,使用 removeCommand(c)語(yǔ)句將“暫停”移除,使用 addCommand(new Command(繼續(xù) ,2))。將”繼續(xù)“按紐”添加進(jìn)來(lái)。當(dāng)玩家點(diǎn)擊“繼續(xù)“ 時(shí),conti 賦值為 true,并且,一定要調(diào)用 start()方法,否則繼續(xù)功能不可用。必須調(diào)用 start()方法的原因是: J2ME 的線程已 stop()方法拿掉,如果想停止線程的運(yùn)做,就必須依靠一個(gè)旗標(biāo) (flag),在本程序中, flag就是 boolean型變量 conti。所以一旦此標(biāo)識(shí)變量被設(shè)為 false,那么 while(conti)循環(huán)就會(huì)結(jié)束,線程也會(huì)跟著結(jié)束。當(dāng)用戶按下“繼續(xù)”的時(shí)候, start()將重新產(chǎn)生一個(gè)線程繼續(xù)執(zhí)行相關(guān)的運(yùn)算和畫面繪制。 當(dāng)玩家通關(guān)時(shí)或者任務(wù)失敗時(shí),將顯示相應(yīng)信息,并使用上面的 方法將“暫?!辨I變?yōu)椤胺祷亍辨I盤,當(dāng)點(diǎn)擊“返回”鍵時(shí),將返回主菜單選項(xiàng),調(diào)用類 tkdz 里的方法menuscreensecond(),在此方法中,實(shí)例化一個(gè) MenuScreen 類對(duì)象,并且使選項(xiàng)“新游戲”改變?yōu)椤敝匦麻_始“ (圖 46)。完成此項(xiàng)功能的語(yǔ)句子為 [0] =”重新開始 ”。當(dāng)選擇”重新開始“時(shí),使用 gamescreen=new gameScreen(this)將使所有變量重新被初始化,如地圖的繪制、敵人出現(xiàn)位置的重置、敵人的數(shù)量、玩家的當(dāng)前位置等。使用 ()重新開始程序的循環(huán)。 圖 46 圖 47 17 圖 47 圖 48 Sprite 類對(duì)象的碰撞檢測(cè)及相關(guān)屬性 游戲進(jìn)行中,即在 while(conti){ }中,需要進(jìn)行玩家、子彈與敵軍及敵軍子彈與玩家的碰撞檢測(cè),即使用函數(shù) collidesWith(Sprite,boolean)。由于設(shè)計(jì)的問題,玩家發(fā)射的子彈與普通敵 機(jī)的碰撞檢測(cè)被寫在了 mybullets 類中,并且只檢測(cè)第一發(fā)子彈是否與敵人相碰撞,如果碰撞為真時(shí),則使用 setVisible(false)函數(shù)將敵機(jī)隱藏,使用 setImage()函數(shù)將子彈精靈的三張圖片置換為爆炸圖片。當(dāng)敵人剩余敵軍消失后,即所有的敵人都開出了屏幕后,使用函數(shù) setVisible(true)將敵機(jī)重新設(shè)置為可見。在按“開火”鍵時(shí),使用 setImage()函數(shù)將 huokebullets 重新設(shè)定為子彈圖片。 敵軍與玩家的碰撞檢測(cè)原理同上,都是使用的 collidesWith()函數(shù),遺憾的是,我在 寫這段代碼的時(shí)候,并沒有考慮設(shè)置玩家有 4次機(jī)會(huì),所以對(duì)敵軍 setVisable(fasle)了,而將玩家的坦克換成了爆炸圖片,之后,添加了玩家 4次機(jī)會(huì)這個(gè)功能,由于玩家被擊落后會(huì)重新從屏幕下方進(jìn)入屏幕,所以爆炸的圖片一閃而過(guò),效果不是很好。 玩家 4 次游戲機(jī)會(huì)的實(shí)現(xiàn)方法 根據(jù)游戲設(shè)置,玩家在每關(guān)中有共四次機(jī)會(huì),
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1