1

我正在制作这款名为 Rush Hour 的游戏(你移动红色汽车的地方)。

到目前为止,我制作了一个从文本文件中读取级别的二维数组。现在接下来我想将文本文件中的值转换为对象,以便我可以开始使用坐标来移动它们。

下面稍微解释一下我的代码:首先,我正在制作一个 6x6 的 2D 数组,用户可以选择难度级别,根据他们所做的选择,它将加载 4 个级别之一(初级、中级、高级或专家)。

选择关卡后,它将加载二维数组中的关卡(我将在代码下方提供一个关卡,以便您有一个想法)。加载关卡时,它会为所有内容添加“0”(在我看来,它看起来对用户更友好)并用 | 分隔值。符号。

所以现在我想我需要从我刚刚在二维数组中读取的值中创建对象以便移动它们(如果我错了,请纠正我),我需要检查数字周围的值是否匹配或不匹配如果它们匹配,我需要将它们结合起来。

我该如何处理?提前致谢

到目前为止我的代码:

public class Bord {
private static String[][] bordArray = new String[6][6];

public static void kiesLevel() {
    System.out.println("\nKies moeilijkheidsgraad\n1) Beginner\n2) Intermediate\n3) Advanced\n4) Expert");
    Scanner keyboardScanner = new Scanner(System.in);
    int keuze = keyboardScanner.nextInt();
    switch (keuze) {
        case 1:
            beginner();
            break;
        case 2:
            intermediate();
            break;
        case 3:
            advanced();
            break;
        case 4:
            expert();
            break;
        default:
            throw new NumberFormatException("Geef een geldige invoer");
    }
}

public static void beginner() {
    leesBordIn("c:/users/Glenn/desktop/beginner.txt");

}

public static void intermediate() {
    leesBordIn("d:/intermediate.txt");

}

public static void advanced() {
    leesBordIn("d:/advanced.txt");

}

public static void expert() {
    leesBordIn("d:/expert.txt");

}

private static void leesBordIn(String filename) {
    try {
        BufferedReader br = new BufferedReader(new FileReader(filename));
        String line = null;
        int r = 0;
        while ((line = br.readLine()) != null) {
            for (int c = 0; c < bordArray[r].length; c++) {
                if (line.toCharArray()[c] == '0') {
                    bordArray[r][c] = "  ";
                } else {
                    String characterstring = Character.toString(line.toCharArray()[c]);
                    if (characterstring.length() != 2) {
                        characterstring = "0" + characterstring;
                    }
                    bordArray[r][c] = characterstring;
                }
                System.out.print("|" + bordArray[r][c]);
            }
            if (r == 2) {
                System.out.println("=");
            } else {
                System.out.println("|");
            }
            r++;
        }


    } catch (FileNotFoundException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    } catch (IOException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
}

}

级别示例:

220007
300807
311807
300800
400066
405550

输出示例:

|02|02|  |  |  |07|
|03|  |  |08|  |07|
|03|01|01|08|  |07=
|03|  |  |08|  |  |
|04|  |  |  |06|06|
|04|  |05|05|05|  |
4

1 回答 1

0

在您创建了bordArray 对象后,我不明白您想做什么,但是我看到您可以根据需要以更好的方式编写 leesBordin 方法(尽量不要将所有方法都编写为静态方法):

private void leesBordIn(String filename)
{
    try
    {
        File file = new File(filename);
        Scanner scanner = new Scanner(file);
        int r = 0;
        while (scanner.hasNextLine())
        {
            String line = scanner.nextLine();
            String[] fields = line.split("");
            for (int c = 0; c < bordArray[r].length; c++)
            {
                if (fields[c+1].equals("0"))
                {
                    bordArray[r][c] = "  ";
                } 
                else 
                {
                    bordArray[r][c] = ("0" + fields[c+1]);
                }
                System.out.print("|" + bordArray[r][c]);
            }
            if (r == 2) 
            {
               System.out.println("=");
            } 
            else
            {
                System.out.println("|");
            }
            r++;
        }
    catch (FileNotFoundException e) 
    {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
}

一个问题,你为什么在第三行放一个“=”?

然后,如果您更好地向我解释您想做什么,我将尝试为此编写一些代码..

于 2013-01-31T16:16:10.313 回答