2016-04-19 12 views
0

作成:この1、基本的に私はゲームをしなければならないと私は、ファイルから読み込むことで部屋を作成する必要があります(ゲーム用)ファイルから読み込むことで部屋を

# 
# 0 D room0.txt 0 
# 1 E room1.txt 0 
# 
WWWW0WWWWW 
W  W 
W  W 
W  W 
W  W 
W  W W 
W  W W 
W  W W 
W  W 1 
WWWWWWWWWW 

「#」私はそれらの行をスキップすることができます(彼らはちょうど情報のためです)、そして "W"は壁を置くために必要な場所です、数字はドアのためのもので、空白は床です。

部屋を作成する最も良い方法は、ファイルを受け取り、それを読み込んで "情報"をString [10] [10]に入れ、別のメソッドを作成するメソッドを作成することですStringを受け取った[10] [10]が部屋を作成して部屋を作成します(部屋に画像を追加します)。しかし、ファイルを読み込むのが難しくなりました。ありがたく思う。

私はプログラムがこのライン上で実行したときに私が取得エラー:

(R [X] [Y] .equals( "W"))場合

君たちは別のクラスが必要な場合、ゲームがどのように表示されるべきか、または私が見せてくれたことを忘れた何かのイメージが私に知らせてくれて、助けてくれてありがとう。

public void generateRoom(File file){  
    if(file.exists()){ 
     Scanner sc = null;  
     String[][] r = new String[10][]; 
     int row = 0; 
     try { 
      sc = new Scanner(file); 
      String line = sc.nextLine(); 
      while(sc.hasNextLine() && row < 10){ 
       if(line.startsWith("#")) 
        sc.nextLine(); 
       else{ 
        String[] s0 = line.split(""); 
        if(s0.length==10){ 
         r[row]=s0; 

        row++; 
       }   
      } 
     } 
     for(int x = 0; x < 10; x++){  
     for(int y = 0; y < 10; y++){ 
      if(r[x][y].equals("W")) 
        tiles.add(new Wall(new Position(x,y)));  
      if(r[x][y].equals("1") || r[x][y].equals("2")) 
        tiles.add(new Door(new Position(x,y))); 
      if(r[x][y].equals("0")){ 
       tiles.add(new Door(new Position(x,y))); 
       hero.setPosition(new Position(x,y)); 
       tiles.add(hero); 
      } 
      else tiles.add(new Floor(new Position(x,y))); 
      gui.newImages(tiles); 
      gui.update(); 
     } 
     } 
     }catch (FileNotFoundException e) { 
      System.out.println("Ficheiro "+file.getAbsolutePath()+ 
        " não existe. ");   } 
     finally{ 
      if(sc!=null)sc.close(); 
     } 
    } 
    else 
     System.out.println("Ficheiro "+file.getAbsolutePath()+ 
       " nã£o existe. ");   

}

+3

どのようなエラーが表示されますか? –

+0

splitを空の区切り文字とともに使用しないでください。.getChars()を使用してください。 – Natecat

答えて

0

あなたはlineを再割り当てされることはありません。

この:

if(line.startsWith("#")) 
    sc.nextLine(); 

if(line.startsWith("#")) 
    line = sc.nextLine(); 

を読んしかし、あなたの手順は非常に複雑である必要があります。ファイルを読み込んで1回のパスで部屋を生成することができます。

public static void generateRoom(File file) throws FileNotFoundException { 
    if (file.exists()) { 
     Scanner sc = new Scanner(file); 
     int row = 0; 
     while (sc.hasNextLine()) { 
      String line = sc.nextLine(); 
      if (line.startsWith("#")) 
       continue; 
      for (int col = 0; col < line.length(); col++) { 
       switch (line.charAt(col)) { 
       case 'W': 
        System.out.println("new wall @" + row + '/' + col); 
        break; 
       case '0': 
        System.out.println("hero @" + row + '/' + col); 
        // fall-through 
       case '1': 
       case '2': 
        System.out.println("new door @" + row + '/' + col); 
        break; 
       case ' ': 
        System.out.println("new floor tile @" + row + '/' + col); 
        break; 
       default: 
        System.out.println("invalid char @" + row + '/' + col); 
       } 
      } 
      row++; 
     } 
     sc.close(); 
    } else 
     System.out.println("Ficheiro " + file.getAbsolutePath() + " nã£o existe."); 
} 

これは、一時的な文字列配列を完全に回避します。さらに、ファイル内の文字のデコードにはswitchステートメントを使用できます。

0
String line; 

while (sc.hasNextLine() && row < 10) { 
    line = sc.nextLine(); 
    if (line.startsWith("#")) { 
     line = sc.nextLine(); 
    } else { 
     String[] s0 = line.split("");  
     if (s0.length == 10) { 
      r[row] = s0; 
      row++; 
     } 
    }} 

進んでいません。

関連する問題