Так что в основном у меня есть проект GridWorld, который я сейчас делаю в своем классе AP Comp Sci. Я делаю Пакмана. Вот мой код для метода act (для тех, кто не знаком с GridWorld, метод act вызывается каждый раз, когда от актера ожидается новый ход):
public void act()
{
Location loc = getLocation();
if(direction==null) {
}
else if(direction.equals("NORTH")) {
Location next = loc.getAdjacentLocation(loc.NORTH);
if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) {
if(getGrid().get(next) instanceof Food)
addFood();
moveTo(next);
direction = "NORTH";
}
}
else if(direction.equals("SOUTH")) {
Location next = loc.getAdjacentLocation(loc.SOUTH);
if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) {
if(getGrid().get(next) instanceof Food)
addFood();
moveTo(getLocation().getAdjacentLocation(getLocation().SOUTH));
direction = "SOUTH";
}
}
else if(direction.equals("EAST")) {
Location next = loc.getAdjacentLocation(loc.EAST);
if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) {
if(getGrid().get(next) instanceof Food)
addFood();
moveTo(getLocation().getAdjacentLocation(getLocation().EAST));
direction = "EAST";
}
else if(getLocation().getCol()==20 && getLocation().getRow()==9) {
moveTo(new Location(9,0));
direction = "EAST";
}
}
else if(direction.equals("WEST")) {
Location next = loc.getAdjacentLocation(loc.WEST);
if(getGrid().isValid(next) && (getGrid().get(next)==null || getGrid().get(next) instanceof Food)) {
moveTo(getLocation().getAdjacentLocation(getLocation().WEST));
direction = "WEST";
}
else if(getLocation().getCol()==0 && getLocation().getRow()==9) {
moveTo(new Location(9,20));
direction = "WEST";
}
}
}
Причина странной формулировки в последних двух утверждениях if bc. Я хочу, чтобы Pacman мог телепортироваться в реальной игре. Теперь, когда я запускаю игру, примерно в 90% случаев она работает, но в остальные 10% я получаю исключение IllegalArgumentException, в котором говорится, что я пытаюсь перейти в место, которого нет на доске (например, (9, -1 ) и (9,21)). Я хочу знать, как я могу поймать или бросить или что мне нужно сделать, чтобы этого не случилось. Я никогда не использовал catch или throw, поэтому, пожалуйста, попробуйте объяснить ваши аргументы, спасибо!