Метод getLocation() возвращает значение null.
Location loc = this.getLocation();
//Loc is now null, so the following call will result in a null pointer exception
Location newLoc = loc.getAdjacentLocation(getDirection());
Это происходит потому, что это удаление себя из сетки/она ест сама
public ArrayList<Actor> getActors(){
ArrayList<Actor> list = new ArrayList<Actor>();
Grid<Actor> gr = getGrid();
Location loc = getLocation();
atLocation = atRandomLocation();
if(!atLocation){
setDirection(loc.getDirectionToward(randomLocation));
//THIS RETURNS THE CRITTER'S CURRENT LOCATION!
Actor a = gr.get(getLocation());
if(a != null)
//This critter is not going to be null, so it adds it to the list
list.add(a);
}else
getRandomLocation();
//This list contains all actors to be eaten
return list;
}
Что ваш метод не будет проверять, если он на месте, добавляет себя в список, а затем ЕСТ СЕБЯ !
public void processActors(ArrayList<Actor> actors){
for(Actor a : actors)
//This list only contains the critter
a.removeSelfFromGrid();
}
Что вам нужно сделать, это найти следующее местоположение он должен переместиться, есть какие-то актеры в этом пространстве, а затем двигаться.
P.S. По-видимому, Криттер поедет сам по умолчанию, если это единственный актер.