1) Способ, которым вы реализовали блокировку (tx, ty), он принимает только допустимые координаты доски (0 <= tx <= 12 и 0 <= ty <= 8).В противном случае он проверяет недопустимую позицию массива, создавая ArrayIndexOutOfBoundsException.Вы уверены, что это ваше намерение?Я думаю, что имеет смысл считать плитки вне игры заблокированными. </p>
2) В строках 85-102, похоже, много ошибок.Я думаю, что вы имели в виду что-то вроде:
if (spawnX == 0 || blocked(spawnX - 1, spawnY)) {
left = false;
System.out.println("You can't go left!");
}
if (spawnX == 12 || blocked(spawnX + 1, spawnY)) {
right = false;
System.out.println("You can't go right!");
}
if (spawnY ==0 || blocked(spawnX, spawnY - 1)) {
up = false;
System.out.println("You can't go up!");
}
if (spawnY == 8 || blocked(spawnX, spawnY + 1)) {
down = false;
System.out.println("You can't go down!");
}
В любом случае, если вы исправите (1), как я предлагал, дополнительное условие ограничения для направления не требуется.
3) isInBound (r, c) реализован неправильно.Он всегда возвращает false, из-за условий c.
4) Есть много других проблем с кодом, но я не буду вдаваться в подробности.Как правило, постарайтесь сделать свой дизайн простым и убедитесь, что код не повторяется.