2011-03-21 184 views
-1

我正在做一个简单的游戏,保存和加载。到目前为止,我有保存游戏的工作,它将所有的对象位置保存到一个.dat文件。每行有3个坐标(x,y,z)以冒号分隔。例如:阅读Java文件

23.762622833251953:3.887784719467163
22.5:0.5:18.5
23.5:0.5:20.5
26.5:0.5:5.5
28.5:0.5:21.5
30.5:0.5:4.5
33.5: 0.5:19.5
35.5:0.5:4.5
38.5:0.5:15.5
39.5:0.5:3.5
41.5:0.5:9.5

第一行是玩家第一人称视角的坐标。这很容易实现,因为我将每个坐标传递给一个数组,所以x位置是第一个元素[0],z坐标是第二个元素[1]。 y坐标始终是相同的,即使是块,所以我没有打扰保存它,但我出于某种原因为块做了。

这里是保存游戏的方法,包括:

public void saveGame() 
{ 
    File file = new File("quickSave.dat"); 

    try { 
     FileWriter writer = new FileWriter(file);   
     writer.write(env.getCameraX()+":"+env.getCameraZ()+"\n"); 
     for (int row = 0; row < map.length; row++) 
     { 
      for (int col = 0; col < map[row].length; col++) 
      { 
       if (map[row][col] != null) { 
        EnvObject block = map[row][col]; 
        writer.write(block.getX()+":"+block.getY()+":"+block.getZ()+"\n"); 
       } 
      } 
     } 
     writer.close(); 
     JOptionPane.showMessageDialog(null, "Game saved"); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 

问题是从文件读取的每一行,然后使这些坐标到对象。我只将传球坐标贯彻到球员的角度,这很容易,因为我只用了2个元素。

我正在考虑制作2维的另一个数组(取出y坐标,中间一个),每个元素都是文件中的一行,但我该怎么做?或者这是另一种更优雅的方式?

这是迄今为止我加载游戏方法:

public void loadGame() { 
    File file = new File("quickSave.dat"); 
    try { 
     BufferedReader reader = new BufferedReader(new FileReader(file)); 
     String line = reader.readLine(); 
     String[] elements = line.split(":"); 
     env.setCameraXYZ(new Float(elements[0]), 0.5, 
      new Float(elements[1])); 
     JOptionPane.showMessageDialog(null, "Game loaded"); 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 
} 
+4

你可以让*问题*清楚吗?这是一个故事,而不是一个问题。 – ripper234 2011-03-21 22:42:52

+0

你真的需要将它们保存为纯文本吗? – James 2011-03-21 22:44:27

+0

嗯......文件中的每一行都是一对坐标。我想将每一行坐标传递给一个在3D环境中给它定位的对象。我该怎么做呢? – 2011-03-21 22:44:39

回答

0

BufferedReader.readLine()会帮助你。您需要将读入行与String.split()分开,并将每个返回的字符串转换为具有Float.parseFloat()new Float(someString)的浮动。

我想这就是你在问什么反正

String line = null; 
while ((line = bufferedReader.readLine()) != null) 
{ 
    String[] coords = line.split(":"); 
    EnvObject block = new EnvObject(Float.parseFloat(coords[0], 
            Float.parseFloat(coords[1], 
            Float.parseFloat(coords[2] 
            ); 
    someArray.add(block); 
} 
+0

我用玩家的坐标来做这件事,它工作正常。问题是读取0行 - 无论哪行,并抓住每行的坐标,然后将其传递到3D空间中的位置。 – 2011-03-21 22:55:46

+0

@bobby威廉姆斯,但为什么没有元素[0],元素[1]和元素[2]不工作?这应该包含三个坐标 – RoflcoptrException 2011-03-21 22:57:26

+0

他们工作。我使用玩家位置的前两个元素。我还保存了玩家可以在整个环境中随意放置的这些块,这是所有其他线都在第一个之下的。我不能只是把“以x坐标作为元素2添加块,以及z坐标作为元素3”,可以有20个块,50个块或者无论多少位玩家。 – 2011-03-21 22:59:29

0

关于使用序列如何?将状态变量存储到ObjectOutputStream中,并从ObjectInputStream加载它们。让JVM为您处理所有这些低级别的簿记,除非您确实需要一种人类可读和可编辑的格式。