Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从RPG游戏加载数据_Java - Fatal编程技术网

Java 从RPG游戏加载数据

Java 从RPG游戏加载数据,java,Java,所以我正在做一个简单的RPG游戏。我想添加一个选项来加载整个游戏的进度,但我想我对Java不是很熟悉,所以我不想在没有问题的情况下加载进度。其想法是将游戏保存在检查点上,并在游戏继续时加载保存的数据。我用loadGame方法得到一个错误,我想这与我试图加载的数据都是不同的数据类型有关。运行状况和级别是整数,而EquipItem是字符串 这里只有两种方法,saveGame和loadGame,因为代码太长,不能简单地粘贴到整个代码中。当然,如果需要的话,我会添加额外的代码 public static

所以我正在做一个简单的RPG游戏。我想添加一个选项来加载整个游戏的进度,但我想我对Java不是很熟悉,所以我不想在没有问题的情况下加载进度。其想法是将游戏保存在检查点上,并在游戏继续时加载保存的数据。我用
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