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

Java编写Battleship战舰游戏AI出现超猜测次数、重复命中问题求助

Java战舰游戏AI错误排查及修复方案

核心问题根源

  • 命中逻辑分支无容错处理:当棋盘存在未击沉的命中点X,但该X四个方向均无有效可猜测格子时,代码中的方向循环会直接break,此时row和col仍保留初始值0,直接返回对应位置A1,哪怕该位置已经被命中过
  • 无全局有效性校验:所有分支生成的猜测坐标没有经过最终的有效性校验,未确认该位置是否为未猜测的.就直接返回,导致大量无效猜测提交,累计超过100次触发报错
  • 棋盘类型判断逻辑缺陷:squareType方法仅判断中间4个格子的状态,当这4个格子全部被占用后,squareValue会固定为0,奇偶筛选规则isCorrectSquare会筛掉一半的格子,游戏后期仅剩不符合奇偶规则的格子时,随机猜测的do-while循环会永久阻塞,无法返回有效坐标

修复方案

1. 命中分支增加容错

在命中逻辑的方向循环结束后,判断生成的坐标是否有效,无效则降级到随机猜测逻辑:

else if (hits(guesses)) {
    // 原有查找X坐标的逻辑保持不变
    // 原有方向随机循环逻辑保持不变
    // 新增有效性判断,无效则走随机生成逻辑
    if (guesses[row][col] != '.') {
        do {
            row = ((int)(Math.random() * 10));
            col = ((int)(Math.random() * 10));
        } while (guesses[row][col] != '.');
    }
}

2. 增加全局有效性校验

在返回猜测结果前统一校验坐标有效性,覆盖所有分支的无效输出场景:

// 原有所有坐标生成逻辑结束后新增校验
if (guesses[row][col] != '.') {
    do {
        row = ((int)(Math.random() * 10));
        col = ((int)(Math.random() * 10));
    } while (guesses[row][col] != '.');
}
char a = (char)((int)'A' + row);
String guess = a + Integer.toString(col+1);
return guess;

3. 修复奇偶筛选逻辑

调整isCorrectSquare规则,当剩余可猜测格子数小于20时关闭奇偶校验,避免后期无可用格子:

// 新增remaining参数为剩余未猜测格子数:100 - guessNumber(guesses)
public static boolean isCorrectSquare(int x, int y, int z, int remaining) {
    if (remaining < 20) return true;
    return !((z == 0 && (x + y) % 2 != 0) || (z == 1 && (x + y) % 2 == 0));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:45:03