Проверка местоположений в мире сетки

Как бы я проверил, чтобы видеть, является ли два пробела перед классом ошибок чистым пятном, на котором ничего нет, а также не проходит ли граница? Прямо сейчас это то, что у меня есть

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; У меня нет программы под рукой.

У вас есть две проблемы.

  1. Не проверяет, находится ли следующее место в сетке, о котором вы знали
  2. Не переместился в то место, которое вы нашли. 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 

           }
        }
Другие вопросы по тегам