You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSIS课程GUI对战游戏项目:文件读写功能故障求助

解决游戏进度保存的文件读写问题

嘿,我看你在做CSIS课程的GUI对战游戏,还想着实现进度持久化——这个想法挺棒的,毕竟没人想每次打开游戏都从头打!不过文件读写出问题确实闹心,我先结合你给出的部分代码,帮你排查可能的坑,再给你一套能跑的解决方案。

首先,你贴的read()方法只写了开头,我猜大概率是这几个地方出问题了:

  • 第一次运行游戏时,进度文件还没创建,Scanner直接抛异常,导致返回值一直是0
  • 文件路径没搞对,比如你以为文件在项目根目录,但实际程序找的是其他位置
  • 文件内容格式不对(比如不小心写了非数字字符),读取时直接报错
  • 没有处理读取时的异常,导致程序悄悄崩溃或者进度重置

我给你写一套完整的读写方法,把这些坑都填上:

读取进度的方法

private static int readWinCount() {
    int winCount = 0;
    // 把进度文件放在项目根目录,名字叫win_progress.txt
    File progressFile = new File("win_progress.txt");

    try (Scanner scanner = new Scanner(progressFile)) {
        // 先判断文件里有没有整数,避免格式错误
        if (scanner.hasNextInt()) {
            winCount = scanner.nextInt();
        }
    } catch (FileNotFoundException e) {
        // 第一次运行没文件很正常,不用慌,返回初始值0就行
        System.out.println("首次运行,未找到进度文件,将创建新文件");
    } catch (InputMismatchException e) {
        // 如果文件里写了不是数字的内容,直接重置进度为0并保存
        System.out.println("进度文件格式错误,已重置进度");
        writeWinCount(0);
    } catch (Exception e) {
        // 其他未知错误,打印日志方便调试
        e.printStackTrace();
    }

    return winCount;
}

写入进度的方法

private static void writeWinCount(int winCount) {
    File progressFile = new File("win_progress.txt");

    try (PrintWriter writer = new PrintWriter(progressFile)) {
        writer.println(winCount);
        System.out.println("当前进度已保存:已击败" + winCount + "个对手");
    } catch (FileNotFoundException e) {
        System.out.println("无法写入进度文件,请检查文件权限");
        e.printStackTrace();
    }
}

怎么在你的游戏里用

  1. 游戏启动的时候,先加载进度:
    int currentWins = readWinCount();
    
  2. 每次击败一个对手后,更新计数并保存:
    currentWins++;
    writeWinCount(currentWins);
    // 判断是否达到胜利条件
    if (currentWins >= 5) {
        // 显示你的"YOU WIN"提示,比如用JOptionPane或者GUI组件
        JOptionPane.showMessageDialog(null, "YOU WIN");
        // 可以重置进度或者让玩家重新开始
        writeWinCount(0);
    }
    

额外提醒

  • 如果你的GUI游戏以后要打包成Jar,最好把进度文件放在用户的文档目录里(比如System.getProperty("user.home") + "/Documents/GameProgress.txt"),避免权限问题或者找不到文件
  • 如果是多线程的游戏(比如动画和逻辑分开线程),读写文件的时候要加同步锁,防止同时读写导致的文件损坏
  • 要是想更靠谱,也可以用Properties类或者JSON来存进度,不过对于简单的计数来说,文本文件足够用了

内容的提问来源于stack exchange,提问作者Jared27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:56:31