通过阅读文件(游戏)来创建房间

时间:2016-04-19 18:42:03

标签: java file 2d

基本上我必须制作游戏,我需要通过阅读文件创建房间,这个:

#
# 0 D room0.txt 0
# 1 E room1.txt 0
#
WWWW0WWWWW
W        W
W        W
W        W
W        W
W      W W
W      W W
W      W W
W      W 1
WWWWWWWWWW

“#”表示我可以跳过这些行(它们仅供参考),“W”是我需要放置墙的地方,数字用于门,空白区域是地板

我认为创建房间的最佳方法是创建一个方法来接收文件并读取它并将其“信息”放入String [10] [10],然后创建另一种方法(或者只是这样做)在我的Main)接收创建的String [10] [10]并创建房间(将图像添加到房间),但是我在阅读文件时遇到一些困难,所以如果你们可以帮助我那部分我会感谢。

我运行程序时得到的错误就在这一行:

如果(R [X] [Y] .equals( “W”))

如果你们需要另一个课程,一个游戏应该是什么样子的图像或者我忘了展示的其他东西,请告诉我并感谢你的帮助。

public void generateRoom(File file){     
    if(file.exists()){
        Scanner sc = null;     
        String[][] r = new String[10][];
        int row = 0;
        try {
            sc = new Scanner(file); 
            String line = sc.nextLine(); 
            while(sc.hasNextLine() && row < 10){
                if(line.startsWith("#"))
                    sc.nextLine();
                else{
                    String[] s0 = line.split("");
                    if(s0.length==10){
                        r[row]=s0;

                    row++;
                }         
            }
        }
        for(int x = 0; x < 10; x++){    
         for(int y = 0; y < 10; y++){
             if(r[x][y].equals("W"))
                   tiles.add(new Wall(new Position(x,y)));      
             if(r[x][y].equals("1") || r[x][y].equals("2"))
                   tiles.add(new Door(new Position(x,y)));
             if(r[x][y].equals("0")){
                 tiles.add(new Door(new Position(x,y)));
                 hero.setPosition(new Position(x,y));
                 tiles.add(hero);
             }
             else tiles.add(new Floor(new Position(x,y)));
             gui.newImages(tiles);
             gui.update();
         }
        }
        }catch (FileNotFoundException e) {
            System.out.println("Ficheiro "+file.getAbsolutePath()+
                    " não existe. ");           }
        finally{
            if(sc!=null)sc.close();
        }
    }
    else
        System.out.println("Ficheiro "+file.getAbsolutePath()+
                " nã£o existe. ");          

}

2 个答案:

答案 0 :(得分:0)

您永远不会重新分配line

此:

if(line.startsWith("#"))
    sc.nextLine();

应该阅读

if(line.startsWith("#"))
    line = sc.nextLine();

但你的程序过于复杂。您可以一次性读取文件并生成房间。请考虑以下版本的程序:

public static void generateRoom(File file) throws FileNotFoundException {
    if (file.exists()) {
        Scanner sc = new Scanner(file);
        int row = 0;
        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            if (line.startsWith("#"))
                continue;
            for (int col = 0; col < line.length(); col++) {
                switch (line.charAt(col)) {
                case 'W':
                    System.out.println("new wall @" + row + '/' + col);
                    break;
                case '0':
                    System.out.println("hero @" + row + '/' + col);
                    // fall-through
                case '1':
                case '2':
                    System.out.println("new door @" + row + '/' + col);
                    break;
                case ' ':
                    System.out.println("new floor tile @" + row + '/' + col);
                    break;
                default:
                    System.out.println("invalid char @" + row + '/' + col);
                }
            }
            row++;
        }
        sc.close();
    } else
        System.out.println("Ficheiro " + file.getAbsolutePath() + " nã£o existe.");
}

它完全避免了临时字符串数组。此外,您可以使用switch语句来解码文件中的字符。

答案 1 :(得分:0)

String line;

while (sc.hasNextLine() && row < 10) {
    line = sc.nextLine();
    if (line.startsWith("#")) {
        line = sc.nextLine();
    } else {
        String[] s0 = line.split("");       
        if (s0.length == 10) {
            r[row] = s0;
            row++;
        }
    }}

没有前进线。