2015-04-01 7 views
1

Итак, я пытаюсь сохранить данные моего игрока в txt-файле, а затем загружать данные из текста с момента открытия игры, но не работает , Я получаю его для сохранения в игре, но когда я закрываю игру и открываю ее обратно, ее больше не сохраняют, и она имеет все данные по умолчанию в игре, а в файле ...Загрузка и сохранение файлов в текстовой игре (java)

Вот часть кода из игры (к сожалению, это в Pastebin, я думал, что я мог бы быть слишком много времени, чтобы просто вставить его в здесь.)

Мне нужна помощь, пытаясь загрузить ее из текстового документа и когда игра открывается, а не сброс текстового документа в его настройки по умолчанию.

+0

Привет, Джо, не могли бы вы указать, в каком точном методе вы пытаетесь загрузить и сохранить свою игру? Это может помочь нам понять ваш код и быстрее решить вашу проблему. :) –

+0

Если ваш код слишком длинный для публикации, попробуйте взять небольшой подраздел кода. Как правило, если ваш код слишком длинный, чтобы соответствовать, вы не сделали достаточно самостоятельно, чтобы сузить область возникновения проблемы. в этом отношении полезно использовать лесозаготовки. –

+0

Примеры того, как читать и писать в/из текстовых файлов, очень хорошо описаны [здесь] (http://www.javapractices.com/topic/TopicAction.do?Id=42). –

ответ

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=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 Они надевают 't изменить, потому что вы просто вернули их значениям по умолчанию.

Затем вы загружаете сохраненное состояние, но вы ничего не делаете с данными. Вы должны установить переменные после загрузки здесь, чтобы они были установлены на новые значения saveInfo, а не на старые.

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

Итак, я не понимаю, как я могу это исправить, я пробовал делать много вещей, чтобы исправить это, но никто не работает, и жаль, что я новичок в кодировании ... – joejoethemonkey

+0

В методе ' savePlayer' поместил все строки, которые выглядят как 'Game.hp = saveInfo [0]' после цикла for – Sam

+0

Да, я сделал это и все еще не работал, такая же проблема происходит, но я думаю, что это было частью проблема, спасибо – joejoethemonkey

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 fileutils - отличное решение и меньшее кодирование. Я просто разделяю свои мысли.

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

0

Итак, я был возиться с некоторыми вещами, и я сделал это!Таким образом, проблема заключалась в том, что я бы загрузил его из данных сохранения, затем написал над ним, а затем снова загрузил его, по какой-то причине он будет делать все Save.java 2 раза и просто сэкономить на нем, но я их помещаю все как публичные статические пустоты и вместо того, чтобы называть весь конструктор, я называю их индивидуальными методами, где и что им нужно делать, которые, похоже, отлично работают! Спасибо всем за вашу помощь, это очень помогло!

Смежные вопросы