?? 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 + -