Reputation: 175
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.
Upvotes: 1
Views: 1932
Reputation: 54242
This should just involve reading lines from a FileReader
and 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();
I don't recommend using Scanner
since it's slow and pointlessly complex. I'm wrapping the FileReader
in a BufferedReader
because it's a little bit faster, and it provides the useful readLine()
method, but you could read directly from the FileReader
if you wanted to.
You could also use Scanner.nextLine()
if you're uncomfortable with BufferedReader
, but I'd advise becoming familiar with various Reader
'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:
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();
}
Upvotes: 2