Keine Ahnung, ob jemand Lust hat, das anzuschauen, aber wenn ich
kompilieren lasse, kommt kein Fehler, aber wenn ichs ausführen lasse, kommt dies:
Woran es liegt, bin ich nicht in der Lage zu erkennen.
Ich poste aber mal den Code zu MapParser noch, damit vllt. irgendjemand damit was anfangen kann:
Java:
//Die Klasse BoulderDash
import java.util.ArrayList;
import java.util.List;
public class BoulderDash{
public static void main( String[] args){
MapParser mapparser=new MapParser();
List<List<String>> maps = MapProvider.loadMaps();
GUI gui=new GUI();
for (List<String> level : maps){
mapparser.parseMap(level);
}
//weiter bin ich noch nicht
}
}
kompilieren lasse, kommt kein Fehler, aber wenn ichs ausführen lasse, kommt dies:
Exception in thread "main" java.lang.Nullpointerexception
at MapParser.<init> 8
at BoulderDash main. 11
Woran es liegt, bin ich nicht in der Lage zu erkennen.
Ich poste aber mal den Code zu MapParser noch, damit vllt. irgendjemand damit was anfangen kann:
Java:
import java.util.ArrayList;
import java.util.List;
//Die Klasse MapParser
public class MapParser{
List<String> map;
Element[][]spielfeld=new Element[map.size()-1][map.get(1).length()];
//Implementiere das Spielfeld nur, wenn das übergebene Level valide ist.
//Das wird vorher mit Hilfe der untenstehenden Methoden getestet.
Element[][] parseMap(List<String> map){
char certainchar;
Element newElement;
int counter=0;
int counter2=0;
boolean sourrounded=false;
boolean equalLength;
for(int j=0; j<map.size(); j++){
counter=countPlayer(map.get(j), 'P');
sourrounded=sourroundedByWalls(map.get(j));
counter2=countExists(map.get(j), 'G');
}
equalLength=equalLength(map);
if(counter==1 && counter2>=1 && sourrounded==true && equalLength==true){
for(int i=0; i<map.size(); i++){
for(int j=0; j<=map.get(i).length(); j++){
certainchar=map.get(i).charAt(i);
switch(certainchar){
case'P': newElement=new Player(i,j,this); spielfeld[i][j]=newElement; break;
case'E': newElement=new Erde(i,j,this); spielfeld[i][j]=newElement;break;
case'S': newElement=new Stein(i,j,this); spielfeld[i][j]=newElement;break;
case'M': newElement=new Monster(i,j,this); spielfeld[i][j]=newElement;break;
case'D': newElement=new Diamant(i,j,this); spielfeld[i][j]=newElement;break;
case'G': newElement=new Ausgang(i,j,this); spielfeld[i][j]=newElement;break;
case' ': newElement=new LeeresFeld(i,j,this); spielfeld[i][j]=newElement;break;
}
}
}
}
else {System.out.println("Level ist nicht rechteckig; Spielfeld wurde nicht initialisiert.");
spielfeld=null;
}
return spielfeld;
}
public char getSpielfeld(int i, int j){
return spielfeld[i][j].getChar();
}
public void setSpielfeld(int i, int j, char k){
Element newElement2;
switch(k){
case'P': newElement2=new Player(i,j,this); spielfeld[i][j]=newElement2; break;
case'E': newElement2=new Erde(i,j,this); spielfeld[i][j]=newElement2;break;
case'S': newElement2=new Stein(i,j,this); spielfeld[i][j]=newElement2;break;
case'M': newElement2=new Monster(i,j,this); spielfeld[i][j]=newElement2;break;
case'D': newElement2=new Diamant(i,j,this); spielfeld[i][j]=newElement2;break;
case'G': newElement2=new Ausgang(i,j,this); spielfeld[i][j]=newElement2;break;
case' ': newElement2=new LeeresFeld(i,j,this); spielfeld[i][j]=newElement2;break;
}
}
//Es folgen Methoden, die für den Test der Validität eines Levels benutzt werden.
//Zähle die Anzahl der Spieler.
public int countPlayer(String string, char aChar){
int counter=0;
for(int i=0; i<string.length(); i++){
if(string.charAt(i)==aChar){
counter++;
}
}
return counter;
}
//Teste, ob am Anfang und Ende eines Strings ein bestimmes Char steht.
public boolean sourroundedByWalls(String string){
boolean sourrounded=true;
if(string.charAt(0)!='W' || string.charAt(string.length()-1)!='W'){
sourrounded=false;
}
return sourrounded;
}
//Zähle die Anzahl der Ausgänge.
public int countExists(String string, char aChar){
int counter2=0;
for(int i=0; i<string.length(); i++){
if(string.charAt(i)==aChar){
counter2++;
}
}
return counter2;
}
//Teste, ob alle Zeilen die gleiche Länge haben (Rechtecksform des Spielfelds)
public boolean equalLength(List<String> irg){
boolean equalLength=true;
int LengthOfLine=irg.get(0).length();
int LengthOfNextLine;
if(equalLength==true){
for(int i=1; i<irg.size();i++){
LengthOfNextLine=irg.get(i).length();
if(LengthOfLine!=LengthOfNextLine){
equalLength=false;
}
LengthOfLine=LengthOfNextLine;
}
}
return equalLength;
}
}