Java - загрузка разных карт - PullRequest
0 голосов
/ 13 июля 2010

Хорошо, у меня есть этот апплет, и я хочу, чтобы он генерировал мир по числу ...

Вот оно:

 public int[][] loadBoard(int map) {
    if (map == 1) { int[][] board = { {
 2,2,24,24,24,24,24,3,3,0,0,0,1 },

 { 2,2,24,23,23,23,24,1,3,0,0,0,1 },

 { 1,1,24,23,23,23,24,1,3,3,3,3,1 },

 { 1,1,24,24,23,24,24,1,1,1,1,3,1 },

 { 1,1,1,1,7,1,1,1,1,1,1,3,1 },

 { 5,1,1,1,7,7,7,7,7,1,1,1,1 },

 { 6,3,3,1,3,3,3,1,7,7,7,3,1 },

 { 6,3,3,1,3,1,1,1,1,1,7,1,1 },

 { 3,3,1,1,1,1,1,1,1,1,7,1,1 } };

 }else{

 int[][] board = {

 { 1,1,1,1,1,24,1,1,1,1,1,1,1 },


 { 1,1,1,1,1,24,1,1,1,1,1,1,1 },

 { 1,1,1,1,1,24,1,1,24,1,1,1,1 },

 { 1,1,1,1,1,24,1,1,24,1,1,1,1 },

 { 1,1,7,1,1,24,24,24,24,1,1,1,1 },

 { 1,1,7,1,1,24,1,24,1,1,1,1,1 },

 { 1,1,1,1,1,24,1,1,1,1,1,1,1 },

 { 1,1,1,1,1,24,1,1,1,1,1,1,1 },

 { 1,3,3,1,1,24,1,1,1,1,1,1,1 },

 }; } return board; }

и для его вызова я использую:

board = loadBoard (1);

Я поместил это в метод init (). Тогда я могу вызывать карты по номеру внутри loadBoard (). Тем не менее, когда я запускаю свою игру, я получаю исключение nullpointer и Я ЗНАЮ ФАКТ, что это связано с кодом, который я только что показал вам выше. Это, наверное, какая-то ошибка новичка, которую я делаю .. может быть, вы можете помочь?

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Это так. Вы снова создаете переменную "board". Даже если имя совпадает, переменная, которую вы возвращаете, не та, которую вы создали. Вот фиксированный код:

public int[][] loadBoard(int map) {
    if (map == 1) { 
 return new int[][] { 

 {2,2,24,24,24,24,24,3,3,0,0,0,1 },

 { 2,2,24,23,23,23,24,1,3,0,0,0,1 },

 { 1,1,24,23,23,23,24,1,3,3,3,3,1 },

 { 1,1,24,24,23,24,24,1,1,1,1,3,1 },

 { 1,1,1,1,7,1,1,1,1,1,1,3,1 },

 { 5,1,1,1,7,7,7,7,7,1,1,1,1 },

 { 6,3,3,1,3,3,3,1,7,7,7,3,1 },

 { 6,3,3,1,3,1,1,1,1,1,7,1,1 },

 { 3,3,1,1,1,1,1,1,1,1,7,1,1 } };

 }else{

 return new int[][] {

 { 1,1,1,1,1,24,1,1,1,1,1,1,1 },


 { 1,1,1,1,1,24,1,1,1,1,1,1,1 },

 { 1,1,1,1,1,24,1,1,24,1,1,1,1 },

 { 1,1,1,1,1,24,1,1,24,1,1,1,1 },

 { 1,1,7,1,1,24,24,24,24,1,1,1,1 },

 { 1,1,7,1,1,24,1,24,1,1,1,1,1 },

 { 1,1,1,1,1,24,1,1,1,1,1,1,1 },

 { 1,1,1,1,1,24,1,1,1,1,1,1,1 },

 { 1,3,3,1,1,24,1,1,1,1,1,1,1 },

 }; } 

}

Это может быть упрощено еще больше, если бы я теперь определил, сколько "чисел" вы планируете иметь

Другим предложением было бы НЕ создавать массивы на лету, а использовать их как константы. Затем верните соответствующий массив из метода. Ваш код может выглядеть следующим образом (более 2 вариантов):

 private static final int[][] BOARD1 = <array here>;
 private static final int[][] BOARD2 = <array here>;
 private static final int[][] BOARD3 = <array here>;
 private static final int[][] BOARD4 = <array here>;


 public function int[][] loadBoard( int choice ) {
   switch( choice ) {
      case 1: return BOARD1;
      case 2: return BOARD2;
      case 3: return BOARD3;
      case 4: return BOARD4;
      default: throw new RuntimeException( "Unknown board choice" );
   }
 }
0 голосов
/ 13 июля 2010

Я не уверен, что ваш нулевой указатель связан с этим кодом. Однако действительно странно, что вы объявляете board внутри области действия оператора if / else и возвращаете эту переменную вне области действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...