2012-09-29 64 views
1

我正在用java編寫一個簡單的迷宮遊戲。該程序從迷宮佈局的輸入文件中讀取文本「地圖」。規則很簡單:通過用戶輸入導航迷宮(用二維數組表示)並避開洞穴(由Xs表示),併到達'P'(玩家)標記爲'T'的地點。現在,我已經掌握了大部分代碼,只是讓它能夠正常工作。我設置了大部分遊戲以while循環運行,布爾值「got treasure」設置爲false。一旦這個結果成立,它應該結束遊戲。然而,我並沒有編碼玩家真正獲得寶藏的情況,所以我想知道爲什麼我的代碼只是吐出「恭喜!你找到了寶藏!」。沒有別的。如果有人能夠對此有所瞭解,我會非常感激。我的代碼有點麻煩,因爲我們的老師剛剛接觸到方法,構造函數和創建自己的類。這裏是我的代碼至今:Java:編寫一個簡單的迷宮遊戲

import java.util.*; 
import java.io.File; 
public class MazeGame { 

public static void main(String[] args) throws Exception { 
    Scanner scan = new Scanner(new File("maze.txt")); 
    Scanner user = new Scanner(System.in); 
    int rows = scan.nextInt(); 
    int columns = scan.nextInt(); 
    int px = 0; 
    int py = 0; 
    String [][] maze = new String[rows][columns]; 
    String junk = scan.nextLine(); 

    for (int i = 0; i < rows; i++){ 
     String temp = scan.nextLine(); 
     String[] arrayPasser = temp.split(""); 
     for (int j = 0; j < columns; j++){ 
      maze[i][j] = arrayPasser[i]; 
     } 
    } 

    boolean gotTreasure = false; 

    while (gotTreasure = false){ 
     for (int i = 0; i < rows; i++){ 
      for (int j = 0; j < columns; j++){ 
       System.out.print(maze[i][j]); 
       System.out.print(" "); 
     } 
      System.out.print("\n"); 
     } 


     System.out.printf("\n"); 
     System.out.println("You may:"); 
     System.out.println("1) Move up"); 
     System.out.println("2) Move down"); 
     System.out.println("3) Move left"); 
     System.out.println("4) Move right"); 
     System.out.println("0) Quit"); 
     int choice = user.nextInt(); 
     int i = 0; 

     if (choice == 1 && i >= 0 && i < columns){ 
      for (int k = 0; k < rows; k++){ 
       for (int l = 0; l < columns; l++){ 
        if (maze[k][l].equals(maze[px][py]) && maze[px][py-1].equals("X") == false){ 
         maze[px][py] = "."; 
         maze[k][l-1] = "P"; 
         maze[px][py] = maze[k][l-1]; 
        }else if (maze[px][py-1] == "X"){ 
         System.out.println("Cannot move into a cave-in! Try something else."); 
        }else { 
        continue;} 


        } 
       } 
      } 
     else if (choice == 2 && i >= 0 && i < columns){ 
      for (int k = 0; k < rows; k++){ 
       for (int l = 0; l < columns; l++){ 
        if (maze[k][l].equals(maze[px][py]) && maze[px][py+1].equals("X") == false){ 
         maze[px][py] = "."; 
         maze[k][l+1] = "P"; 
         maze[px][py] = maze[k][l+1]; 
        }else if (maze[px][py+1] == "X"){ 
         System.out.println("Cannot move into a cave-in! Try something else."); 
        }else { 
        continue;} 

       } 
      } 
      } 
     else if (choice == 3 && i >= 0 && i < columns){ 
      for (int k = 0; k < rows; k++){ 
       for (int l = 0; l < columns; l++){ 
        if (maze[k][l].equals(maze[px][py]) && maze[px-1][py].equals("X") == false){ 
         maze[px][py] = "."; 
         maze[k-1][l] = "P"; 
         maze[px][py] = maze[k-1][l]; 
        }else if (maze[px-1][py] == "X"){ 
         System.out.println("Cannot move into a cave-in! Try something else."); 
        }else { 
        continue;} 
       } 
      } 
     } 
     else if (choice == 4 && i >= 0 && i < columns){ 
      for (int k = 0; k < rows; k++){ 
       for (int l = 0; l < columns; l++){ 
        if (maze[k][l].equals(maze[px][py]) && maze[px+1][py].equals("X") == false){ 
         maze[px][py] = "."; 
         maze[k+1][l] = "P"; 
         maze[px][py] = maze[k+1][l]; 
        }else if (maze[px+1][py] == "X"){ 
         System.out.println("Cannot move into a cave-in! Try something else."); 
        }else { 
        continue;} 
       } 
      } 
     } 
     else if (choice == 0){ 
      System.exit(0); 
     } 
    } 

    System.out.println("Congratulations, you found the treasure!"); 

    scan.close(); 
    user.close(); 
     } 

    } 

,這裏是樣本輸入文件:

  • P.XX.
  • .X ...
  • ... X。
  • XXT ..
  • ..X ..
+0

將來可能會有助於將這些方法分解。就像這樣在'main'中的代碼往往很難調試;也就是說,如果你添加了新的東西。 – Makoto

回答

5

(嘆氣)一個等號,而不是兩個。您有「while(gotTreasure = false)」,它將值false指定給gotTreasure並且不進入循環。將它改爲「while(gotTreasure == false)並且它進入循環。

對於將來的問題:請嘗試找出你自己正在發生的事情,讓別人知道你已經嘗試了什麼,我們應該放過這些,因爲它本質上是一個爲你調試你的代碼的請求,學會調試你自己,如果trace語句沒有被執行,那很可能是那個時候的代碼如果沒有進入循環,幾乎肯定是因爲進入循環的條件不存在。

學習使用調試器--eclipse(和,我相信,很多的其他開發工具)具有很好的性能,找出斷點是什麼,如何設置和檢查變量,當它被擊中時,從那裏弄清楚出了什麼問題。

+0

對不起。它通常是我的代碼中最小的東西。儘管感謝您的回覆和指點。 – Batteries

+0

用8秒擊敗我:P – PermGenError

+0

我鍵入快8>) – arcy

2

如果這是一個錯字忽略這一點,如果它不是

 while (gotTreasure = false) is wrong. 

你不檢查,如果gotTreasure是假的,你要分配它假。

檢查gotTreasure是假的使用==操作符

 while(gotTreasure==false) 

還是讓我知道這是不是一個類型,我會刪除答案。:)

2

你有一個簡單的錯誤在你的while循環的條件,

相反的,

while (gotTreasure = false) 

你應該使用,

while (gotTreasure == false) 

在第一種情況下,你要分配對於gotTreasure爲false,而在第二種情況下,您正在評估gotTreasure是否爲false。