Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
31.05.2023
Размер:
5 Кб
Скачать
/** Этот класс представляет собой простую двумерную карту, состоящую из квадратных ячеек.
 * В каждой ячейке указывается стоимость обхода этой ячейки. **/
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