ap)
{
if (mazeMap == null || mazeMap.length <= 0)
{
throw new UnknownElementException(null, "null error");
}
for (int column = 0; column < mazeMap[0].length; column++)
{
for (int row = 0; row < mazeMap.length; row++)
{
parseMazePosition(new Position(row, column),
mazeMap[row][column]);
}
}
edgePosition = new Position(mazeMap.length, mazeMap[0].length);
}
public Position getPrincePosition()
{
return princePosition;
}
public Position getPrincessPosition()
{
return princessPosition;
}
/**
* 解析迷宫的位置信息
*/
private void parseMazePosition(Position currentPosition, char thing)
{
switch (thing)
{
case '.':
getAllReachablePositions().add(currentPosition);
break;
case '*':
break;
case 'S':
setPrincePosition(currentPosition);
break;
case 'P':
setPrincessPosition(currentPosition);
break;
default:
throw new UnknownElementException(null, thing);
}
}
private Position getOriginPosition()
{
return originPosition;
}
private Position getEdgePosition()
{
return edgePosition;
}
private void setPrincePosition(Position princePosition)
{
this.princePosition = princePosition;
}
private void setPrincessPosition(Position princessPosition)
{
this.princessPosition = princessPosition;
}
private List getAllReachablePositions()
{
return allReachablePositions;
}
}
import java.util.ArrayList;
import java.util.List;
import javax.lang.model.element.UnknownElementException;
/**
* 迷宫地图
*
* 类名称:Maze 类描述: 创建人:dobuy
*
*/
public class MazeMap
{
/**
* 迷宫中的原点(0,0)
*/
private Position originPosition;
/**
* 迷宫中的最大边界点
*/
private Position edgePosition;
/**
* 王子的位置
*/
private Position princePosition;
/**
* 公主的位置
*/
private Position princessPosition;
/**
* 所有可达的位置集合(非墙壁)
*/
private List allReachablePositions;
public MazeMap()
{
allReachablePositions = new ArrayList();
originPosition = new Position(0, 0);
}
public boolean isOverEdge(Position position)
{
if (getOriginPosition().getX() > position.getX()
|| getOriginPosition().getY() > position.getY()
|| getEdgePosition().getX() < position.getX()
|| getEdgePosition().getY() < position.getY())
{
return true;
}
return false;
}
/**
* 判断是否是墙
*
*/
public boolean isWall(Position currentPosition)
{
if (isOverEdge(currentPosition) || isPrincess(currentPosition)
|| getPrincePosition().equals(currentPosition))
{
return false;
}
return !getAllReachablePositions().contains(currentPosition);
}
/**
* 判断当前位置是否是公主位置
*
*/
public boolean isPrincess(Position currentPosition)
{
return getPrincessPosition().equals(currentPosition);
}
/**
* 初始化迷宫地址(坐标转换成点对象),并解析出王子的位置和公主的位置
*
* @param mazeMap 二维坐标表示的迷宫地图
*
*/
public void initMazeMap(char[][] mazeMap)
{
if (mazeMap == null || mazeMap.length <= 0)
{
throw new UnknownElementException(null, "null error");
}
for (int column = 0; column < mazeMap[0].length; column++)
{
for (int row = 0; row < mazeMap.length; row++)
{
parseMazePosition(new Position(row, column),
mazeMap[ro