首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扫雷舰游戏在地雷周围的街区

问扫雷舰游戏在地雷周围的街区
EN

Stack Overflow用户
提问于 2011-08-06 02:51:13
回答 6查看 4.2K关注 0票数 2

嗨,所以我正在构建一个程序,用Java创建经典的扫雷游戏,几乎所有的东西都下来了,但我不知道如何检查地雷周围的平方和写数字(例如,如果有一个,两个,三个地雷在它旁边)。我只包含了它所在的方法,但如果需要,我可以发布程序的其余部分。我的方法应该是什么?谢谢!

代码语言:javascript
复制
private void countAdjacentMines()
{        
            for (int i = 0; i < mineField.length; i++)
    {
        for (int j = 0; j < mineField.length; j++)
        {
            if (!(mineField[i][j].getIsMine()))
            {
                mineField[i-1][j-1];
                mineField[i-1][j];
                mineField[i-1][j+1];
                mineField[i][j-1];
                mineField[i][j+1];
                mineField[i+1][j-1];
                mineField[i+1][j];
                mineField[i+1][j+1];

                mineField[i][j].setAdjacentMines(0);
            }
        } // end for loop rows
    } // end for loop columns
} // end countAdjacentMines
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-08-06 03:08:54

如下所示:

代码语言:javascript
复制
private void countAdjacentMines()
{        
    for (int i = 0; i < mineField.length; i++)
    {
        for (int j = 0; j < mineField.length; j++)
        {
            if (!(mineField[i][j].getIsMine()))
            {
                int count = 0;

                for (int p = i - 1; p <= i + 1; p++)
                {
                    for (int q = j - 1; q <= j + 1; q++)
                    {
                        if (0 <= p && p < mineField.length && 0 <= q && q < mineField.length)
                        {
                            if (mineField[p][q].getIsMine())
                                ++count;
                        }
                    }
                }

                mineField[i][j].setAdjacentMines(count);
            }
        } // end for loop rows
    } // end for loop columns
} // end countAdjacentMines
票数 3
EN

Stack Overflow用户

发布于 2011-08-06 02:56:38

对于该“列表”中的每一项,执行如下操作:

代码语言:javascript
复制
if ((i-1) >= 0 && (j-1) >= 0 && mineField[i-1][j-1].getIsMine()) {
    numAdjacentMines++;
}

写一个助手函数来做所有这些事情可能是值得的,然后你只需要调用它8次。

票数 3
EN

Stack Overflow用户

发布于 2011-08-06 02:57:32

你在正确的轨道上。您应该保留一个计数器,它表示为.getIsMine()返回true的相邻矿的计数。

代码语言:javascript
复制
if (!(mineField[i][j].getIsMine()))
{
    counter = 0;
    if (i-1 >= 0) 
    { 
        if (j-1 >=0 && mineField[i-1][j-1].getIsMine()) counter++;
        if (mineField[i-1][j].getIsMine()) counter++;
        if (j+1 < mineField.length && mineField[i-1][j+1].getIsMine()) counter++;
    }

    if (j-1 >=0 && mineField[i][j-1].getIsMine()) counter++;
    if (j+1 < mineField.length && mineField[i][j+1].getIsMine()) counter++;

    if (i+1 < mineField.length)
    {
        if (j-1 >=0 && mineField[i+1][j-1].getIsMine()) counter++;
        if (mineField[i+1][j].getIsMine()) counter++;
        if (j+1 < mineField.length && mineField[i+1][j+1].getIsMine()) counter++;
    }

    mineField[i][j].setAdjacentMines(counter);
}

您还需要检查所有这些值(i-1、j-1、i+1、j+1)是否都没有超出数组的界限(i -1 >-1等)

编辑::我想我涵盖了所有的检查。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6961227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档