2011-03-21 185 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爲您處理所有這些低級別的簿記,除非您確實需要一種人類可讀和可編輯的格式。