📄 map.java
字号:
//Source file: d:/MyProjects/Java/eatbean/eatbean/Map.java
package eatbean;
import java.awt.*;
//
import eatbean.util.*;
public class Map {
private int elements_width;
private int elements_height;
private int[][] elements;
private int absX;
private int absY;
private Mediator mediator;
/** 地图对象元素数组/矩阵 */
private MapElement mapElements[][] = null;
/** Fairy初始时所在Room的数组索引 */
private Pos fairyBornPos = null;
/** Sprite初始时所在Room的数组索引 */
private Pos spriteBornPos = null;
private int width, height;
/** 豆子数 */
private int beanNum = 0;
public Map(Mediator m, int[][] e, int absX, int absY) throws Exception {
this.mediator = m;
this.elements = e;
elements_height = this.elements.length;
elements_width = this.elements[0].length;
this.absX = absX;
this.absY = absY;
mapElements = createElements();
width = elements_width * MapElement.ELEMENT_MAX_SIZE;
height = elements_height * MapElement.ELEMENT_MAX_SIZE;
}
public int getWidth() { return width; }
public int getHeight() { return height; }
/** 绘制地图 */
public void paint() {
if(Debug.ON) System.out.println("Enter Map.paint()...");
OffScreen offScreen = mediator.getOffScreen();
offScreen.clear();
for (int y = 0; y < elements_height; y++) {
for (int x = 0; x < elements_width; x++) {
mapElements[y][x].draw(offScreen);
}
}
}
public void paint(Pos pos) {
OffScreen offScreen = mediator.getOffScreen();
mapElements[pos.y][pos.x].draw(offScreen);
}
public final int[][] getMapIntElements() {
return elements;
}
private MapElement[][] createElements() throws Exception {
if(Debug.ON) Debug.println("createElements()...");
MapElement[][] result = new MapElement[elements_height][elements_width];
int posX = absX,
posY = absY;
for (int y = 0; y < elements_height; y++)
for (int x = 0; x < elements_width; x++) {
if(x <= 0)
posX = absX;
else
posX = result[y][x-1].getRight();
if(y <= 0)
posY = absY;
else
posY = result[y-1][x].getBottom();
if(elements[y][x]/Wall.BASE_NUM == 1)
result[y][x] = new Wall(elements[y][x], posX, posY);
else if(elements[y][x]/Door.BASE_NUM == 1)
result[y][x] = new Door(elements[y][x], posX, posY);
else if(elements[y][x]/Room.BASE_NUM == 1) {
result[y][x] = new Room(elements[y][x], posX, posY);
if(elements[y][x] == Room.STYLE_SPRITE_BORN)
spriteBornPos = new Pos(x, y);
else if(elements[y][x] == Room.STYLE_FAIRY_BORN)
fairyBornPos = new Pos(x, y);
if(elements[y][x] == Room.STYLE_DEFAULT) beanNum++;
} else
throw new Exception("地图初始化失败: 存在不可识别的元素:"
+ Integer.toString(elements[y][x]) + " x: "
+ Integer.toString(x) + " y: "
+ Integer.toString(y));
} // end for
if(spriteBornPos == null)
throw new Exception("地图初始化失败: 找不到Room.STYLE_SPRITE_BORN类型的元素");
if(fairyBornPos == null)
throw new Exception("地图初始化失败: 找不到Room.STYLE_FAIRY_BORN类型的元素");
return result;
}
public Pos getFairyBornPos() {
//if(fairyBornPos == null) return null;
return (Pos)fairyBornPos.clone();
}
public Pos getSpriteBornPos() {
//if(spriteBornPos == null) return null;
return (Pos)spriteBornPos.clone();
}
public MapElement getElement(Pos pos) {
if((pos.x < 0 || pos.x >= elements_width)
|| (pos.y < 0 || pos.y >= elements_height))
return null;
else
return mapElements[pos.y][pos.x];
}
public int getBeanNum() { return beanNum; }
public void decBeanNum() { beanNum--; }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -