Java 从RPG游戏加载数据
所以我正在做一个简单的RPG游戏。我想添加一个选项来加载整个游戏的进度,但我想我对Java不是很熟悉,所以我不想在没有问题的情况下加载进度。其想法是将游戏保存在检查点上,并在游戏继续时加载保存的数据。我用Java 从RPG游戏加载数据,java,Java,所以我正在做一个简单的RPG游戏。我想添加一个选项来加载整个游戏的进度,但我想我对Java不是很熟悉,所以我不想在没有问题的情况下加载进度。其想法是将游戏保存在检查点上,并在游戏继续时加载保存的数据。我用loadGame方法得到一个错误,我想这与我试图加载的数据都是不同的数据类型有关。运行状况和级别是整数,而EquipItem是字符串 这里只有两种方法,saveGame和loadGame,因为代码太长,不能简单地粘贴到整个代码中。当然,如果需要的话,我会添加额外的代码 public static
loadGame
方法得到一个错误,我想这与我试图加载的数据都是不同的数据类型有关。运行状况和级别是整数,而EquipItem是字符串
这里只有两种方法,saveGame
和loadGame
,因为代码太长,不能简单地粘贴到整个代码中。当然,如果需要的话,我会添加额外的代码
public static void saveGame() {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("savedGame.txt"));
bw.write("Your health is " + player.getHealth());
bw.newLine();
bw.write("Your level is " + player.getLevel());
bw.newLine();
bw.write("" + player.equippedItem);
bw.close();
}
catch (Exception e) {
System.out.println("There's an error.");
}
}
saveGame()
如果工作正常,它会将数据存储在文件中。问题在于loadGame()
方法
public void loadGame() {
try {
BufferedReader br = new BufferedReader(new FileReader("savedGame.txt"));
player.getHealth();
player.getLevel();
player.equippedItem;
br.close();
} catch (Exception e) {
System.out.println("There's an error.");
}
}
player.getHealth()
和player.getLevel()
的结果被忽略,这可能是我提到的数据类型问题。您正在saveGame()中创建一个文本文件,“打开”loadGame()中的保存文件,但不访问其中的数据
您已正确创建了BufferedReader,但使用不正确。您需要使用br.readLine()
读取文本文件,该文件将返回一个类似“Your health is 123”的字符串
要使用此数据更新玩家的状态,可以在loadGame()中添加类似的内容:
解析方法将接受字符串输入,如“Your health is 123”,并返回int 123。第一步:永远不要忽略catch块中的异常,您需要知道发生了什么错误以及在哪里。理想情况下,您应该使用适当的日志系统将异常打印到日志中,但作为第一步,只需将
e.printStackTrace()
放在catch块中,就可以提供有关出错原因的更多详细信息。您创建的BufferedReader
与player.getHealth()
等有何关联?您似乎实际上没有从br
读取任何数据,那么这意味着什么呢?我希望类似于br.readLine()
,然后对该行进行一些解析以获取数字,最后调用player.setHealth(…)
等。与其尝试制作一个英文可读文件,也许您应该使用JSON或XML@JoachimSauer>我刚开始学习异常,这就是为什么我留下了一个catch块,只有一个简单的print语句。我现在添加了e.printStackTrace()
,谢谢你的建议。@NomadMaker通常情况下,你不希望玩家直接“改变”他们的扑救,因为金币的数量可能是一个限制因素,只要改变这个值,你就有可能作弊。因此,我会选择一个专有的二进制格式,甚至可能有一个轻微的加密和哈希检查创建的形式,这就是我所寻找的!我已经根据我的代码对其进行了调整,现在可以使用了。谢谢
player.setHp(parseHp(br.readLine()));
player.setLevel(parseLevel(br.readLine()));
... // and so on