首页 > 解决方案 > 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;
        }
    }
}

标签: javalogicminesweeper

解决方案


你从来没有检查过background[x][y+1]. 这是“正确”的方向,而您评论为“正确”的(background[x+1][y])实际上是down

请记住mat[i][j](按照惯例)表示matrix的i第 - 行和第 - 列。因此,向右意味着将 1 添加到列中,因此.jmatmat[i][j+1]


推荐阅读