java - Java MineSweeper 未将炸弹数向右
问题描述
为了练习,我正在学习扫雷教程,但是在将每个方格周围的炸弹数量相加时,它不会计算右边的炸弹,我不完全确定问题出在哪里。我试过重新启动,在多个编译器中打开它,移动它,什么都没有。我看了又看,找不到任何逻辑错误。
下面是我的计数代码。最后一个if
语句是计算右侧正方形的语句。
btnAmt = 10
background
是一个包含所有地雷值的二维数组。
如果错误不在此处,我可以发布完整的代码,但我很沮丧,因为似乎没有逻辑错误,并且所有其他方向都有效。
//Count neightbouring mines
for(int x = 0; x < background.length; x++){
for(int y = 0; y < background[0].length; y++){
int nCount = 0;
if(background[x][y] != MINE){
if((x > 0) && (y > 0) && (background[x-1][y-1] == MINE)){ //up and left
nCount++;
}
if(y > 0 && background[x][y-1] == MINE){ //Up
nCount++;
}
if(x < btnAmt-1 && y > 0 && background[x+1][y-1] == MINE){ // Up Right
nCount++;
}
if(x>0 && background[x-1][y] == MINE){ //Left
nCount++;
}
if(x>0 && y<btnAmt-1 && background[x-1][y+1] == MINE){ //Down and left
nCount++;
}
if(x<btnAmt-1 && y<btnAmt-1 && background[x+1][y+1] == MINE){//Down and right
nCount++;
}
if(x<btnAmt-1 && background[x+1][y] == MINE){ //Right
nCount++;
}
background[x][y] = nCount;
}
}
}
解决方案
你从来没有检查过background[x][y+1]
. 这是“正确”的方向,而您评论为“正确”的(background[x+1][y]
)实际上是down。
请记住mat[i][j]
(按照惯例)表示matrix的i
第 - 行和第 - 列。因此,向右意味着将 1 添加到列中,因此.j
mat
mat[i][j+1]
推荐阅读
- breakpoints - 埃菲尔工作室什么是在我正在编辑的当前行上放置断点的最短方法
- crystal-reports - conditional color formatting based on string and number
- sql - 使用访问表链接刷新 sql 表
- doctrine-orm - 教义协会持续存在
- node.js - 如何在 Mongoose cursor.eachAsync 中批量插入?
- android - NetworkStatsManager:查询时出错
- react-native - 来自(@remobile/react-native-toast)的吐司不显示
- maven - Gradle 无法识别 Cumulocity 微服务 SDK 包
- bash - 源 Bashrc 没有效果
- java - Firebase AuthListener 多次调用