2011-03-21 5 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

첫 번째 줄은 플레이어의 1 인칭보기에 대한 좌표입니다. 이것은 각 좌표를 배열에 전달할 때 구현하기에 충분하므로 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 차원 (가운데 좌표를 꺼내기)으로 다른 배열을 만들 생각이었는데 각 요소는 파일의 한 줄 이었지만 어떻게해야합니까? 아니면 좀 더 우아한 방법인가요?

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

+0

평문으로 저장해야합니까? – James

+0

흠 ... 파일의 각 줄은 좌표 쌍입니다. 각 좌표계를 3D 환경에서 위치를 지정하는 객체로 전달하려고합니다. 어떻게해야합니까? –

답변

0

BufferedReader.readLine()이 당신을 도울 것입니다 :

여기에 지금까지 내 부하 게임 방법입니다. read-in 행을 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 공간의 위치에 대한 객체로 전달합니다. –

+0

@bobby 윌리엄스 왜 isnt 요소 [0], 요소 [1] 및 요소 [2]가 작동하지 않습니까? 여기에는 세 좌표가 포함되어야합니다 – RoflcoptrException

+0

그들은 작동합니다. 플레이어의 위치에 처음 두 요소를 사용합니다. 나는 또한 플레이어가 환경 전체에 무작위로 배치 할 수있는 블록을 저장하는데, 이는 다른 모든 라인이 맨 처음에있는 것입니다. 저는 "x 좌표를 블록 2와 함께 추가하고 z 좌표를 요소 3으로"넣을 수는 없습니다. 20 블록, 50 블록 또는 플레이어가 많이 배치 될 수 있습니다. –

0

을 요구하고 무슨 생각? 상태 변수를 ObjectOutputStream에 저장하고 ObjectInputStream에서로드하십시오. 인간이 읽을 수 있고 편집 가능한 형식이 정말로 필요한 경우가 아니라면 JVM이이 모든 저 레벨 부기를 처리하도록하십시오.