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

Android Java战舰游戏:实现cellStatus方法判断网格单元格状态

解决Android战舰游戏cellStatus方法的实现问题

我来帮你搞定这个cellStatus方法的实现,同时也给你提个小bug修复建议!

首先,先明确核心需求:我们需要检查传入的(column, row)坐标是否落在某艘战舰的覆盖范围内,如果是,返回对应战舰的编号(0-4),否则返回-1。

实现思路

每艘战舰的位置由起始坐标、方向和长度决定:

  • 水平战舰:行固定,列从起始列left开始,连续占据size个单元格(比如起始列1、长度3的水平战舰,覆盖列1、2、3,行不变)
  • 垂直战舰:列固定,行从起始行top开始,连续占据size个单元格

基于这个逻辑,我们可以遍历每艘战舰,逐一判断当前坐标是否属于它:

完整的cellStatus实现代码

@Override
public int cellStatus(int column, int row) {
    // 默认返回-1,表示空单元格
    int status = -1;
    
    // 遍历所有5艘战舰
    for (int shipIndex = 0; shipIndex < ships.length; shipIndex++) {
        ShipData currentShip = ships[shipIndex];
        
        int shipLeft = currentShip.getLeft();
        int shipTop = currentShip.getTop();
        int shipSize = currentShip.getSize();
        boolean isHorizontal = currentShip.isHorizontal();
        
        // 判断当前坐标是否在这艘战舰的范围内
        if (isHorizontal) {
            // 水平战舰:行必须等于战舰的top,列在[left, left+size-1]区间内
            if (row == shipTop && column >= shipLeft && column <= shipLeft + shipSize - 1) {
                status = shipIndex;
                // 找到匹配的战舰,直接跳出循环,不用再检查其他战舰
                break;
            }
        } else {
            // 垂直战舰:列必须等于战舰的left,行在[top, top+size-1]区间内
            if (column == shipLeft && row >= shipTop && row <= shipTop + shipSize - 1) {
                status = shipIndex;
                break;
            }
        }
    }
    
    return status;
}

顺便修复onDraw里的小bug

你当前的switch语句没有加break,会导致空单元格(case -1)执行完后,继续执行后面的case,最终所有单元格都会用shipPaint,这显然不对。需要给每个case加上break:

switch (var) {
    case -1:
        paint = fillPaint;
        break; // 加上break,避免fall through
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
        paint = shipPaint;
        break;
}

测试验证

针对你提到的测试用例:一艘位于坐标(1,4)、长度为3的水平战舰(假设它是ships数组的第0艘,即索引0),当调用cellStatus(1,4)、cellStatus(2,4)、cellStatus(3,4)时,都会返回0;其他不在这个范围内的坐标会返回-1,这样就能正确切换单元格颜色了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:50:42