提问人:Jds Wolf 提问时间:5/12/2021 更新时间:5/12/2021 访问量:176
检查扫雷的 java ArrayList 中的相邻单元格
Checking adjacent cells in a java ArrayList for minesweeper
问:
我将所有单元格都存储在 ArrayList 中,我想检查它们周围有多少个地雷(地雷是具有非空地雷 png 的单元格)。我想检查相对于每个单元格的位置 -1、+1、-9、+9、-10、+10、-11、+11,并将 1 添加到单元格对象内的计数器中。问题是我出界了,不知道如何避免它。
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);
}
}
忽略意大利面条代码,我总是在工作时重构。
答:
0赞
GhostCat
5/12/2021
#1
我想检查位置 -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))
例如。
评论
setMineCount()
getMineCount()
increaseMineCount()