2010-07-13 6 views
0

OK donc j'ai cette applet je fais et je veux que ce générateur d'un monde selon plusieurs ...java - charger des cartes différentes

Ici, il est:

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; } 

et appeler J'utilise:

board = loadBoard (1);

Je l'ai mis dans la méthode init(). Ensuite, je peux appeler des cartes sur le numéro à l'intérieur de loadBoard(). Cependant, quand je commence mon jeu, je reçois une exception nullpointer et je SAIS pour un fait que c'est quelque chose à voir avec le code que je viens de vous montrer ci-dessus. C'est probablement une erreur de débutant que je fais ... peut-être que vous pouvez aider?

Répondre

2

C'est. Vous créez à nouveau la variable "board". Même si le nom est le même, la variable que vous renvoyez n'est pas celle que vous avez créée. Voici le code fixe:

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 }, 

}; } 

} 

Il peut être simp'ified encore plus si je maintenant comment beaucoup « chiffres » vous êtes planante avoir :)

Une autre suggestion serait de ne pas créer des tableaux à la volée, mais les avoir comme des constantes. Retournez ensuite le tableau approprié de la méthode. Votre code peut ressembler (pour plus de 2 choix):

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

disons 4 alors quoi? et merci: P – nn2

+0

ps - j'obtiens une instruction inaccessible sur votre code pour la ligne "return board": S – nn2

+0

@Dan - bien supprime-le. –

0

Je ne suis pas sûr que votre pointeur null est lié à ce code. Cependant, il est vraiment étrange que vous déclariez board dans la portée de l'instruction if/else et que vous renvoyiez cette variable en dehors de la portée.

+0

ouais, je peu remarqué ce que je faisais était mal à mi-chemin, mais je dis « vis, je vais demander stackoverflow » – nn2