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

Java Swing国际象棋isVectorFree方法对角线路径检测异常修复求助

问题分析与修复方案

嘿,我一眼就发现了两个导致对角线路径检测失效的关键问题:

1. 对角线检测用了错误的嵌套循环

你现在的对角线分支用了两层for循环,这会遍历整个矩形区域内的所有格子,而不是只检查对角线上的路径点。比如东北方向的检测,你会把x从x1+1到x2之间的所有列,和y从y1-1到y2之间的所有行的交叉点都检查一遍——哪怕这些点不在主教的移动路径上,只要有棋子就会返回false,这就是为什么你移走阻挡的兵后,主教还是没法移动的原因。

正确的做法应该是同步遍历对角线上的每一个点:每一步同时增减x和y坐标,只检查路径上的格子。

2. 混淆了坐标与数组索引的对应关系

看你水平/垂直方向的代码,piecePositions[i][x1]里,第一个索引是y坐标(行),第二个是x坐标(列)。但在对角线分支里,你错误地把x坐标当成了数组的行索引(row = x1 + 1),这完全搞反了行列对应关系,导致你检查的是错误的格子!


修复后的完整代码

下面是修正后的isVectorFree()方法,我已经修复了上述两个问题:

public boolean isVectorFree(int x1, int y1, int x2, int y2) {
    // 垂直方向(南北)
    if (x1 == x2) {
        int start = Math.min(y1, y2) + 1;
        int end = Math.max(y1, y2);
        for (int row = start; row < end; row++) {
            if (piecePositions[row][x1] != null) {
                return false;
            }
        }
    } 
    // 水平方向(东西)
    else if (y1 == y2) {
        int start = Math.min(x1, x2) + 1;
        int end = Math.max(x1, x2);
        for (int col = start; col < end; col++) {
            if (piecePositions[y1][col] != null) {
                return false;
            }
        }
    } 
    // 对角线方向
    else {
        int colStep = x2 > x1 ? 1 : -1; // x方向步长:东为+1,西为-1
        int rowStep = y2 > y1 ? 1 : -1; // y方向步长:南为+1,北为-1
        
        int currentCol = x1 + colStep;
        int currentRow = y1 + rowStep;
        
        // 遍历对角线上的每一个中间点
        while (currentCol != x2 && currentRow != y2) {
            if (piecePositions[currentRow][currentCol] != null) {
                return false;
            }
            currentCol += colStep;
            currentRow += rowStep;
        }
    }
    return true;
}

代码说明

  1. 简化水平/垂直检测:用Math.min和Math.max统一处理方向,避免重复的if分支,代码更简洁。
  2. 统一对角线处理:通过步长变量colStep和rowStep判断x、y方向的增减,用单循环遍历对角线上的每一个中间点,只检查路径上的格子。
  3. 修正索引对应关系:严格遵守piecePositions[row][col](row对应y坐标,col对应x坐标)的规则,确保检查的是正确的格子。

这样修改后,主教、王后这类走对角线的棋子就能正确检测路径是否畅通了,不会再被非路径上的棋子干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:43:00