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

如何检测2D网格指定位置是否存在数组中存储的玩家、敌人对象

代码修复方案

核心问题说明

你的cells数组仅存储静态墙体的字符数据,读取文件时遇到玩家、敌人标识只会创建对应实例,不会把对应标识写入cells数组,原判定逻辑完全不匹配你的数据存储逻辑。

修复细节

1. hasPlayer方法修复

默认Player类提供getRow()、getCol()方法返回当前所在行列坐标,只需判断传入坐标是否和玩家当前坐标一致即可,补充非空判断避免空指针异常:

public boolean hasPlayer(int row, int col)
{
    return player != null && player.getRow() == row && player.getCol() == col;
}

如果你的Player类坐标属性的getter方法命名不同,对应修改即可。

2. hasLion方法修复

不需要查询cells数组,遍历lions数组匹配坐标即可,补充非空判断避免空指针:

public boolean hasLion(int row, int col)
{
    if (lions == null || lions.length == 0) {
        return false;
    }
    for (Lion lion : lions) {
        if (lion != null && lion.getRow() == row && lion.getCol() == col) {
            return true;
        }
    }
    return false;
}

3. display方法修复

原方法存在语法错误(缺方法括号),且遗漏墙体渲染逻辑,补充后代码如下:

public void display() {
    for(int i = 0; i < ROWS; i++) {
        for(int j = 0; j < COLS; j++) {
            if(hasPlayer(i,j)){
                System.out.print(Main.BLUE + "P ");
            } else if(hasLion(i,j)){
                System.out.print(Main.YELLOW + "& ");
            } else {
                // 渲染墙体,直接取cells中存储的墙体字符
                System.out.print(Main.RESET + cells[i][j] + " ");
            }
        }
        // 每行结束换行,重置颜色避免后续输出异常
        System.out.println(Main.RESET);
    }
}

如果你的Main类中没有定义RESET颜色重置常量,可以自行添加,值为ANSI重置码"\u001B[0m"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:39:02