如何解决检查 java ArrayList 中的相邻单元格是否有扫雷
我将所有单元格都存储在一个 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);
}
}
忽略我在工作时总是重构的意大利面条式代码。
解决方法
我想检查位置-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))
例如。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。