2015-04-01 99 views
1

所以,我想我的球員的數據保存到一個txt文件,然後從文字遊戲的時候再次打開從加載的數據,但它不工作,我把它保存在遊戲的同時,但是當我關閉遊戲,並打開它備份它不再保存,並且它在遊戲中的所有默認的數據,並在文件中...加載和保存在一個基於文本的遊戲文件(JAVA)

下面是一些從遊戲的代碼(對不起它在引擎收錄,我想我可能是太長時間,只是將其粘貼到這裏。)

我需要一些幫助,試圖從文本文檔中加載它,當遊戲打開時,不會將文本文檔重置爲默認設置。

+0

嗨,喬,你能指出它在哪個確切的方法,你嘗試加載和保存你的遊戲嗎?這可以使我們瞭解您的代碼並儘快解決您的問題。 :) – 2015-04-01 20:25:17

+0

如果您的代碼太長而無法發佈,請嘗試使用較小的代碼部分。一般來說,如果你的代碼太長而不適合你,你自己就沒有做足夠的事情來縮小問題發生的位置。日誌在這方面通常很有用。 – 2015-04-01 20:25:23

+0

關於如何讀寫文本文件的例子已經很好地描述了[這裏](http://www.javapractices.com/topic/TopicAction.do?Id=42)。 – 2015-04-01 20:25:27

回答

2

的問題是Save.savePlayer()

在開始的時候,你聲明saveInfo持有該遊戲保持在那個時間點的值。初次加載時,它們將保持默認值。

int[] saveInfo = { Game.hp, Game.level, Game.mana, Game.expTotal, 
        Game.goldTotal, Game.arrow, Game.shuriken, Game.bomb, 
        Game.hpPotion, Game.mpPotion, Game.potion, Game.items }; 

這裏的變量:Game.hp=100Save.saveInfo[0]=100

然後,設置所有的遊戲變量saveInfo的在Save.savePlayer()

    Game.hp = saveInfo[0]; 
        Game.level = saveInfo[1]; 
        Game.mana = saveInfo[2]; 
        Game.expTotal = saveInfo[3]; 
        Game.goldTotal = saveInfo[4]; 
        Game.arrow = saveInfo[5]; 
        Game.shuriken = saveInfo[6]; 
        Game.bomb = saveInfo[7]; 
        Game.hpPotion = saveInfo[8]; 
        Game.mpPotion = saveInfo[9]; 
        Game.potion = saveInfo[10]; 
        Game.items = saveInfo[11]; 

變量這裏開始:Game.hp=100Save.saveInfo[0]=100 他們不因爲你只是將它們設置回默認值而不會改變。

然後加載保存的狀態,但你不這樣做與數據什麼。你應該在這裏加載所以他們設置爲新saveInfo值,而不是舊後設置的變量。

for (int i = 0; i < saveInfo.length; i++) { 
    saveInfo[i] = Integer.parseInt(inputReader.readLine()); 
} 
+0

所以,我不是真正的理解,我怎麼能解決這個問題,我已經嘗試了很多事情來解決這個問題,但似乎沒有工作,並且對不起,我是編碼新手...... – joejoethemonkey 2015-04-01 21:39:11

+0

在名爲' savePlayer'在for循環後面放置了所有看起來像'Game.hp = saveInfo [0]'的行 – Sam 2015-04-02 13:21:09

+0

是的,我這樣做了,仍然沒有工作,同樣的問題正在發生,但我認爲這是問題,謝謝 – joejoethemonkey 2015-04-02 13:42:12

1

我覺得這部分是問題...

private void readPlayer(String filePath) { 
    File inputFile; 
    BufferedReader inputReader; 

    try { 
     inputFile = new File(filePath); 
     inputReader = new BufferedReader(new FileReader(inputFile)); 

     Game.hp = saveInfo[0]; 
     Game.level = saveInfo[1]; 
     Game.mana = saveInfo[2]; 
     Game.expTotal = saveInfo[3]; 
     Game.goldTotal = saveInfo[4]; 
     Game.arrow = saveInfo[5]; 
     Game.shuriken = saveInfo[6]; 
     Game.bomb = saveInfo[7]; 
     Game.hpPotion = saveInfo[8]; 
     Game.mpPotion = saveInfo[9]; 
     Game.potion = saveInfo[10]; 
     Game.items = saveInfo[11]; 

     for (int i = 0; i < saveInfo.length; i++) { 
      saveInfo[i] = Integer.parseInt(inputReader.readLine()); 
     } 

     inputReader.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

將這些行

for (int i = 0; i < saveInfo.length; i++) { 
    saveInfo[i] = Integer.parseInt(inputReader.readLine()); 
} 

Game.hp = saveInfo[0]; 
Game.level = saveInfo[1]; 
Game.mana = saveInfo[2]; 
Game.expTotal = saveInfo[3]; 
Game.goldTotal = saveInfo[4]; 
Game.arrow = saveInfo[5]; 
Game.shuriken = saveInfo[6]; 
Game.bomb = saveInfo[7]; 
Game.hpPotion = saveInfo[8]; 
Game.mpPotion = saveInfo[9]; 
Game.potion = saveInfo[10]; 
Game.items = saveInfo[11]; 

爲了在設置之前讀取文件遊戲值...

0

如果你不介意的話,那麼使用XStream和Apache的文件實用程序是一個很好的解決方案,減少編碼。我只是分享我的想法。

import org.apache.commons.io.FileUtils; 
import com.thoughtworks.xstream.XStream; 

//saving your data 
XStream xstream=new XStream(new DOMDriver()); 
String xml = xstream.toXML(yourGambeObj); 
FileUtils.writeStringToFile(new File("yourfilename", xml); 

//reading your data 
Game gameData=xstream.fromXML(new File("yourfilename"),Game.class); 

//now you can use access your methods n attribute. no conversion as you did in serialization. 

請下載並添加這些罐子。 XStream & Apache Commons IO

+0

謝謝,我相信這個工程很好,但我現在正努力學習編寫代碼而不使用額外的罐子,因爲我是編碼方面的新手。但是,謝謝你的建議。我也已經找到了我的問題的答案。 – joejoethemonkey 2015-04-02 14:59:40

0

所以,我擺弄了一些東西,我做到了!所以,問題是,我會從保存的數據中加載它,然後寫入它,然後再次加載它,出於某種原因,它會執行整個Save.java 2次並保存它,但是我把它們所有這些都是公共靜態空洞,而不是調用整個構造函數,而是通過各個方法來調用它們,以及它們需要做什麼,這似乎很有用!謝謝大家的一切幫助,它幫助了很多!