2012-07-18 25 views
0

由於某些奇怪的原因,當我嘗試在遊戲中移動角色時,交換「移動」的陣列將不起作用,並且當我嘗試打印遊戲中前兩個動作的當前位置,沒有任何顯示。一般來說,這只是表現奇怪。有人可能向我解釋我做錯了什麼,或者至少我怎麼能做得更好?謝謝。Java陣列:嘗試交換元素期間終端ASCII終端遊戲中的2D陣列功能障礙

代碼:

import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 

public class Adventure { 
    private Scanner in_file; 
    private int x_size, y_size, px, py, dx, dy; 
    private char[][] level; 
    private boolean game; 
    public Adventure() { 
     x_size = y_size = 20; 
     level = new char[x_size][y_size]; 
     px = py = 1; 
     dx = dy = 0; 
     game = true; 
    } 
    public static void main(String []args) { 
     Adventure adv = new Adventure(); 
     adv.load_game(); 
     adv.main_game(); 
     System.out.println("ADVENTURE"); 
    } 
    public void load_game() { 
     try { 
      in_file = new Scanner(new File("level.txt")); 
     } catch (FileNotFoundException e) { 
      System.err.println("ERROR: Level could not be loaded!"); 
      System.exit(1); 
     } 
     for (int i = 0; i < level.length; i++) { 
      for (int j = 0; j < level[i].length; j++) { 
       if (in_file.hasNextInt()) { 
        int nextInt = in_file.nextInt(); 
        if (nextInt == 0) 
         level[i][j] = '-'; 
        else if (nextInt == 1) 
         level[i][j] = '#'; 
       } 
      } 
     } 
     in_file.close(); 
    } 
    public void new_game() { 

    } 
    public void main_game() { 
     Scanner key = new Scanner(System.in); 
     Adventure adv_move = new Adventure(); 
     level[px][py] = 'Q'; 
     while (game) { 
      for (int i = 0; i < level.length; i++) { 
       for (int j = 0; j < level[i].length; j++) { 
        System.out.print(level[i][j]); 
       } 
       System.out.println(); 
      } 
      System.out.println(); 
      System.out.print("Enter a letter choice to move ->"); 
      String temp = key.nextLine(); 
      if (temp.equals("w")) { 
       dx = -1; 
       dy = 0; 
      } 
      else if (temp.equals("a")) { 
       dy = -1; 
       dx = 0; 
      } 
      else if (temp.equals("s")) { 
       dx = 1; 
       dy = 0; 
      } 
      else if (temp.equals("d")) { 
       dy = 1; 
       dx = 0; 
      } 
      else 
       dx = dy = 0; 
      System.out.println(); 
      adv_move.move_check(); 
     } 
    } 
    public void move_check() { //DYSFUNCTIONAL ARRAY!!!! 
     System.out.println(level[px][py]); 
    // System.out.println(level[px+dx][py+dy]); 
     if (level[px+dx][py+dy] != '#') { 
      level[px][py] = '-'; 
      px += dx; 
      py += dy; 
      level[px][py] = 'Q'; 
     } 
     else 
      System.out.print("Move invalid.\n"); 
    } 
    public void save_game() { 

    } 
} 
+2

您可以添加一些註釋,突出顯示特別相關的部分代碼嗎? – Wug 2012-07-18 05:05:40

+0

我添加了一條評論,指出「move_check」方法是遇到問題的地方, – Anwar 2012-07-18 05:13:56

+1

請將您的問題寫成短語,使其聽起來不像「您能爲我調試我的程序嗎?」 – Gabe 2012-07-18 05:15:27

回答

1

您遇到的是,在main_game()方法,您要創建一個新的Adventure對象並調用move_check()上,它沒有任何的層次數據的問題,您將其加載到main()中的adv變量中。因此它總是引用一個空的char數組,並給出你意想不到的結果。

刪除新的對象聲明,只是調用move_check()本身應該讓你回到正軌。

+0

啊,我對創建另一個班級感覺不太好,但當時覺得有必要。感謝您指出了這一點。 – Anwar 2012-07-18 06:37:22