Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
31.05.2023
Размер:
5.27 Кб
Скачать
/** Этот класс представляет собой простую двумерную карту, состоящую из квадратных ячеек.
* В каждой ячейке указывается стоимость обхода этой ячейки. **/
public class Map2D {
/** Ширина и высота карты. **/
private int width;
private int height;
/** Фактические картографические данные, необходимые алгоритму поиска пути для навигации. **/
private int[][] cells;
/** Начальное и конечное местоположение для выполнения поиска пути A*. **/
private Location start;
private Location finish;
/** Создает новую 2D-карту с заданными шириной и высотой. **/
public Map2D(int width, int height) {
if (width <= 0 || height <= 0) {
/** выдает исколючение IllegalArgumentException**/
throw new IllegalArgumentException("ширина и высота должны быть положительными значениями; " +
"получено" + width + "x" + height);
}
this.width = width;
this.height = height;
cells = new int[width][height];

// Составьте несколько координат для начала и конца.
start = new Location(0,height / 2);
finish = new Location(width - 1, height / 2);
}
/** Этот вспомогательный метод проверяет указанные координаты, чтобы увидеть, находятся ли они
* в пределах границ карты. Если координаты отсутствуют на карте
* затем метод выдает исключение <code>IllegalArgumentException</code>. **/
private void checkCoords(int x, int y) {
if (x < 0 || x > width) {
/** выдает исколючение IllegalArgumentException**/
throw new IllegalArgumentException("x должен быть в диапазоне [0, " +
width + "), got " + x);
}
if (y < 0 || y > height) {
/** выдает исколючение IllegalArgumentException **/
throw new IllegalArgumentException("y должен быть в диапазоне [0, " +
height + "), got " + y);
}
}
/** Возвращает ширину и высоту карты. **/
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
/** Возвращает значение true, если указанные координаты содержатся на карте площадь. **/
public boolean contains(int x, int y) {
return (x >= 0 && x < width && y >= 0 && y < height);
}
/** Возвращает значение true, если местоположение содержится в пределах области карты. **/
public boolean contains(Location loc) {
return contains(loc.xCoord, loc.yCoord);
}
/** Возвращает сохраненное значение стоимости для указанной ячейки. **/
public int getCellValue(int x, int y) {
checkCoords(x, y);
return cells[x][y];
}
/** Возвращает сохраненное значение стоимости для указанной ячейки. **/
public int getCellValue(Location loc) {
return getCellValue(loc.xCoord, loc.yCoord);
}
/** Задает значение себестоимости для указанной ячейки. **/
public void setCellValue(int x, int y, int value) {
checkCoords(x, y);
cells[x][y] = value;
}
/** Возвращает начальное местоположение для карты. Именно здесь сгенерированный путь начнется. **/
public Location getStart() {
return start;
}
/** Задает начальное местоположение для карты. Здесь находится сгенерированный путь начнется. **/
public void setStart(Location loc) {
if (loc == null)
throw new NullPointerException("loc cannot be null");
start = loc;
}
/** Возвращает конечное местоположение на карте. Именно здесь сгенерированный путь завершится. **/
public Location getFinish() {
return finish;
}
/** Задает конечное местоположение для карты. Здесь находится сгенерированный путь завершится. **/
public void setFinish(Location loc) {
if (loc == null)
throw new NullPointerException("loc cannot be null");
finish = loc;
}
}
Соседние файлы в папке лабораторная 3