I am writing a maze game program that looks like this:
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");
}
}
This program works fine when I give it the array for the treasureMaze, but I would like to be able to read in different mazes from a text file and am stumped at how to go about doing that. Do i need to use a scanner to read in the array to a variable or something? Thanks in advance for the advice.
This should just involve reading lines from a
FileReaderand converting them to achar[]:I don’t recommend using
Scannersince it’s slow and pointlessly complex. I’m wrapping theFileReaderin aBufferedReaderbecause it’s a little bit faster, and it provides the usefulreadLine()method, but you could read directly from theFileReaderif you wanted to.You could also use
Scanner.nextLine()if you’re uncomfortable withBufferedReader, but I’d advise becoming familiar with variousReader‘s.Since a 2D array is just an array of arrays, you should be able to just set each index of the 2D array to an array you read from the file: