【问题标题】:read data to load game from text file读取数据以从文本文件加载游戏
【发布时间】:2015-07-14 08:17:19
【问题描述】:

您好,我正在开发一款游戏,一旦我的保存按钮被点击,它就会保存多个状态,例如:姓名、totalScore ...

这就是我保存它的方式:

public static void save()
{
    fileName = new File("Saved Game");

    try
    { 
        fw = new FileWriter(fileName,true);  
    } 
    catch (IOException e)
    {     
        e.printStackTrace();
        JOptionPane.showConfirmDialog(frame, e.toString() + "\nFail to save game.",   
                "Saved", JOptionPane.DEFAULT_OPTION);
    } 

    f = new Formatter(fw); 
    f.format("\n%s\t",level);
    f.format("\t%s\t",  nameLabel.getText());
    f.format("\t%s\t\t", updatedLabel.getText());

    f.close();


    JOptionPane.showConfirmDialog(frame, "Saving was successful.", "Game Saved",   
            JOptionPane.DEFAULT_OPTION);   
}

我想加载一个游戏而不是每次都开始一个新游戏。我可以从文本文件中读取数据并将其打印到屏幕上,但不知道如何将这些数据加载到标签中(例如名称)以开始游戏。有什么想法吗?

到目前为止,我加载文本文件的代码是:

public static void readFromFile (String  fileName) throws IOException
{
    FileReader fr = new FileReader(fileName);
    BufferedReader br = new BufferedReader(fr);

    System.out.println(br.readLine());

    br.close();
}

我在单击“加载”按钮时调用此方法。任何想法将不胜感激。

【问题讨论】:

标签: java swing file save load


【解决方案1】:

执行此操作的常用方法是使用java.util.Properties 从文本文件中读取键值对。在这个完整的example 中,属性文件用于初始化AlphaComposite 规则的词汇表。规则的enum 显示在JComboBox 中。您还可以使用属性来初始化java.util.prefs.Preferences 实例中的默认值,如游戏中引用的here 所示。

【讨论】:

  • 嗯,我不知道,当我第一次从输入文件中读取时,我使用的是 c++,所以我无法访问 Java 的扩展库。很高兴知道,但对任何阅读本文的人来说也是一个警告,除非您打算永远只使用 Java,否则请确保在使用库之前知道如何在没有库的情况下解决问题,因为 Java 中的基本内容是在其他语言中通常完全不存在。 toString() 是我最喜欢的例子。
  • @MitchellCarroll:我尝试利用这些库,我发现 Java 设计在其他场所影响了我自己的设计。感谢在上下文中解决 OP 的问题。
  • 同样,当我使用 c++ 时,我总是确保为我创建的每个对象添加一个 toString() 函数。使用 Java 的库可以大大提高你的工作效率,但是依赖它们(Java 是我真正致力于学习的第一门语言)可能会成为其他语言的障碍,尤其是 c/c++
【解决方案2】:

将单个保存文件读入工作内存不需要ArrayList。由于您写入了写入文件的方法,因此您隐含地知道数据在哪里,所以如果您的写入函数看起来像这样(这有点像伪代码,但它明白了重点)

outFile.writeLine(foo.name)
outFile.writeLine(foo.health)
outFile.writeLine(foo.level)

使用foo 作为角色类实例的名称。你的读取函数看起来像

bar.name = inFile.getLine()
bar.health = inFile.getLine()
bar.level = inFile.getLine()

当然,您需要首先将bar 构建为您的类的一个空实例,并进行所有相关的fileIO 设置和housecleaning,并且不要忘记从您的读取函数中返回bar

【讨论】:

    【解决方案3】:

    使用 readLine() 遍历每一行并将它们保存到 ArrayList。由于您是创建文本文件的人,因此当您从数组中检索值时,您知道每一行中的内容。

    BufferedReader in = new BufferedReader(new FileReader("path/of/text"));
            String str;     
    
    List<String> list = new ArrayList<String>();
            while((str = in.readLine()) != null){
                list.add(str);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2021-11-19
      • 2011-02-08
      相关资源
      最近更新 更多