⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapmanager.java

📁 利用J2ME复刻FC经典RPG游戏<<重装机兵>>,基本实现了 该游戏的所有功能,如碰撞探测,地图转换,NPC对话,商店处理, 事件处理,横版回合制战斗系统,随机遇敌,并根
💻 JAVA
字号:
/**********************************************************
  
 File name:MapManager.java
 
 Author:夏文涛
 
 Version:Beta1.0
 
 Data:2007/10/16
  
 Description:
 
    地图数据的读取和相应的处理.
    
 Function List:
 
    1.createTiledLayerByForeground(Image,int)   创建前景层.
    2.createTiledLayerByBackground(Image,int)   创建背景层.
    3.getBackg()                                获取背景元素.
    4.creatMap(Image,String,int,int)            创建地图.

 *********************************************************/

package com.Izual.MetalMax;

import javax.microedition.lcdui.game.TiledLayer;
import javax.microedition.lcdui.Image;

import java.io.IOException;
import java.io.InputStream;


public class MapManager implements IData{

	/*地图编号*/
	public int stage = 0;
	
	/*地图大小,暂时没用*/
	public static int screenWidth = 240;
	public static int screenHeight = 240;
	
	/*英雄在地图的初始位置,暂时没用*/
	public static int heroPx = 0;
	public static int heroPy = 0;
	
	/*空构造函数*/
	public MapManager() {
		// TODO 自动生成构造函数存根
				
	}

	/*************************************************
	Function: createTiledLayerByForeground(Image,int)
	
	Description: 根据地图编号创建相应地图的前景图层
	
	Calls: creatMap(Image,String,int,int);
	
	Called By: MetalMaxCanvas.java
	
	Input: image:创建地图所需的图片资源;newstage:新的地图编号
	
	Output: 无
	
	Return: 创建好的前景图层
	
	Others: 无
	*************************************************/
	
	public  TiledLayer createTiledLayerByForeground(Image image,int newstage) {
		
		/*要返回的图层*/
		TiledLayer tiledLayer = null;
		
		/*更新地图编号*/
		this.stage = newstage;
		
		/*更具不同的地图编号创建不同的地图*/
		switch(newstage){
                    
		case WORLD_MAP :
			
			tiledLayer = creatMap(image,"/map/f_mmmap.txt",15,15);
			
			break;
		
		case LADUO_MAP:

			tiledLayer = creatMap(image,"/map/f_mm_laduo.txt",17,26);
			
			break;
			
		case ZHUJUE_1F_MAP:

			tiledLayer = creatMap(image,"/map/f_mm_zhujue_1f.txt",18,18);
			
			break;
			
		case ZHUJUE_2F_MAP:

			tiledLayer = creatMap(image,"/map/f_mm_zhujue_2f.txt",16,12);
	
			break;
			
		case LADUO_BAR_MAP:

			tiledLayer = creatMap(image,"/map/f_mm_laduo_bar.txt",16,16);
			
			break;
			
		case LADUO_CHUANSONG_MAP:
			
			tiledLayer = creatMap(image,"/map/f_mm_laduo_chuansong.txt",16,16);
			
			break;
			
		case LADUO_HEROITEM_MAP:
			
			tiledLayer = creatMap(image,"/map/f_mm_laduo_heroitem.txt",14,14);
			
			break;
			
		case LADUO_INN_MAP:
			
			tiledLayer = creatMap(image,"/map/f_mm_laduo_inn.txt",18,16);
			
			break;
			
		case LADUO_MINGQI_MAP:
			
			tiledLayer = creatMap(image,"/map/f_mm_laduo_mingqi.txt",22,19);
			
			break;
			
		case LADUO_SHANGJIN_MAP:
			
			tiledLayer = creatMap(image,"/map/f_mm_laduo_shangjin.txt",16,16);
			
			break;
		
		case TANK1_1F_MAP:
			
			tiledLayer = creatMap(image,"/map/f_mm_tank1_1f.txt",21,21);
			
			break;
		

		case TANK1_2F_MAP:
			
			tiledLayer = creatMap(image,"/map/f_mm_tank1_2f.txt",36,50);
			
			break;

		case TANK1_3F_MAP:
	
			tiledLayer = creatMap(image,"/map/f_mm_tank1_3f.txt",32,48);
			
			break;
			
		default :
			break;
		}
	
		return tiledLayer;
	}
	
	/*************************************************
	Function: createTiledLayerByBackground(Image,int)
	
	Description: 根据地图编号创建相应地图的背景图层
	
	Calls: creatMap(Image,String,int,int);
	
	Called By: MetalMaxCanvas.java
	
	Input: image:创建地图所需的图片资源;newstage:新的地图编号
	
	Output: 无
	
	Return: 创建好的背景图层
	
	Others: 无
	*************************************************/
	
	public TiledLayer createTiledLayerByBackground(Image image,int newstage) {
		
		TiledLayer tiledLayer = null;
		
		this.stage = newstage;
		
		switch(newstage){
		
		case WORLD_MAP: 
			
			tiledLayer = creatMap(image,"/map/b_mmmap.txt",15,15);
			break;
			
		case LADUO_MAP:
								
			tiledLayer = creatMap(image,"/map/b_mm_laduo.txt",17,26);
			
			break;
			
		case ZHUJUE_1F_MAP:
			
			tiledLayer = creatMap(image,"/map/b_mm_zhujue_1f.txt",18,18);
			
			break;
			
		case ZHUJUE_2F_MAP:
		
			tiledLayer = creatMap(image,"/map/b_mm_zhujue_2f.txt",16,12);
			
			break;
			
		case LADUO_BAR_MAP:
			
			tiledLayer = creatMap(image,"/map/b_mm_laduo_bar.txt",16,16);
						
			break;			

		case LADUO_CHUANSONG_MAP:
			
			tiledLayer = creatMap(image,"/map/b_mm_laduo_chuansong.txt",16,16);
			
			break;
			
		case LADUO_HEROITEM_MAP:
			
			tiledLayer = creatMap(image,"/map/b_mm_laduo_heroitem.txt",14,14);
			
			break;
			
		case LADUO_INN_MAP:

			tiledLayer = creatMap(image,"/map/b_mm_laduo_inn.txt",18,16);
			
			break;
			
		case LADUO_MINGQI_MAP:

			tiledLayer = creatMap(image,"/map/b_mm_laduo_mingqi.txt",22,19);
			
			break;
			
		case LADUO_SHANGJIN_MAP:
			
			tiledLayer = creatMap(image,"/map/b_mm_laduo_shangjin.txt",16,16);
			
			break;
			
		case TANK1_1F_MAP:
			
			tiledLayer = creatMap(image,"/map/b_mm_tank1_1f.txt",21,21);
			break;

	    /*为了节省资源,Tank1洞穴的2层和3层的背景暂时设为沙地*/
		case TANK1_2F_MAP:

			tiledLayer = new TiledLayer(50, 36, image, 16, 16);
			for (int i = 0; i < 50; i++)
				for (int j = 0; j < 36; j++)
					tiledLayer.setCell(i, j, 10);
			
			break;

		case TANK1_3F_MAP:
	
			tiledLayer = new TiledLayer(48, 32, image, 16, 16);
			for (int i = 0; i < 48; i++)
				for (int j = 0; j < 32; j++)
					tiledLayer.setCell(i, j, 10);
			
			break;
		
		default: 
			break;
		}
					
		return tiledLayer;
	}
	
	/*获取背景信息,只是世界地图的信息*/
	public int getBackg(int x, int y){
		
		byte mBackMap_worldMap[][] = {
				
				{ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
				{ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
				{ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
				{ 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
				{ 13, 13, 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
				{ 13, 13, 13, 13, 10, 10, 10, 13, 13, 10, 10, 10, 10, 10, 10 },
				{ 13, 13, 13, 13, 13, 10, 13, 14, 13, 13, 13, 10, 10, 10, 10 },
				{ 13, 13, 13, 13, 13, 10, 14, 2, 2, 13, 13, 13, 13, 10, 10 },
				{ 13, 13, 13, 13, 13, 10, 10, 13, 2, 2, 13, 13, 13, 13, 13 },
				{ 13, 13, 13, 13, 13, 13, 10, 13, 13, 13, 13, 13, 13, 13, 13 },
				{ 13, 13, 13, 13, 13, 13, 13, 10, 13, 13, 13, 13, 13, 13, 13 },
				{ 13, 13, 13, 13, 13, 13, 13, 10, 13, 13, 13, 13, 13, 10, 13 },
				{ 13, 13, 13, 13, 13, 13, 13, 10, 10, 10, 10, 10, 9, 9, 9 },
				{ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 9, 9, 9, 9 },
				{ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 9, 9, 9 }
			};
		return mBackMap_worldMap[y][x];
	}
	
	/*************************************************
	Function: creatMap(Image,String,int,int)
	
	Description: 根据存储在外部的地图信息创建地图
	
	Calls: TiledLayer(int,int,Image,int,int);
	       getResourceAsStream(String); 
	
	Called By: createTiledLayerByForeground(Image,int)
	           createTiledLayerByBackground(Image,int)
	
	Input: image:创建地图所需的图片资源;
	       filePath:地图数据存放的路径
	       row:地图的行数
	       col:地图的列数
	
	Output: 无
	
	Return: 创建好的地图图层
	
	Others: 无
	*************************************************/
	
	public TiledLayer creatMap(Image image,String filePath,int row,int col){
		
		/*输入流*/
		InputStream is = null;
		
		/*要创建的图层*/
		TiledLayer tiledLayer = null;
		
		/*根据行列数创建图层*/
		tiledLayer = new TiledLayer(col, row, image, 16, 16);
		
		/*获取外部文件信息*/
		is = getClass().getResourceAsStream(filePath);
		
		try{
			
			/*从地图文件中读取的数据*/
			int ch = -1;
			
			/*图块最大编号不会超过三位数,构建一个长度为3的数组存放图块编号*/
			int num[] = {-1,-1,-1};
			
			/*控制图块数据存放在数组里的位置,填入顺序为num[0],num[1],nm[2]*/
			int j = 0;
			
			/*num[]数组里不为0的数字的个数*/
			int count = 0;
			
			/*循环row * col次读取地图文件的数据*/
			for( int nRow = 0; nRow < row; nRow ++ )
			{
				for( int nCol = 0; nCol < col;)
				{
					/*每次循环ch初始值设置为-1,使之能正常进入while()循环*/
					ch = -1;
					
					/*当读出的不是文件结束符号-1时,读取地图文件数据*/
					while(ch < 0)
					{
						/*ch为输入流从地图文件中读入的一位文件数据的ASCII值*/
						ch = is.read();

						/*如果是文件结束符号,退出循环*/
						if( ch == -1 ){
							
							break;
						}
						
						/*ch减去字符0的ASCII值,获得的就是实际的地图文件存储数据*/
						ch = ch - '0';
						
						/*如果读出的数据大于0,则写入num[]数组相应的位置*/
						if(ch >= 0){
							
							num[j] = ch;
							j++;
						}
						
						/*如果读取的是数据的分隔符",",表示已经读完一个地图数据*/
						if(ch == -4){
							
							/*计算num[]数组中不为0的数的个数*/
							for(int i = 0; i < 3; i++){
								
								if(num[i] != -1){
									
									count ++;
								}
							}
							
							/*如果只有一个数不为0,则它肯定是个位*/
							if(count == 1){
								
								ch = num[0];
							}
							
							/*如果有两个数不为0,则先读入的是十位,后读入的是个位*/
							if(count == 2){
								
								ch = num[0]*10 + num[1];
							}
							
							/*如果都不为0,则先读入的是百位,然后是十位和个位*/
							if(count == 3){
								
								ch = num[0]*100 + num[1]*10 + num[2];
							}
							
							/*根据更新过ch值进行图层填充*/
							tiledLayer.setCell(nCol, nRow, ch);
							
							/*填充完毕后,记录用的数据复原,列数增加,开始读下一个数据*/
							num[0] = -1;
							num[1] = -1;
							num[2] = -1;
							nCol ++;
							j = 0;
							count = 0;
						}

					}
					
				}
			}
			/*关闭输入流*/
			is.close();
		}
		catch (IOException e){}	
		
		/*返回填充完毕的图层*/
		return tiledLayer;
	}
   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -