-1

I have all my cells stored in an ArrayList and I want to check how many mines they are surrounded by (mines are cells with a not null mine png). I thought of checking the positions -1, +1, -9, +9, -10, +10, -11, +11 relative to each cell and add 1 to a counter inside the cell object. Problem is I get out of bounds and don´t know how to avoid it.

for (Cell cell: cells){
        if ((cells.get(cells.indexOf(cell) - 1).mine != null)&&((cells.indexOf(cell) - 1) >= 0)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) + 1).mine != null)&&((cells.indexOf(cell) + 1) < 100)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) - 10).mine != null)&&((cells.indexOf(cell) - 10) >= 0)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) + 10).mine != null)&&((cells.indexOf(cell) + 10) < 100)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) - 11).mine != null)&&((cells.indexOf(cell) - 11) >= 0)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) + 11).mine != null)&&((cells.indexOf(cell) + 11) < 100)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) - 9).mine != null)&&((cells.indexOf(cell) - 9) >= 0)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
        if ((cells.get(cells.indexOf(cell) + 9).mine != null)&&((cells.indexOf(cell) + 9) < 100)) {
            cell.setMine_number(cell.getMine_number() + 1);
        }
    }

Ignore the spaghetti code I always refactor when things work.

4

1 回答 1

0

我想检查位置-1,...

不幸的是,这种想法不起作用。

首先,您将“假定为 2 暗”列表的维度“硬编码”到这些数字中。如果将网格更改为 20x20 会怎样。那么-10是没有意义的。

然后:很明显,对于大量插槽,-10 或 +10 将不起作用。

您可以创建一个简单的检查器方法,例如:

boolean isValidIndex(int cellIndex, int offset) {
  // not doing your homework for you, but rest assured
  // this method is easy to implement

然后您可以使用:

if (isValidIndex(cells.indexOf(cell), 9))

例如。

于 2021-05-12T06:43:27.057 回答