扫雷周围的矿井有一半的时间

时间:2017-01-01 21:01:38

标签: java minesweeper

我用Java编写扫雷克隆,我在计算周围炸弹数量的部分遇到了一些麻烦。出于某种原因,要么某些细胞检测到额外的炸弹,要么根本没有炸弹(甚至很奇怪,一些细胞工作正常)。有人可以帮忙吗?谢谢!

注意:key[][]是一个int[][]数组,用于记录炸弹的位置,指定为9。

0表示空白区域

int count表示每个细胞周围的8个细胞中的炸弹数量(这就是为什么我还有8个try-catch循环来解释边界细胞的原因)

ps:抱歉格式错误

编辑:我弄明白我的问题在哪里(我打电话给我两次)。关于如何使这段代码更简单,更有效的任何建议?

private void numberSet() {

    int count = 0;
    for (int i = 0; i < key.length; i++) {
        for (int a = 0; a < key[0].length; a++) {

            if (key[i][a] == 0) {

                try {
                    if (key[i + 1][a] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i - 1][a] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i][a + 1] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i][a - 1] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i + 1][a + 1] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i - 1][a + 1] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i + 1][a - 1] == 9) {
                        count++;
                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                try {
                    if (key[i - 1][i - 1] == 9) {
                        count++;

                    }

                } catch (java.lang.ArrayIndexOutOfBoundsException e) {
                    continue;
                }
                key[i][a] = count;
            }
            count = 0;
        }
    }

}

3 个答案:

答案 0 :(得分:2)

看起来您正在滥用continue语句,它会将执行移回for循环,因此无法完成各种检查以增加count

catch陈述中,你不应该做任何事情。

答案 1 :(得分:2)

我会认真考虑彻底放弃你这样做的方式。当我第一次开始编码时,我也做了一个扫雷游戏,我做了你正在做的事情。经过几次修改后,我能够将所有内容放入几个循环中。我试着在我的代码中充分评论,告诉你每一行的作用。此代码未经过测试,因此可能无法立即完全正确。但是,我仔细研究了几次,看起来它对我有用。我建议你使用这段代码并尝试使其工作。试一试。

.marketing-single-page-titles p {
  margin: 0;
  padding: 0;
  position: relative;
  top: -5px;
  color: $marketing-blue;
  font-weight: bold;
}

答案 2 :(得分:1)

if(key[i-1][i-1] == 9){

这看起来与你的所有其他人不同,后者有i和a。这个使用我两次。也许那是你的问题?