j2meRPG游戏开发

东方尚智,3G数字内容学院j2me教程---j2meRPG游戏开发视频

视频地址:

http://www.3gdci.com/article/news/20090924113529.htm

如何实现地图编辑

如何实现人物的走动

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class AppMain extends MIDlet{
public MyCanvas mc;
public AppMain()
{
mc=new MyCanvas();
}
public void startApp()
{
Display.getDisplay(this).setCurrent(mc);
}
public void pauseApp()
{}
public void destroyApp(boolean f)
{}

import java.io.DataInputStream;
import java.io.InputStream;

import javax.microedition.lcdui.*;
public class MyCanvas extends Canvas implements Runnable{
public Image offScreen;
public Graphics offg;
public int screenWidth;
public int screenHeight;
public static final int GS_LOGO=1;//logo状态
public static final int GS_MainMENU=2; //主菜单状态
public static final int GS_CHAT=3;//对话绘制状态
public static final int GS_GAMING=4;//游戏状态
public static final int GS_GameMENU=5; //游戏中菜单状态
public static final int GS_LoadMap=6; //游戏中菜单状态
public int sleeptime;
public int gameState=GS_LOGO;
public int count=0;
public Image imlogo;
public Image imMainMenu;
public Image immap;
public Image implayer;
public int mappx;
public int mapnowcol;
public int px=16,py=32;
public static final int P_UP=0;
public static final int P_DOWN=1;
public static final int P_LEFT=2;
public static final int P_RIGHT=3;
public static final int P_STOP=-1;
public int playerdir=P_STOP;
public int oldPlayDir=P_DOWN;
public int nowframe=0;
public String chat[]={
"在公园2009年",
"一位来自XXX的年轻人",
"准备寻找xxx",
"他必须完成xxx任务",
"同时",
"XXX可以协助他",
"准备出发了。。。。"
};
public int map01[][];
public int chatIndex=0;
public DataInputStream dis;
public int processLength;//总进度长度
public int nowprocess;
public int maprow,mapcol;
public int playermove[][]=
{
{0,1,2},//up
{6,7,8},//down
{9,10,11},//left
{3,4,5}//right
};
public MyCanvas()
{
screenWidth=this.getWidth();
screenHeight=this.getHeight();
offScreen=Image.createImage(screenWidth, screenHeight);
offg=offScreen.getGraphics();
imlogo=this.loadImage("/sp1.png");
imMainMenu=this.loadImage("/mainMenu.png");
implayer=this.loadImage("/walk.png");
Thread t=new Thread(this);
t.start();
}
//加载地图
public void LoadMap(int level)
{ this.immap=null;
this.immap=this.loadImage("/mapitem0"+level+".png");
//加载地图数组
this.map01=null;
System.gc();
InputStream is=this.getClass().getResourceAsStream("/map0"+level+".dat");
dis=new DataInputStream(is);
try{
int row=dis.readByte();
int col=dis.readByte();
maprow=row;
mapcol=col;
map01=new int[row][col];
this.processLength=row*col;
this.nowprocess=0;
// for(int i=0;i<row;i++)
// { for(int j=0;j<col;j++)
// {int k=dis.readShort();
// map01[i][j]=k;
// System.out.print(" "+k);
// }
// System.out.println();
// }

}catch(Exception t ){t.printStackTrace();}
}
public Image loadImage(String file)
{Image im=null;
try{
im=Image.createImage(file);
}catch(Exception g ){

System.out.println(file+"加载错误");
}
return im;
}
public void paint(Graphics g)
{//贴图
g.drawImage(offScreen, 0, 0, 0);
}
public void drawMap()
{
for(int i=0;i<19;i++)
{
for(int j=mapnowcol;j<mapnowcol+15;j++)
{ int k=map01[i][j]-1;
offg.setClip((j-mapnowcol)*16, i*16, 16, 16);
int movex=k%5*16;
int movey=k/5*16;
offg.drawImage(this.immap, (j-mapnowcol)*16-movex, i*16-movey, 0);
}
}
offg.setClip(0, 0, screenWidth, screenHeight);
}
public void drawPlayer()
{ offg.setClip(px, py, 16, 24);
if(playerdir!=-1)
offg.drawImage(implayer, px-this.playermove[playerdir][nowframe]*16, py, 0);
else
offg.drawImage(implayer, px-this.playermove[oldPlayDir][0]*16, py, 0);

}
public void drawNPC()
{}
public void drawChat()
{
offg.setColor(0x000000);
offg.fillRect(0, 0, screenWidth, screenHeight);
offg.setColor(0xffffff);
if(chatIndex<=6)
offg.drawString(chat[chatIndex],20, 50, 0);
}
public void drawLogo()
{offg.setColor(0xFFFFFF);
offg.fillRect(0, 0, screenWidth, screenHeight);
int lw=imlogo.getWidth();
int lh=imlogo.getHeight();
offg.drawImage(imlogo, (screenWidth-lw)/2, (screenHeight-lh)/2, 0);

}
public void drawLoading()
{offg.setColor(0xFFFFFF);
offg.fillRect(0, 0, screenWidth, screenHeight);
offg.setColor(0xFF0000);
offg.drawString("游戏载入中...",20, 20, 0);
offg.drawRect(20, 80, 200, 40);
int nowlength=(this.nowprocess*100/this.processLength)*2;
offg.fillRect(20, 80, nowlength, 40);


}
public void drawMainMenu(){
offg.setColor(0xFFFFFF);
offg.fillRect(0, 0, screenWidth, screenHeight);
int lw=imMainMenu.getWidth();
int lh=imMainMenu.getHeight();
offg.drawImage(imMainMenu, (screenWidth-lw)/2, (screenHeight-lh)/2, 0);
offg.setColor(0xFF0000);
offg.drawString("按任意键进入游戏",20, 200, 0);
}
public void keyPressed(int n)
{
switch(this.gameState)
{case MyCanvas.GS_MainMENU:
this.gameState=MyCanvas.GS_CHAT;
break;
case MyCanvas.GS_CHAT:
if(this.chatIndex<7){chatIndex++;}
else{
chatIndex=0;
LoadMap(1);
this.gameState=MyCanvas.GS_LoadMap;
}
break;
case MyCanvas.GS_GAMING:
switch(this.getGameAction(n))
{case Canvas.UP:
playerdir=MyCanvas.P_UP;
oldPlayDir=playerdir;
break;
case Canvas.DOWN:
playerdir=MyCanvas.P_DOWN;
oldPlayDir=playerdir;
break;
case Canvas.LEFT:
playerdir=MyCanvas.P_LEFT;
oldPlayDir=playerdir;break;
case Canvas.RIGHT:
playerdir=MyCanvas.P_RIGHT;
oldPlayDir=playerdir;break;
}
}
}
public void keyReleased(int n)
{
if(this.gameState==MyCanvas.GS_GAMING){
playerdir=MyCanvas.P_STOP;
}
}
public void run()
{
while(true)
{//处理游戏逻辑

switch(this.gameState)
{case MyCanvas.GS_LOGO:
count++;
if(count>=10){
this.gameState=MyCanvas.GS_MainMENU;
count=0;
}
break;
case MyCanvas.GS_LoadMap:
try{
this.nowprocess++;
if(nowprocess<this.processLength)
{
int k=dis.readShort();
map01[nowprocess/maprow][nowprocess%maprow]=k;
}else{
this.gameState=MyCanvas.GS_GAMING;
}
}catch(Exception e){
}
break;
case MyCanvas.GS_GAMING:
nowframe=(++nowframe)%3;
switch(playerdir)
{case MyCanvas.P_UP:
py-=8;
break;
case MyCanvas.P_DOWN:
py+=8;
break;
case MyCanvas.P_LEFT:
px-=8;
break;
case MyCanvas.P_RIGHT:
if(this.px<this.screenWidth/2)
{px+=8;
}else{
mapnowcol++;
}
break;
}


}
//处理屏幕绘制
switch(this.gameState)
{
case MyCanvas.GS_LoadMap:
drawLoading();
break;
case MyCanvas.GS_LOGO:
drawLogo();
break;
case MyCanvas.GS_MainMENU:
drawMainMenu();
break;
case MyCanvas.GS_CHAT:
drawChat();//绘制对话
break;
case MyCanvas.GS_GAMING:
drawMap();//绘制场景
drawPlayer();//绘制人物
drawNPC();//绘制NPC
break;
}
//处理FPS
if(this.gameState==MyCanvas.GS_LoadMap)
sleeptime=1;
else
sleeptime=200;
try{Thread.sleep(sleeptime);}catch(Exception e){}
repaint();
serviceRepaints();
}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值