Изменение прочности плитки в зависимости от ее расстояния от игрока - PullRequest
0 голосов
/ 11 апреля 2019

Я создаю игру Turn Based Tile (в стиле Dungeons and Dragons), однако я борюсь за создание самой системы пошаговых игр. Когда игрок начинает свой ход (нажатием кнопки Start Turn), код рассчитывает расстояние между игроком и всеми тайлами в массиве. Если расстояние превышает определенную величину, я хочу изменить твердость плитки на твердую, а если нет, позволить им пройти через нее. Существенно ограничивает, насколько далеко игрок может продвинуться за один ход. Я не уверен, что подхожу к этому наилучшим образом, так как я, вероятно, мог бы сделать это как систему «укажи и щелкни», а не использовать ввод с клавиатуры - но в любом случае

То, как это работает прямо сейчас, заключается в тиковом методе класса карты, мы проверяем, была ли нажата кнопка «Начать перемещение», и вызываем метод Tile Checker для определения расстояния.

Кажется, что он успешно рассчитывает расстояние, но теперь я не уверен, как отправить эту информацию в другой класс, а затем использовать ее для изменения логического значения, которое решает, является ли мозаика сплошной.

У меня уже есть коллизия, и изменение метода isSolid в отдельных классах тайла на true сделает его твердым, чтобы игрок не мог пройти через него. Я просто в недоумении, как обеспечить соблюдение в отношении моего массива.

Я впервые задаю вопрос, поэтому не совсем уверен во всем коде, который я должен включить, поэтому вот ссылка на github на весь проект: https://github.com/Chadface/D-D-Simulator

Я пытался подойти к этому несколькими способами, например, пытаться проверить расстояние в классе Tile, но я не совсем понимаю, как правильно взаимодействовать с массивом

Все в моем классе карты

    public void tick() {
        itemManager.tick();
        entityManager.tick();

        if (GameState.ButtonPressed() && !tileCheck) {
            tileChecker(distanceCalculation);
        }
    }
public void tileChecker(double distanceCalculation) {
        xPosition = entityManager.getPlayer().getX();
        yPosition = entityManager.getPlayer().getY();
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                if (!getTile(x, y).isSolid()) { // only check tiles that aren't solid
                    getTile(x, y);
                    tileX = x;
                    tileY = y;
                    calculation(tileX, tileY, distanceCalculation);
                }

            }
        }
        tileCheck = true;

    }

Класс плитки для травы

public class GrassTile extends Tile {

    public GrassTile(int id) {
        super(Assets.grass, id);
    }

    public boolean isSolid() {

        return false;
    }
}

...