J2ME手機(jī)游戲設(shè)計(jì)案例源代碼GameEngineRecord_第1頁(yè)
J2ME手機(jī)游戲設(shè)計(jì)案例源代碼GameEngineRecord_第2頁(yè)
J2ME手機(jī)游戲設(shè)計(jì)案例源代碼GameEngineRecord_第3頁(yè)
J2ME手機(jī)游戲設(shè)計(jì)案例源代碼GameEngineRecord_第4頁(yè)
J2ME手機(jī)游戲設(shè)計(jì)案例源代碼GameEngineRecord_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、*gamemid。java/* * to change this template, choose tools | templates * and open the template in the editor. */import javax.microedition.lcdui.display;import javax.microedition.midlet.*;/* * author administrator */public class gamemid extends midlet private display display; private gameworld gw=null;

2、public gamemid() display = display.getdisplay(this); /獲取display gw=new gameworld(this); /創(chuàng)建游戲畫(huà)布 display.setcurrent(gw); /設(shè)置游戲畫(huà)布為當(dāng)前顯示畫(huà)面 public void startapp() if(gw!=null) gw.start(); /游戲開(kāi)始執(zhí)行 public void pauseapp() if(gw!=null)gw.setpaused(true); /游戲暫停執(zhí)行 public void destroyapp(boolean unconditional)

3、if(gw!=null)gw.stop(); /停止游戲循環(huán) /* 退出程序 */ public void exit() try destroyapp(false); catch(exception e) notifydestroyed(); *gamedesign。java/* * to change this template, choose tools | templates * and open the template in the editor. */import javax.microedition.midlet.*;import javax.microedition.lcdui

4、.*;import javax.microedition.lcdui.game.*;import java.io.ioexception;/* * author administrator */public class gamedesign /gen-begin:|fields|0| private image tiledbg2; private image tiledbg; public int fireseq001delay = 200; public int fireseq001 = 34, 35, 36, 35; private tiledlayer background; publi

5、c int firebackground; private tiledlayer build; /gen-end:|fields|0| /gen-begin:|methods|0| /gen-end:|methods|0| public image gettiledbg() throws java.io.ioexception /gen-begin:|1-getter|0|1-preinit if (tiledbg = null) /gen-end:|1-getter|0|1-preinit / write pre-init user code here tiledbg = image.cre

6、ateimage(/tiled.png);/gen-begin:|1-getter|1|1-postinit /gen-end:|1-getter|1|1-postinit / write post-init user code here return this.tiledbg;/gen-begin:|1-getter|2| /gen-end:|1-getter|2| public tiledlayer getbackground() throws java.io.ioexception /gen-begin:|2-getter|0|2-preinit if (background = nul

7、l) /gen-end:|2-getter|0|2-preinit / write pre-init user code here background = new tiledlayer(20, 20, gettiledbg(), 32, 32);/gen-begin:|2-getter|1|2-midinit firebackground = background.createanimatedtile(fireseq0010); int tiles = 2, 2, 1, 2, 2, 2, 2, 17, firebackground, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

8、 2 , 2, 2, 2, 2, 2, 2, 2, 26, 11, 11, 2, 1, 6, 2, 2, 2, 2, 2, 2, 2 , 10, 10, 10, 12, 7, 2, 2, 17, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 , 2, 2, firebackground, 17, 2, 2, 2, 17, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 , 6, 2, 2, 17, 2, 2, 2, 17, 2, 7, 3, 2, 2, 2, 2, 2, 3, 2, 2, 2 , 2, 2, 2, 17, 2, 2, 2, 17,

9、2, 2, 2, 2, 2, 2, 2, 2, 17, 2, 2, 2 , 2, 2, 2, 19, 11, 11, 11, 18, 11, 10, 12, 2, 2, 2, 2, 2, 17, 2, 2, 2 , 2, 2, 2, 2, 2, 2, 2, 2, 2, firebackground, 17, 2, 2, 2, 2, 2, 17, 2, 2, 2 , 1, 2, 2, 2, 2, 2, 2, 6, 2, 2, 17, 2, 2, 2, 2, 2, 17, 2, 6, 2 , 3, 3, 3, 3, 7, 3, 3, 3, 3, 3, 17, 3, 1, 3, 3, 3, 17,

10、3, 3, 3 , 2, 6, firebackground, 2, 2, 2, 4, 4, 4, 4, 17, 4, 3, 3, 3, 3, 17, 3, 3, 3 , 2, 3, 9, 10, 10, 10, 10, 10, 10, 10, 18, 10, 10, 27, 10, 10, 18, 10, 10, 10 , 2, 2, 17, 2, 2, 2, 6, 4, 4, 4, 4, 4, 3, 17, 3, 3, 3, 3, 3, firebackground , 2, 2, 17, 2, 2, 2, 4, 4, 4, 4, 4, 4, 3, 17, 3, 1, 3, 3, 3, 3

11、 , 2, 2, 17, 2, 2, 2, 4, 4, 4, 4, 4, 4, 3, 26, 11, 11, 11, 3, 3, 3 , 2, 2, 17, 2, 2, 2, 4, 4, 4, 4, 4, 4, 3, 17, 3, 3, 3, 3, 3, 3 , 2, 2, 17, 2, 1, 2, 4, 4, 4, 4, 17, 4, 3, 17, 3, 3, 3, 3, 3, 3 , 2, 2, 17, firebackground, 2, 2, 4, 4, 4, 4, 19, 10, 10, 20, 3, 3, 3, 3, 3, 3 , 2, 2, 17, 2, 2, 2, 4, 7,

12、4, 4, 4, 3, 3, 3, 3, 6, 3, 3, 1, 3 , 6, 2, 17, 2, 2, 2, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3 ;/gen-end:|2-getter|1|2-midinit / write mid-init user code here for (int row = 0; row 20; row+) /gen-begin:|2-getter|2|2-postinit for (int col = 0; col 20; col+) background.setcell(col, row, tilesrowcol)

13、; /gen-end:|2-getter|2|2-postinit / write post-init user code here return background;/gen-begin:|2-getter|3| /gen-end:|2-getter|3| public tiledlayer getbuild() throws java.io.ioexception /gen-begin:|6-getter|0|6-preinit if (build = null) /gen-end:|6-getter|0|6-preinit / write pre-init user code here

14、 build = new tiledlayer(20, 20, gettiledbg(), 32, 32);/gen-begin:|6-getter|1|6-midinit int tiles = 0, 0, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 13, 0, 0, 69, 70, 71, 72, 0, 0 , 0, 43,

15、0, 0, 0, 31, 32, 0, 0, 0, 0, 0, 0, 0, 77, 78, 79, 80, 0, 0 , 0, 51, 0, 0, 0, 39, 40, 0, 0, 0, 0, 0, 0, 0, 85, 86, 87, 88, 13, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 94, 95, 96, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 15,

16、0, 0, 0, 0, 0, 0 , 0, 37, 38, 0, 0, 0, 0, 44, 45, 46, 0, 0, 0, 31, 32, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 52, 53, 54, 0, 0, 0, 39, 40, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0

17、, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 68, 0, 0, 0, 0, 0, 0, 43, 0, 0 , 13, 0, 0, 0, 0, 0, 0, 73, 74, 75, 76, 0, 0, 0, 0, 0, 0, 51, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 1

18、3 , 0, 16, 0, 0, 0, 0, 0, 14, 15, 0, 0, 0, 0, 0, 0, 0, 41, 42, 0, 0 , 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;/gen-end:|6-getter|1|6-midinit / write mid-init user code here for (int row = 0; row 20; row+) /gen-begin:

19、|6-getter|2|6-postinit for (int col = 0; col 20; col+) build.setcell(col, row, tilesrowcol); /gen-end:|6-getter|2|6-postinit / write post-init user code here return build;/gen-begin:|6-getter|3| /gen-end:|6-getter|3| public void updatelayermanagerforscene(layermanager lm) throws java.io.ioexception

20、/gen-line:|7-updatelayermanager|0|7-preupdate / write pre-update user code here getbuild().setposition(0, 0);/gen-begin:|7-updatelayermanager|1|7-postupdate getbuild().setvisible(true); lm.append(getbuild(); getbackground().setposition(0, 0); getbackground().setvisible(true); lm.append(getbackground

21、();/gen-end:|7-updatelayermanager|1|7-postupdate / write post-update user code here /gen-begin:|7-updatelayermanager|2|/gen-end:|7-updatelayermanager|2| public image gettiledbg2() throws java.io.ioexception /gen-begin:|17-getter|0|17-preinit if (tiledbg2 = null) /gen-end:|17-getter|0|17-preinit / wr

22、ite pre-init user code here tiledbg2 = image.createimage(/tiled.png);/gen-begin:|17-getter|1|17-postinit /gen-end:|17-getter|1|17-postinit / write post-init user code here return this.tiledbg2;/gen-begin:|17-getter|2| /gen-end:|17-getter|2| *gameworld。javaimport java.io.ioexception;import java.io.in

23、putstream;import java.util.date;import javax.microedition.lcdui.font;import javax.microedition.lcdui.graphics;import javax.microedition.lcdui.image;import javax.microedition.lcdui.game.gamecanvas;import javax.microedition.lcdui.game.layermanager;import javax.microedition.lcdui.game.sprite;import jav

24、ax.microedition.lcdui.game.tiledlayer;import javax.microedition.media.manager;import javax.microedition.media.mediaexception;import javax.microedition.media.player;import javax.microedition.media.control.volumecontrol;/* * to change this template, choose tools | templates * and open the template in

25、the editor. */* * * author administrator */public class gameworld extends gamecanvas implements runnable gamemid mid; /游戲midlet thread mainthread; /游戲主線程 private final int ms_per_frame=30; /設(shè)置一次游戲循環(huán)所需時(shí)間,單位為毫秒(ms),每秒游戲幀數(shù)約為1000/ms_per_frame private int cps; /游戲幀速 private boolean ispaused; /游戲暫停狀態(tài) priv

26、ate boolean running; /游戲運(yùn)行狀態(tài) graphics g; /游戲繪圖對(duì)象 private int screenwidth; /游戲屏幕寬度 private int screenheight; /游戲屏幕高度 public static int gamestate; /游戲狀態(tài),1為暫停,2為游戲進(jìn)行中,3為游戲失敗 public static int keystate; /按鍵狀態(tài) private image imgenemy,imgboy;/精靈圖像 private sprite sprenemy; /定義敵人精靈 private mysprite sprboy; /

27、用擴(kuò)展的精靈類(lèi)來(lái)定義玩家精靈 /定義三個(gè)不同方向的玩家精靈幀序列,右方向可由左方向鏡像變換得到 int lsequ=3,4,3,5; /定義左方向精靈幀序列 int usequ=6,7,6,8; /定義上方向精靈幀序列 int dsequ=0,1,0,2; /定義下方向精靈幀序列 int enemyx,enemyy; /敵人精靈坐標(biāo) int enemyspeedx; /敵人精靈速度,這里設(shè)置為只能水平移動(dòng) boolean iscoll; /碰撞標(biāo)志 long colltexttime; /碰撞文本顯示時(shí)間 gamedesign gd; /游戲設(shè)計(jì)器 layermanager lm; /圖層管理

28、器 tiledlayer tlbg; /背景圖層 tiledlayer tlbuild; /障礙物層 int fireindex; /動(dòng)態(tài)貼圖索引 int firetimes; /動(dòng)態(tài)貼圖延時(shí) int viewportx, viewporty; /視口坐標(biāo) private final int min_buffer=30; /人物與貼圖邊緣的距離 private player pmusic,pcoll; /聲明播放器 private inputstream inmenu,incoll; /聲明輸入流 private volumecontrol control; /聲明音量控制器 private

29、int rsflag; /記錄暫停時(shí)的動(dòng)作/定義字體private font largefont=font.getfont(font.face_system,font.style_bold, font.size_large); private font mediumfont=font.getfont(font.face_system,font.style_bold, font.size_medium); public gameworld(gamemid midlet) super(true); this.mid=midlet; /獲取midlet this.setfullscreenmode(

30、true); /設(shè)置為全屏模式 screenwidth=getwidth(); /獲取屏幕大小 screenheight=getheight(); g=this.getgraphics(); /獲取繪圖對(duì)象 running=false; /設(shè)置游戲運(yùn)行狀態(tài) ispaused=false; gameinit(); /游戲初始化 /* 游戲初始化 */ private void gameinit() gd=new gamedesign(); lm=new layermanager(); try tlbg = gd.getbackground(); tlbuild=gd.getbuild(); gd

31、.updatelayermanagerforscene(lm); catch (ioexception ex) ex.printstacktrace(); try imgboy = image.createimage(/boy.png); imgenemy=image.createimage(/enemy.png); catch (ioexception ex) ex.printstacktrace(); / 使用image對(duì)象,幀寬度、幀高度,速度,限制范圍矩形左上角的x坐標(biāo)、y坐標(biāo)、高度和寬度來(lái)構(gòu)造自定義精靈 sprboy=new mysprite(imgboy,32,48,3,min_b

32、uffer,min_buffer,screenwidth-min_buffer*2,screenheight-min_buffer*2); sprboy.setframesequence(lsequ); /設(shè)置初始化時(shí)的精靈幀序列和方向 sprboy.setdir( mysprite.left); /設(shè)置初始化時(shí)精靈方向 sprboy.definereferencepixel(sprboy.getwidth()/2, sprboy.getheight()/2); /設(shè)置參考點(diǎn) sprboy.setrefpixelposition(100, 100); /通過(guò)參考點(diǎn)定位精靈 int sw=spr

33、boy.getwidth(); int sh=sprboy.getheight(); sprboy.definecollisionrectangle(sw/10, sh/10, sw*8/10,sh*8/10); /重設(shè)精靈的碰撞矩形范圍為原來(lái)的80 /創(chuàng)建敵人精靈 sprenemy=new sprite(imgenemy,imgenemy.getwidth()/3,imgenemy.getheight()/3); sprenemy.setframesequence(lsequ); /設(shè)置精靈循環(huán)序列 enemyx=50; /設(shè)置敵人精靈的坐標(biāo) enemyy=200; enemyspeedx=

34、-2; /設(shè)置敵人精靈速度 gd=new gamedesign(); /創(chuàng)建游戲設(shè)計(jì)器 lm=new layermanager(); /創(chuàng)建層管理器,管理場(chǎng)景 try tlbg = gd.getbackground(); /創(chuàng)建背景貼圖層 tlbuild=gd.getbuild(); /創(chuàng)建障礙物貼圖層 gd.updatelayermanagerforscene(lm); /設(shè)置圖層管理器 catch (ioexception ex) ex.printstacktrace(); lm.insert(sprboy,1); /添加精靈到場(chǎng)景中 lm.insert(sprenemy,2); view

35、portx=0; /初始化視口坐標(biāo) viewporty=0; /設(shè)置視口 lm.setviewwindow(viewportx, viewporty, screenwidth,screenheight); fireindex=0; /初始化動(dòng)態(tài)貼圖參數(shù) firetimes=0; try inmenu = getclass().getresourceasstream(/music.mid); /創(chuàng)建音頻流 pmusic = manager.createplayer(inmenu, audio/midi); /創(chuàng)建midi播放器 incoll = getclass().getresourceass

36、tream(/coll.wav); /創(chuàng)建音頻流 pcoll = manager.createplayer(incoll, audio/x-wav); /創(chuàng)建wav播放器 catch (ioexception ex) ex.printstacktrace(); catch (mediaexception ex) ex.printstacktrace(); try pmusic.setloopcount(-1);/設(shè)置為循環(huán)播放pmusic.start(); /播放音頻catch(exception e)e.printstacktrace(); /獲得音量控制接口 control=(volume

37、control)pmusic.getcontrol(volumecontrol); control.setlevel(50); /設(shè)置音量大小 loadsence(); /加載場(chǎng)景數(shù)據(jù) /* 游戲運(yùn)行 */ public void run() int cyclesthissecond=0; /當(dāng)前1秒內(nèi)的循環(huán)次數(shù) long cyclestarttime; /循環(huán)開(kāi)始時(shí)間 long lastcpstime=0; /上次計(jì)算幀速的時(shí)間 long cycleendtime=0; /循環(huán)結(jié)束時(shí)間 long cycletimes=0; /一次游戲循環(huán)熱所花的時(shí)間 boolean bskip = fals

38、e; /游戲是否跳幀 cps=0; system.out.println(游戲開(kāi)始);/在控制臺(tái)輸出開(kāi)始信息,可屏蔽 /* 游戲主循環(huán) */ while(running) /檢查是否運(yùn)行 cyclestarttime = system.currenttimemillis();/記錄游戲循環(huán)開(kāi)始時(shí)間 / 下面語(yǔ)句用于處理游戲內(nèi)容,如果游戲設(shè)置為跳幀, / 則本次循環(huán)不處理游戲內(nèi)容 if(!bskip) gameinput(); /處理輸入消息 gamecycle(); /處理游戲邏輯 render(g); /渲染游戲畫(huà)面 flushgraphics(); /更新畫(huà)面 /* 下面語(yǔ)句用于計(jì)算游戲循

39、環(huán)時(shí)間,并進(jìn)行相應(yīng)處理 */ cycleendtime=system.currenttimemillis(); /記錄游戲循環(huán)結(jié)束時(shí)間 cycletimes=cycleendtime-cyclestarttime; /計(jì)算循環(huán)時(shí)間 /如果循環(huán)時(shí)間間隔小于ms_per_frame,則通過(guò)休眠,使其不小于rate, /并能讓系統(tǒng)有空閑轉(zhuǎn)去處理其他事務(wù) if(cycletimes 1000) /檢查距上次計(jì)算幀數(shù)的/時(shí)間是否經(jīng)過(guò)1000ms lastcpstime=system.currenttimemillis(); /設(shè)定lastcps為當(dāng)前時(shí)間 cps = cyclesthissecond;

40、/ system.out.println(cps:+cps); /輸出每秒的幀數(shù) cyclesthissecond = 0; /重置幀數(shù) else cyclesthissecond+; /幀數(shù)遞增 system.out.println(游戲結(jié)束!); release(); /釋放資源 exit(); /退出游戲 /* 啟動(dòng)游戲進(jìn)程 */ public void start() /檢查游戲循環(huán)是否處于運(yùn)行狀態(tài),如果未運(yùn)行,則創(chuàng)建線程并啟動(dòng) /如果游戲處于運(yùn)行狀態(tài),則表示是暫停后的繼續(xù)執(zhí)行,僅設(shè)置暫停狀態(tài)即可 if(!running) running=true; mainthread=new th

41、read(this); mainthread.start(); gamestate=2; else gamestate=2; setpaused(false); /退出游戲 private void exit() mid.exit(); /退出游戲 /* 停止游戲 */ public void stop() running=false; /終止游戲循環(huán) /* 釋放游戲資源 */ private void release() /此處為釋放游戲資源的代碼 try pmusic.stop();/停止音樂(lè) pmusic.deallocate();/釋放資源 pmusic.close();/關(guān)閉播放器 pcoll.stop();/停止音樂(lè) pcoll.deallocate();/釋放資源 pcoll.clo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論