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

控制台怪物游戏开发:如何编写检测对象坐标重复的函数?

游戏坐标重复校验函数修复方案

现有代码的核心问题

  • 使用==比较int数组:Java中数组属于引用类型,==比较的是数组对象的内存地址,而非内部存储的(x,y)数值。即使两个数组的坐标完全相同,只要是不同的实例,判断结果也为false,无法识别重复坐标。
  • 仅对比相邻元素:现有逻辑只校验了下标i和i+1的对象,非相邻的重复坐标(如下标0和下标2的对象重合)无法被检测到,校验逻辑不完整。

修复后实现(基础版)

函数返回值说明:返回true代表存在重复坐标,返回false代表所有坐标无冲突。

private static boolean checkObjects(int[][] allObjects){
    int objectCount = allObjects.length;
    // 双层遍历比对所有对象组合,避免遗漏非相邻重复
    for(int i = 0; i < objectCount - 1; i++){
        for(int j = i + 1; j < objectCount; j++){
            // 分别比对x、y坐标数值是否完全一致
            if(allObjects[i][0] == allObjects[j][0] && allObjects[i][1] == allObjects[j][1]){
                return true;
            }
        }
    }
    return false;
}

高性能优化版(适合对象数量较多的场景)

如果游戏对象数量超过100个,可以用哈希集合将校验时间复杂度从O(n²)降至O(n),需要先在代码顶部导入java.util.HashSet和java.util.Set:

private static boolean checkObjects(int[][] allObjects){
    Set<String> coordinateSet = new HashSet<>();
    for(int[] coord : allObjects){
        String coordKey = coord[0] + "," + coord[1];
        // 坐标已存在说明重复
        if(coordinateSet.contains(coordKey)){
            return true;
        }
        coordinateSet.add(coordKey);
    }
    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:09:01