我创造了一个游戏,在屏幕上有狗和猫以及狗和猫的房子。我有它工作得很好,并有一个随机将它们放在屏幕上的方法,但我想让某人能够使用带坐标的文本文件将它们放在屏幕上。所以我想创建一个方法来做到这一点。 所以我有一个名为levels的文件夹,它有2个记事本文件,一个叫做level1,另一个叫做level2。在第一个文件中,它看起来像这样。
DOG @ 79.0, 409.0
DOG @ 150.0, 320.0
CAT @ 73.0, 194.0
DOG_HOUSE @ 72.0, 158.0
CAT_HOUSE @ 51.0, 591.0
第二个文本文件包含类似的东西,但有点不同。
DOG @ 79.0, 129.0
DOG @ 150.0, 245.0
DOG_HOUSE @ 93.0, 276.0
CAT_HOUSE @ 101.0, 532.0
DOG @ 91.0, 93.
CAT @ 123.0, 294.0
我创建这些对象的方式就是这样。基本上我创建了对象,然后将其添加到相应的数组中,然后在屏幕上显示对象,我只需要更新每个数组。
Dogs dog = new Dogs(xvalue,yvalue);
Cats cat = new Cats(xvalue,yvalue);
Dog_House doghouse = new Dog_House(xvalue,yvalue);
Cat_House cathouse = new Cat_House(xvalue,yvalue);
基本上它们只是对象的名称,然后是它们想要在屏幕上的位置的坐标。所以我需要读入文件,确定它是哪个对象,并使用给定的坐标创建一个新类型的对象。我猜这个方法首先将每一行存储到一个全新的数组中是最容易的。然后我应该做一些if语句,以便当扫描仪看到CAT时它将创建一个坐标位于@符号另一侧的对象。我想我可以在while语句中使用一些指导来正确读取行,然后使用该行中的信息创建一个对象。这就是我到目前为止所做的。感谢。
private boolean loadCustomLevel(String levelFilename)
{
File inFile = new File(levelFilename);
Scanner input = null;
try{
input = new Scanner (inFile);
while(input.hasNextLine()){
}
}
catch(FileNotFoundException e){
System.err.println("Error: unable to open file: " + inFile);
}
return false;
}
答案 0 :(得分:0)
您应该将阅读文件的方式更改为:
String input = null;
BufferedReader br = null;
try {
FileReader file = new FileReader(levelFilename);
br = new BufferedReader(file);
while ((input = br.readLine()) != null) {
System.out.println(input);
}
} catch (IOException e) {
System.err.println("Error: unable to open file");
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {}
}
}
在while循环中有几种方法可以使用。您当前的文件在值之间具有不同的分隔符。有" @",空格和逗号。一种方法是你可以使用相同的分隔符,这样行就像这样:
DOG,79.0,409.0
DOG,150.0,320.0
CAT,73.0,194.0
DOG_HOUSE,72.0,158.0
CAT_HOUSE,51.0,591.0
通过这种方式,您可以在逗号上分割每一行,并根据需要包含所有元素。
如果要保留当前格式,可以使用正则表达式匹配每一行,并将每个元素作为一组检索。
// just a starting point
Matcher m = Pattern.compile("^([A-Za-z\\_]+)\\s*\\@\\s*([0-9\\.]+)\\s*\\,\\s*([0-9\\.]+)$").matcher(input);
System.out.println(m.group(1) + " " + m.group(2) + " " + m.group(3));
这将返回所需的3个元素:
DOG 79.0 129.0
DOG 150.0 245.0
DOG_HOUSE 93.0 276.0
CAT_HOUSE 101.0 532.0
DOG 91.0 93.
CAT 123.0 294.0
无论哪种方式,一旦你拥有了每行的元素,你就可以在第一个元素上做一个switch或if语句来决定它是哪个对象,然后相应地继续。