Я создаю игру 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;
}
}