📄 map.java
字号:
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;
class Map
{
private TiledLayer mapLayers[];
//private Charactor npc[];
private Other others[];
private Charactor me;
public static final int REACHABLE=0,UNREACHABLE=1;
private final int CELL=16,DOWN[]={0},UP[]={9},RIGHT[]={3},LEFT[]={6},MOVEDOWN[]={1,0,2,0},MOVERIGHT[]= {4, 3, 5, 3},MOVELEFT[]= {7, 6, 8, 6},MOVEUP[]= {10, 9, 11, 9};
public int mapId,entrance[][];
private boolean hasEnemy=false;
private Image charImg;
private String mapName;
public Map(int mapId,int mapState,int x,int y)
{
mapLayers=new TiledLayer[2];
this.mapId=mapId;
int reach[][]=null,unreach[][]=null;
Image img;
switch(mapId)
{
case 0:
hasEnemy=false;
mapName="屋内一层";
reach=Resourse.readMap(0);
unreach=Resourse.readMap(1);
img=Resourse.readImage(Resourse.ROOM);
mapLayers[0]=new TiledLayer(10,10,img,CELL,CELL);
mapLayers[1]=new TiledLayer(10,10,img,CELL,CELL);
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
mapLayers[0].setCell(i,j,reach[i][j]);
mapLayers[1].setCell(i,j,unreach[i][j]);
}
}
others=new Other[2];
others[0]=new Other(6,6);
entrance=new int[2][5];
entrance[0][0]=1;
entrance[0][1]=5;
entrance[0][2]=1;
entrance[0][3]=2;
entrance[0][4]=4;
entrance[1][0]=3;
entrance[1][1]=8;
entrance[1][2]=2;
entrance[1][3]=5;
entrance[1][4]=6;
if(mapState==0)
others[1]=new Other(2,2,1);
else if(mapState==1)
{
mapLayers[1].setCell(2,2,11);
others[1]=new Other(2,2,0);
}
break;
case 1:
hasEnemy=false;
mapName="屋内地下";
reach=Resourse.readMap(2);
unreach=Resourse.readMap(3);
img=Resourse.readImage(Resourse.ROOM);
mapLayers[0]=new TiledLayer(10,10,img,CELL,CELL);
mapLayers[1]=new TiledLayer(10,10,img,CELL,CELL);
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
mapLayers[0].setCell(i,j,reach[i][j]);
mapLayers[1].setCell(i,j,unreach[i][j]);
}
}
others=new Other[1];
entrance=new int[1][5];
entrance[0][0]=1;
entrance[0][1]=5;
entrance[0][2]=0;
entrance[0][3]=2;
entrance[0][4]=4;
if(mapState==0)
others[0]=new Other(4,2,150);
else if(mapState==1)
{
mapLayers[1].setCell(4,2,11);
others[0]=new Other(4,2,0);
}
break;
case 2:
hasEnemy=true;
mapName="树林一";
reach=Resourse.readMap(4);
unreach=Resourse.readMap(5);
img=Resourse.readImage(Resourse.GROUND);
mapLayers[0]=new TiledLayer(10,10,img,CELL,CELL);
mapLayers[1]=new TiledLayer(10,10,img,CELL,CELL);
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
mapLayers[0].setCell(i,j,reach[i][j]);
mapLayers[1].setCell(i,j,unreach[i][j]);
}
}
others=new Other[1];
others[0]=new Other(6,7,"云深不知处");
entrance=new int[2][5];
entrance[0][0]=5;
entrance[0][1]=6;
entrance[0][2]=0;
entrance[0][3]=3;
entrance[0][4]=6;
break;
default:
break;
}
charImg=Resourse.readImage(Resourse.MAINCHAR);
me=new Charactor(charImg,16,25);
me.setPosition(x,y);
}
String getMapName()
{
return mapName;
}
Other[] getOthers()
{
return others;
}
Charactor getMe()
{
return me;
}
int[][] getEntrance()
{
return entrance;
}
TiledLayer getLayer(int num)
{
return mapLayers[num];
}
boolean hasEnemy()
{
return hasEnemy;
}
int getMapId()
{
return mapId;
}
Map toMap(int mapId,int mapState,int x,int y)
{
return (new Map(mapId,mapState,x,y));
}
class Charactor extends Sprite
{
private int fX,fY,foot,face;
public static final int Down=0,Right=1,Up=2,Left=3;
public Charactor(Image arg0, int arg1, int arg2)
{
super(arg0, arg1, arg2);
fX=0;
fY=0;
foot=4;
setFrameSequence(DOWN);
}
void up()
{
setFrameSequence(MOVEUP);
fX=0;
fY=-1;
face=Up;
}
void down()
{
setFrameSequence(MOVEDOWN);
fX=0;
fY=1;
face=Down;
}
void left()
{
setFrameSequence(MOVELEFT);
fX=-1;
fY=0;
face=Left;
}
void right()
{
setFrameSequence(MOVERIGHT);
fX=1;
fY=0;
face=Right;
}
int getFace()
{
return face;
}
void stop()
{
if(fX==1)
{
setFrameSequence(RIGHT);
face=Right;
}
else if(fX==-1)
{
setFrameSequence(LEFT);
face=Left;
}
else if(fY==1)
{
setFrameSequence(DOWN);
face=Down;
}
else if(fY==-1)
{
setFrameSequence(UP);
face=Up;
}
fX=0;
fY=0;
}
void go()
{
if((fY==-1)&&(mapLayers[UNREACHABLE].getCell((getX()+8)/16,(getY()+16-3)/16)!=0))
stop();
else if(fY==1&&(mapLayers[UNREACHABLE].getCell((getX()+8)/16,(getY()+25+3)/16)!=0))
stop();
else if(fX==-1&&(mapLayers[UNREACHABLE].getCell((getX()-3)/16,(getY()+25)/16)!=0))
stop();
else if(fX==1&&(mapLayers[UNREACHABLE].getCell((getX()+16+3)/16,(getY()+25)/16)!=0))
stop();
move(fX*foot,fY*foot);
nextFrame();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -