gpt4 book ai didi

java - 将游戏保存到文件

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:12 24 4
gpt4 key购买 nike

我正在开发一个原始的 RPG,这个类(据说)包含所有必要的数据:

public class CPU implements Serializable{

private Map<String, Location> locations;
private Map<String, Location> places;
private Map<String, NPC> npcs;
private Game game;
private Player player;
private NPC currentNPC;

public CPU(){

}

(我没有包含这些方法,但我认为这些现在不相关......)

“Game”类还包含 Player 和 CPU 作为变量,但其构造函数并不是实际创建它们的构造函数(它们是在 main() 方法中创建的,然后添加到类中)。该方法应该将 CPU 类保存到文件中,以便我稍后可以从中读取所有数据:

public void SaveGame(String s){
String sav = s;
sav.concat(".dat");
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(sav));
oos.writeObject(cpu);
oos.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}

这是从文件加载它的方法:

public void Load(String s){
if(s.contains(".dat")){
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(s));
cpu = (CPU)ois.readObject();
ois.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
}

我的问题基本上是:这行得通吗?我是否能够简单地序列化 CPU 类并将其保存到文件中,然后读回并能够从中恢复所有数据(即播放器数据)?

如果我没记错的话,在Java中“=”并不意味着右侧的对象将被复制,所以我的另一个问题是:当“Load”方法完成时,“cpu”(“Game”类的变量)是否仍然包含我从文件加载的CPU,我是否能够从中读取数据?

最佳答案

实际上,只有当您传递给 SaveGame() 方法的原始文件名包含 ".dat" 时,它才会起作用。

事实上,读取方法会检查该条件,并且 SaveGame() 方法(应命名为 saveGame() 以遵守 Java 命名约定)不会像您想象的那样将 .dat 附加到文件名中。事实上,字符串是不可变的,concat() 方法返回一个新字符串,但不会修改它所调用的字符串。代码应该是

String sav = s.concat(".dat");

您还应该停止像您正在做的那样忽略异常,并且应该始终在finally block 中关闭流。如果您使用的是 Java 7,请使用 try-with-resources构造。

关于java - 将游戏保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com