所以,我想我的球員的數據保存到一個txt文件,然後從文字遊戲的時候再次打開從加載的數據,但它不工作,我把它保存在遊戲的同時,但是當我關閉遊戲,並打開它備份它不再保存,並且它在遊戲中的所有默認的數據,並在文件中...加載和保存在一個基於文本的遊戲文件(JAVA)
下面是一些從遊戲的代碼(對不起它在引擎收錄,我想我可能是太長時間,只是將其粘貼到這裏。)
我需要一些幫助,試圖從文本文檔中加載它,當遊戲打開時,不會將文本文檔重置爲默認設置。
所以,我想我的球員的數據保存到一個txt文件,然後從文字遊戲的時候再次打開從加載的數據,但它不工作,我把它保存在遊戲的同時,但是當我關閉遊戲,並打開它備份它不再保存,並且它在遊戲中的所有默認的數據,並在文件中...加載和保存在一個基於文本的遊戲文件(JAVA)
下面是一些從遊戲的代碼(對不起它在引擎收錄,我想我可能是太長時間,只是將其粘貼到這裏。)
我需要一些幫助,試圖從文本文檔中加載它,當遊戲打開時,不會將文本文檔重置爲默認設置。
的問題是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=100
,Save.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=100
,Save.saveInfo[0]=100
他們不因爲你只是將它們設置回默認值而不會改變。
然後加載保存的狀態,但你不這樣做與數據什麼。你應該在這裏加載所以他們設置爲新saveInfo值,而不是舊後設置的變量。
for (int i = 0; i < saveInfo.length; i++) {
saveInfo[i] = Integer.parseInt(inputReader.readLine());
}
所以,我不是真正的理解,我怎麼能解決這個問題,我已經嘗試了很多事情來解決這個問題,但似乎沒有工作,並且對不起,我是編碼新手...... – joejoethemonkey 2015-04-01 21:39:11
在名爲' savePlayer'在for循環後面放置了所有看起來像'Game.hp = saveInfo [0]'的行 – Sam 2015-04-02 13:21:09
是的,我這樣做了,仍然沒有工作,同樣的問題正在發生,但我認爲這是問題,謝謝 – joejoethemonkey 2015-04-02 13:42:12
我覺得這部分是問題...
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];
爲了在設置之前讀取文件遊戲值...
如果你不介意的話,那麼使用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
謝謝,我相信這個工程很好,但我現在正努力學習編寫代碼而不使用額外的罐子,因爲我是編碼方面的新手。但是,謝謝你的建議。我也已經找到了我的問題的答案。 – joejoethemonkey 2015-04-02 14:59:40
所以,我擺弄了一些東西,我做到了!所以,問題是,我會從保存的數據中加載它,然後寫入它,然後再次加載它,出於某種原因,它會執行整個Save.java 2次並保存它,但是我把它們所有這些都是公共靜態空洞,而不是調用整個構造函數,而是通過各個方法來調用它們,以及它們需要做什麼,這似乎很有用!謝謝大家的一切幫助,它幫助了很多!
嗨,喬,你能指出它在哪個確切的方法,你嘗試加載和保存你的遊戲嗎?這可以使我們瞭解您的代碼並儘快解決您的問題。 :) – 2015-04-01 20:25:17
如果您的代碼太長而無法發佈,請嘗試使用較小的代碼部分。一般來說,如果你的代碼太長而不適合你,你自己就沒有做足夠的事情來縮小問題發生的位置。日誌在這方面通常很有用。 – 2015-04-01 20:25:23
關於如何讀寫文本文件的例子已經很好地描述了[這裏](http://www.javapractices.com/topic/TopicAction.do?Id=42)。 – 2015-04-01 20:25:27