📄 mapmanager.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 + -