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

正文內(nèi)容

基于j2me技術(shù)的手機(jī)游戲開發(fā)——瘋狂賽車畢業(yè)論文-閱讀頁(yè)

2025-07-09 02:55本頁(yè)面
  

【正文】 能劃分,游戲中基本的功能應(yīng)該包括菜單處理、程序邏輯處理、持久性處理和掛起恢復(fù)處理。程序的邏輯處理就是涵蓋了程序中除菜單外幾乎所有的功能。關(guān)于掛起恢復(fù)處理,是每一個(gè)商用程序必須要處理的問(wèn)題。這兩種劃分方法,在功能上可能有重復(fù),但是是按照完全不同的兩種思想來(lái)會(huì)劃分的,一個(gè)是程序的架構(gòu),另一個(gè)是從程序的表現(xiàn)方面來(lái)說(shuō)的[05]。圖41 游戲界面間切換 游戲程序類設(shè)計(jì)游戲開發(fā)過(guò)程完全基于面向?qū)ο笏枷耄垢鱾€(gè)模塊的功能盡可能的獨(dú)立,游戲共設(shè)計(jì)16個(gè)類。圖42 游戲類結(jié)構(gòu)圖 文件結(jié)構(gòu)本游戲的文件層次結(jié)構(gòu)如圖43所示。它與ZIP的唯一區(qū)別在于其中有一個(gè)METAINF的目錄,符合格式標(biāo)準(zhǔn)的內(nèi)容可以被自動(dòng)識(shí)別,(“屬性的名字”)的方法來(lái)獲得該文件的屬性值。圖44 第一行“ManifestVersion:”描述了該文件的格式版本。第三行定義了程序的名稱,他將顯示在手機(jī)的程序列表中。第五行是程序的入口,因?yàn)橐粋€(gè)程序可能有多個(gè)MIDlet應(yīng)用,所以加如了一個(gè)數(shù)字標(biāo)示。第一段表示了MIDlet應(yīng)用的名稱,第二段表示了改MIDlet應(yīng)用所顯示的圖標(biāo),第三段表示了改MIDlet應(yīng)用的完整類名。,它與第二行共同約束了軟件的運(yùn)行平臺(tái),不符和這兩條要求的設(shè)備將不能運(yùn)行該程序。創(chuàng)建JAD文件是為了向應(yīng)用程序管理器提供信息,說(shuō)明JAR文件的內(nèi)容,使用這些信息,就可以判斷一個(gè)MIDlet是否適合運(yùn)行在這個(gè)設(shè)備上。圖45 游戲的JAD文件內(nèi)容第一行的內(nèi)容和前面講解的清單文件的第五行相同。第三行是下載MIDlet Suite的地址。而下載一般是先下載JAD文件,然后通過(guò)JAD中的描述由用戶決定是否下載相應(yīng)的JAR文件。第五行和前面的清單文件的第四行相同。第七行和前面的清單文件的第二行相同。運(yùn)行程序后,,對(duì)其進(jìn)行實(shí)例化。CrazyRacecarMIDlet的構(gòu)造方法中創(chuàng)建了一個(gè)歷史記錄類的實(shí)例即GameRecords類,從而讀取游戲的歷史記錄和游戲的相關(guān)初始設(shè)置。// 獲得關(guān)于顯//示的設(shè)備上下文 if (cu == null) { MyInfoCanvas pr = new MyInfoCanvas(this, me)。 // 第一次顯示閃屏 ()。 // 顯示游戲畫布內(nèi)容 if (gM != null amp。 cu == ()) ()。因?yàn)閟tartApp()方法可能會(huì)在程序受到外界中斷的情況下多次調(diào)用,所以應(yīng)當(dāng)檢測(cè)當(dāng)前程序是否處于這種情況,如果中斷之前的顯示內(nèi)容為游戲畫布,則重新啟動(dòng)游戲畫布的線程,顯示權(quán)任然交給畫布。例如,本程序有兩個(gè)閃屏動(dòng)作,該類、MyInfoCanvas類和SplashCanvas類共同完成一些必要資源和游戲相關(guān)設(shè)置的初始化。游戲閃屏使用得當(dāng),將會(huì)增加整個(gè)游戲的視覺效果,而且雖然畫面在此期間停留不動(dòng),但是后臺(tái)程序卻是忙碌的,一般是在此期間完成基本的初始化工作。當(dāng)兩個(gè)閃屏都繪制完畢時(shí),將會(huì)在第二個(gè)閃屏中調(diào)用splashScreenPainted()方法,表示程序可以利用剩余的時(shí)間間歇來(lái)完成一些工作,這里啟動(dòng)了CrazyRacecarMIDlet實(shí)現(xiàn)的一個(gè)線程,它會(huì)自動(dòng)調(diào)用run()方法。當(dāng)所有的工作都完成時(shí),將一個(gè)initDone標(biāo)志位設(shè)置為true,表明已經(jīng)初始化完畢。代碼如下: void splashScreenDone(Displayable ne) { init()。// 在屏幕上顯示下一個(gè)界面 } public void splashScreenPainted() { new Thread(this).start()。 // 調(diào)用初始化方法 } private synchronized void init() { if (sound amp。// 初始化并且播放聲音 initDone = true。下面具體實(shí)現(xiàn)改切換功能。代碼如下: /** * 玩家由于外界原因或玩家自己暫停游戲后, 從菜單中選擇繼續(xù)選項(xiàng) */ void mainMenuContinue() { // 獲的游戲畫布的當(dāng)前畫布,并把顯示權(quán)交給它 (this).setCurrent(())。// 游戲主菜單的二級(jí)子菜單 (this).setCurrent(mL)。如果不是則初始化游戲畫布并啟動(dòng)游戲主線程,然后就把顯示權(quán)切換給游戲畫布。代碼如下: /** * 正式進(jìn)入游戲的游戲入口方法 */ void mainMenuGameStart() { mO = null。 ()。// 游戲重新開始 (this).setCurrent(())。// 游戲第一次開始 ()。// 顯示游戲畫布 ()。 // 設(shè)置游戲第一次已經(jīng)開始標(biāo)志位 } }從游戲主菜單中選擇游戲說(shuō)明,動(dòng)態(tài)生成一個(gè)顯示游戲相關(guān)信息的屏幕,使用完成后就會(huì)銷毀,可以避免在不使用時(shí)占用對(duì)內(nèi)存。 String ti = About Game。 // 子界面的back按鈕 // 子界面Form類 MenuStringPrint cr = new MenuStringPrint(this, ti, ab, ba)。// 把顯示權(quán)交給子界面 }當(dāng)玩家由游戲狀態(tài)中退回到菜單時(shí)需執(zhí)行的方法如下: /** * 由游戲狀態(tài)退回到游戲主菜單中 */ void GameScreenMainMenu(boolean isGO) { if (isGO) { // 判斷游戲是否結(jié)束, ()。// 寫入游戲信息 } else { ()。// 顯示權(quán)交給游戲主菜單 }從主游戲菜單中的子菜單退回到當(dāng)前畫布中,首先判斷游戲的當(dāng)前畫布是否與la相同,并判斷當(dāng)前的GameScreen類的實(shí)例是否是為空。 if (gM != null amp。 la == ())//斷游戲畫布是否為空并判斷是否是la ()。// 把顯示權(quán)交給la對(duì)象 } 游戲的停止、銷毀和退出一般來(lái)說(shuō),游戲的停止、銷毀和退出工作主要集中在對(duì)游戲畫布的處理上,暫停程序時(shí),如果當(dāng)前顯示內(nèi)容為游戲畫布(表明游戲進(jìn)行中)則應(yīng)當(dāng)調(diào)用GameCanvas類的stop()方法暫停程序。當(dāng)來(lái)電話時(shí),系統(tǒng)會(huì)調(diào)用pauseApp(),需要停掉當(dāng)前線程。游戲暫停、退出的代碼如下: public void pauseApp() { if (gM != null) ()。// 把顯示權(quán)交給當(dāng)前畫布 } public void destroyApp(boolean un) { if (gM != null) ()。代碼如下: void mainMenuExit() { destroyApp(false)。// 告知系統(tǒng)已經(jīng)銷毀程序,可以安全退出了 } 游戲特效因?yàn)橹挥蠱IDlet類能夠訪問(wèn)Display對(duì)象,因此通常將振動(dòng)、背景光等特效放置在這個(gè)類里面,其代碼如下,times為代表持續(xù)的時(shí)間。// 手機(jī)振動(dòng),持續(xù)時(shí)間為times } void flashBacklight(int times) { (this).flashBacklight(times)。畢設(shè)信息閃屏要求居中顯示校名、?;铡W(xué)院、指導(dǎo)老師與學(xué)生等內(nèi)容,率;游戲信息閃屏則顯示游戲 Logo 及游戲版本。 圖46 畢設(shè)信息閃屏界面圖47 游戲相關(guān)信息界面閃屏類都繼承自 Canvas,并設(shè)定為全屏模式,在 paint(Graphics g)方法中定義內(nèi)容。代碼如下: public void paint(Graphics g) { int x = 0。 // 設(shè)定y軸起始繪制位置 x = getWidth() / 2。 (0, 0, getWidth(), getHeight())。 x1 240。// 繪制圖像 // 在設(shè)定好的位置繪制校徽 (g, (getWidth() ()) / 2, 130, , 0)。 (font)。 i 。 // 在設(shè)定好的位置繪制畢業(yè)設(shè)計(jì)信息 (SPLASH_TEXT[i], x, y, | )。 } (1, press any key, g, 30, 270)。本游戲設(shè)定的閃屏顯示時(shí)間為 3 秒,延時(shí)切換是通過(guò) Timer 類與 TimerTask 類實(shí)現(xiàn)的。在 dismiss()方法中,我們?nèi)∠?jì)時(shí)器任務(wù),并調(diào)用下一個(gè)該閃屏類的對(duì)象成員mi的splash2splash()方法由第一個(gè)閃屏切換到第二個(gè)閃屏。代碼如下: void start() { if (ti != null) ()。 TimerTask dT = new TimerTask() { public void run() { if (ti != null) dismiss()。 (dT, 30000L)。// 取消定時(shí)任務(wù) (ne)。修改后的代碼paint(Graphics g)方法如下: public void paint(Graphics g) { (0, 0, 0)。 // 繪制背景圖像 (backGround, (getWidth() ()) / 2, (getHeight() ()) / 2, 20)。 // 利用對(duì)象成員mi的方法繪制文字信息 (1, racing car , g, 40, 39)。 (1, press any key, g, 30, 260)。Dismiss()方法如下: private void dismiss() { ()。// 利用對(duì)象成員mi的方法進(jìn)行切換屏幕 } 游戲菜單的實(shí)現(xiàn)菜單列表是在閃屏屏幕之后或者游戲結(jié)束時(shí),或游戲中用戶按下一個(gè)非游戲鍵(從而暫停了游戲)時(shí)顯示的屏幕。游戲菜單兩種情況下的界面如圖48所示。// 實(shí)現(xiàn)父類List的構(gòu)造方法, hasC = false。 append(Game Start, null)。 append(Menu option, null)。 append(History Records, null)。 append(Exit, null)。// 綁定偵聽器偵聽選項(xiàng)以及軟鍵 } 添加或刪除繼續(xù)游戲選項(xiàng)當(dāng)游戲中間被游戲玩家或其它外界事件中止時(shí),游戲菜單將會(huì)多一個(gè)繼續(xù)游戲的選項(xiàng)。代碼如下: void addContinue() { if (!hasC) // 是否是游戲進(jìn)行中且未結(jié)束時(shí)的暫停退出 { insert(0, Continue, null)。 } } void deleteContinue() { if (hasC)// 是否是游戲進(jìn)行中且未結(jié)束時(shí)的暫停退出 { delete(0)。 } } 事件處理游戲菜單的事件處理包括兩種:,一種是Command觸發(fā)的事件,另一種是菜單選項(xiàng)的處理,例如本游戲的就屬于這一種。代碼如下: public void mandAction(Command co, Displayable d) { if (co == ) { String se = getString(getSelectedIndex())。// 繼續(xù)游戲 else if ((Game Start)) ()。// 游戲等級(jí)選項(xiàng) else if ((Menu option)) ()。 // 歷史記錄 else if ((How To Play)) ()。// 關(guān)于游戲 else if ((Exit)) ()。GameScreen是直接繼承GameCanvas類的子類并且實(shí)現(xiàn)了Runnable接口。游戲中的其他常量詳見源代碼,主要常量如下: private final int KEY_Right_Selection = 7。// 手機(jī)左選擇鍵 static final long FPS = 40L。// 本地手機(jī)畫布的寬度 public final int Height = getHeight()。// 賽道開始畫的起始Y坐標(biāo) final int positionX = 30。// 賽道在屏幕中的長(zhǎng)度 游戲主要變量游戲畫布中定義的如下變量的前半部分代表了游戲過(guò)程中的主要成員。// MIDlet類的實(shí)例 CarSelect se。// 路燈等周圍景物 NormalCar os[]。// 電腦對(duì)手賽車 boolean pUP。// 下方向鍵是否被按下 boolean pRIGHT。// 左方向鍵是否被按下 boolean pRocketEgine。其主要代碼如下: (true)。 // 獲得MIDlet類的引用 se = new CarSelect(mi)。 pDOWN = false。 pLEFT = false。 ra = new Random()。這些工作主要是在iniGame()方法中完成的,加載資源的部分代碼如下: try { if (!gC) { iniTrack()。// 游戲的城市背景 ci = ( /image/sf/)。// 火箭引擎 fd = ( /image/va/)。// 放置賽車方向盤的面板 cipers = new GameSprite(Image .createImage( /image/whee/), 4, 7
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1