www.pudn.com > 20063622273380188.rar > 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(); 
		} 
	} 
}