我正在用 Java 编写一个简单的迷宫游戏。该程序从迷宫布局的输入文件中读取文本“ map ”。规则很简单:通过用户输入导航迷宫(由二维数组表示)并避免塌方(由 X 表示),然后到达标记为“T”的位置“P”(玩家)。现在,我已经编写了大部分代码,只需要让它正常工作即可。我已经将大部分游戏设置为使用 while 循环运行, boolean 值“得到宝藏”设置为 false。一旦这听起来是真的,它应该结束游戏。
但是,我还没有对玩家实际获得宝藏的情况进行编码,所以我想知道为什么我的代码只是吐出“恭喜!你找到了宝藏!”没有别的。如果有人能对此有所了解,我将不胜感激。我的代码有点乱七八糟的循环,因为我们的老师刚刚开始学习方法、构造函数和创建我们自己的类。这是我到目前为止的代码:
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();
}
}
这是示例输入文件:
- 5 5
- P.XX.
- .X...
- ...X.
- XXT..
- ..X..
最佳答案
(叹气)一个等于符号而不是两个。你有“while (gotTreasure = false)”,它将值 false 赋给 gotTreasure 并且不进入循环。改成"while(gotTreasure == false)就进入循环了。
对于 future 的问题:请尝试自己弄清楚发生了什么,并让其他人知道您尝试了什么以及您对此有哪些具体问题。有争议的是我应该放手,因为它本质上是一个为您调试代码的请求。学会 self 调试。如果跟踪语句没有被执行,那很可能是当时的代码没有被执行。如果没有进入循环,几乎可以肯定是因为进入循环的条件不存在。
学习使用调试器 - eclipse(我相信还有很多其他开发工具)有一个非常好的调试器。了解什么是断点、如何设置断点并在遇到断点时检查变量,然后从中找出哪里出了问题。
关于Java:编写一个简单的迷宫游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12648898/