Проверка местоположений в мире сетки
Как бы я проверил, чтобы видеть, является ли два пробела перед классом ошибок чистым пятном, на котором ничего нет, а также не проходит ли граница? Прямо сейчас это то, что у меня есть
public void act()
{
if(canMove())
{
Location loc = getLocation();
Location nextLocation = loc.getAdjacentLocation(getDirection());
nextLocation = nextLocation.getAdjacentLocation(getDirection());
if (nextLocation == null)
{
move();
move();
}
}
}
Это не похоже на работу, так как ошибка ничего не делает.
2 ответа
Ты наверное имел ввиду if(nextLocation != null)
, Мы не хотим, чтобы ошибка выпрыгнула с доски (null
пространство). Это столько, сколько я могу вспомнить о GridWorld
; У меня нет программы под рукой.
У вас есть две проблемы.
- Не проверяет, находится ли следующее место в сетке, о котором вы знали
- Не переместился в то место, которое вы нашли. Move() просто перемещается в текущем направлении, независимо от того, находится он в сетке или нет. То есть, дважды позвонив, двинулся вперёд дважды, но не использовал местоположение, которое вы нашли в сетке.
Попробуйте изменить код на:
public void act()
{
if(canMove())
{
Location loc = getLocation();
Location nextLocation = loc.getAdjacentLocation(getDirection());
nextLocation = nextLocation.getAdjacentLocation(getDirection());
Grid<Actor> gr = getGrid();
if (gr.isValid(nextLocation))
{
moveTo(nextLocation);
}
else
move(); //This could be move() so you only move forward one
//space or turn() to turn
}
}