我正在编写一个迷宫游戏程序,如下所示:
import java.util.*;
import java.io.*;
public class MazeGame {
public static void main(String[] args) throws Exception{
//Display the maze
char treasureMaze[][] = {{'P','.','X','X','.'},{'.','X','.','.','.'},{'.','.','.','X','.'},{'X','X','T','.','.'},{'.','.','X','.','.'}};
display(treasureMaze);
int vertical = 0;
int horizontal = 0;
//Give Move Options
options();
//Setup a while loop that continues until the user has gotten to the treasure, or 'P'
while(treasureMaze[vertical][horizontal] != 'T'){
//Get Users Decision
Scanner moveChoice = new Scanner(System.in);
int choice = moveChoice.nextInt();
if(choice == 1){
System.out.println("You chose to Move up");
}
else if(choice == 2){
System.out.println("You chose to Move down");
}
else if(choice == 3){
System.out.println("You chose to Move left");
}
else if(choice == 4){
System.out.println("you chose to Move right");
}
else{
return;
}
//Move the Player: Each choice will move the player according to their choice and then re-display the map and options
//so that they can move through the maze
//Move Up
if(choice == 1){
if(vertical - 1 < 0){
System.out.println("\nCannot move there! Try something else\n");
display(treasureMaze);
options();
}
else if(treasureMaze[vertical - 1][horizontal] == '.'){
treasureMaze[vertical - 1][horizontal] = 'P';
treasureMaze[vertical][horizontal] = '.';
vertical -= 1;
display(treasureMaze);
options();
}
else if(treasureMaze[vertical - 1][horizontal] == 'T'){
System.out.println("\nCongratulations you won!");
treasureMaze[vertical][horizontal] = 'T';
}
else{
System.out.println("\nCannot move there! Try something else\n");
display(treasureMaze);
options();
}
}
//Move Down
else if(choice == 2){
if(vertical + 1 < 0){
System.out.println("\nCannot move there! Try something else\n");
display(treasureMaze);
options();
}
else if(treasureMaze[vertical + 1][horizontal] == '.'){
treasureMaze[vertical + 1][horizontal] = 'P';
treasureMaze[vertical][horizontal] = '.';
vertical += 1;
display(treasureMaze);
options();
}
else if(treasureMaze[vertical + 1][horizontal] == 'T'){
System.out.println("\nCongratulations you won!");
treasureMaze[vertical][horizontal] = 'T';
}
else{
System.out.println("\nCannot move there! Try something else\n");
display(treasureMaze);
options();
}
}
//Move Left
else if(choice == 3){
if(horizontal - 1 < 0){
System.out.println("\nCannot move there! Try something else\n");
display(treasureMaze);
options();
}
else if(treasureMaze[vertical][horizontal - 1] == '.'){
treasureMaze[vertical][horizontal - 1] = 'P';
treasureMaze[vertical][horizontal] = '.';
horizontal -= 1;
display(treasureMaze);
options();
}
else if(treasureMaze[vertical][horizontal - 1] == 'T'){
System.out.println("\nCongratulations you won!");
treasureMaze[vertical][horizontal] = 'T';
}
else{
System.out.println("\nCannot move there! Try something else\n");
display(treasureMaze);
options();
}
}
//Move Right
else if(choice == 4){
if(horizontal + 1 < 0){
System.out.println("\nCannot move there! Try something else\n");
display(treasureMaze);
options();
}
else if(treasureMaze[vertical][horizontal + 1] == '.'){
treasureMaze[vertical][horizontal + 1] = 'P';
treasureMaze[vertical][horizontal] = '.';
horizontal += 1;
display(treasureMaze);
options();
}
else if(treasureMaze[vertical][horizontal + 1] == 'T'){
System.out.println("\nCongratulations you won!");
treasureMaze[vertical][horizontal] = 'T';
}
else{
System.out.println("\nCannot move there! Try something else\n");
display(treasureMaze);
options();
}
}
else{
return;
}
}
}
//Display Object: prints out the maze for the user
public static void display(char x[][]){
for(int row = 0; row < x.length; row++){
for(int column = 0; column < x[row].length; column++){
System.out.print(x[row][column] + "\t");
}
System.out.println();
}
}
//Options Object: gives the options menu to the user
static void options(){
System.out.println("You may:");
System.out.println("\t1) Move up");
System.out.println("\t2) Move down");
System.out.println("\t3) Move left");
System.out.println("\t4) Move right");
System.out.println("\t0) Quit");
}
}
这个程序工作正常,当我给它为treasureMaze的数组,但我希望能够从文本文件中读取不同的迷宫,并且我很难知道如何去做。我是否需要使用扫描仪将数组读入变量或其他内容?提前感谢您的建议。
答案 0 :(得分:2)
这应该只涉及从FileReader
和converting them to a char[]
:
// Open "filename.txt" for reading
BufferedReader in = new BufferedReader(new FileReader("filename.txt"));
// Get a single line from the file (you can call this repeatedly for multiple lines)
String line = in.readLine();
// Convert that string to a character array
char[] array = line.toCharArray();
我不建议使用Scanner
,因为它很慢而且毫无意义。我将FileReader
包裹在BufferedReader
中,因为它更快一点,它提供了有用的readLine()
方法,但如果您愿意,可以read directly from the FileReader
。< / p>
如果您对BufferedReader
感到不舒服,也可以使用Scanner.nextLine()
,但我建议您熟悉各种Reader
。
由于2D数组只是一个数组数组,您应该只需将2D数组的每个索引设置为从文件中读取的数组:
char[][] map = new char[][10];
for(i = 0; i < 10; ++i) {
String line = in.readLine();
if(line == null) {
// Realistically, you'd want better error handling than this
System.out.println("Uh oh, the file doesn't have 10 lines!");
return;
}
map[i] = line.toCharArray();
}