java - 我正在构建一个扫雷项目,我需要帮助计算相邻的地雷

标签 java arrays

我正在尝试计算我的瓷砖对象数组中相邻的地雷。该代码适用于边界内网格的任何部分。假设它是一个 10 x 10 数组,如果我选择点 9,8,它会给我一个数组越界异常。如何确保数组会计算数组边缘的相邻地雷,而不会出现 ArrayOutOfBounds 异常?

void countAdjacentMines(int x,int y) {
        //Iterate through the array check if there is a mine
        for (int i = 0; i < tiles.length; i++) {
            for (int j = 0; j < tiles.length; j++) {
                if ((tiles[i][j].getMine() == false)) {
                    int count = 0;
                    //Search adjacent tiles. at x,y
                    for (int p = x - 1; p <= x + 1; p++) {
                        for (int q = y - 1; q <= y + 1; q++) {

                            if (0 <= p && p < tiles.length && 0 <= q && q < tiles.length) {
                                if (tiles[p][q].getMine()==true)
                                    count++;

                            }
                            tiles[p][q].setCount(count);
                        }                       
                    }                       
                }
            } // end for loop rows
        } // end for loop columns
  } // end countAdjacentMines

最佳答案

创建一个函数

int hasMine(int x, int x)

(x,y)持有地雷时返回1, 如果不是或 (x,y) 不是有效单元格,则为 0(它也很有用) 拥有一个 boolean valid (int x, int y) 函数)。

然后,只需执行以下操作:

totalMine = hasMine(x+1,y+1) + hasMine(x+1, y) + hasMine(x+1, y-1) + .... + hasMine(x-1, y-1)//8 个 hasMine() 调用。

关于java - 我正在构建一个扫雷项目,我需要帮助计算相邻的地雷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33110605/

相关文章:

javascript - 如何使用Javascript计算数组中的相邻数字?

java - 无法让 servlet 在 Tomcat 6 中工作

java - 如何在没有日志框架包依赖的情况下进行日志记录?

java - 哪个更好? - 在 MySQL 中使用 DATABASE 与 DATABASE.TABLE_NAME

java - AspectJ:两种教程

sql - 选择查询中的动态类型转换

python - 为什么 python 2.6 不更新我的 numpy 数组?

java - 为什么 Spring 加载与指定语言不同的消息?

ios - 使用 Objective-C 单击按钮时更改图像

c++ - 如何创建与 VST 音频缓冲区相同的指针数组的指针?