Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检查二维数组上的周围数字?_C++ - Fatal编程技术网

C++ 如何检查二维数组上的周围数字?

C++ 如何检查二维数组上的周围数字?,c++,C++,嘿,我想创建一个文本版的扫雷舰。我创建了一个输出1和0的网格(地雷用0表示,任何不是地雷的东西都是1)。我如何检查每个非地雷周围有多少地雷(或者每个数字1周围有多少0)。然后更新数字以显示有多少地雷与它们相邻 如果有人能告诉我从哪里开始,我将不胜感激:) #包括“pch.h” #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main() { 字符串mystring; 整数网格[5][5]={ {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1,

嘿,我想创建一个文本版的扫雷舰。我创建了一个输出1和0的网格(地雷用0表示,任何不是地雷的东西都是1)。我如何检查每个非地雷周围有多少地雷(或者每个数字1周围有多少0)。然后更新数字以显示有多少地雷与它们相邻

如果有人能告诉我从哪里开始,我将不胜感激:)

#包括“pch.h”
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串mystring;
整数网格[5][5]={
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1}
};
对于(int i=0;i<5;i++)
{
对于(int j=0;j<5;j++)
{
int rNum=(rand()%10)+1;
如果(rNum==1 | | rNum==2)
{
网格[i][j]=0;//矿井为0
}
else网格[i][j]=1;//非矿井用1表示

std::cout我在Java中做了一件非常类似的事情;虽然我没有用0来表示炸弹,而是用9来表示,因为一个非地雷可能被0个地雷包围,一个地雷不可能被9个或更高的地雷包围。下面是我的方法:

for(int x = 0; x < 5; x++) {
            for(int y = 0; y < 5; y++) {
                if(grid[x][y] != 9) {
                    byte count = 0;
                    for(int lx = -1; lx <= 1; lx++) {  //think of lx and ly as temporary x y
                        if((x+lx) >= 0 && (x+lx) < 5) {
                            for(int ly = -1; ly <= 1; ly++) {
                                if((y+ly) >= 0 && (y+ly) <5) {
                                    if(grid[x+lx][y+ly] == 9) {
                                        count += 1;
                                    }
                                }
                            }
                        }
                    }
                    grid[x][y] = count;
                }
            }
        }
for(int x=0;x<5;x++){
对于(int y=0;y<5;y++){
如果(网格[x][y]!=9){
字节计数=0;
对于(intlx=-1;lx=0&&(x+lx)<5){

对于(int-ly=-1;ly=0&&(y+ly),创建一个包含8个元素的二维数组,每个元素代表一个方向,例如
[[0,1],[1,1],[1,0],[1,-1]..
。当通过此数组查找周围地雷的数量时,将其值添加到
i,j
,检查两个接收到的值是否至少大于0且小于5,如果是,则表示您位于相邻字段中。有意义吗?如果您
#定义第5行
#定义COLS行
,则可以消除中的神奇数字你的代码,通过改变一个数字来改变网格的大小,而不是通过循环限制来改变网格的大小,等等。扫雷游戏的两个答案在这里和这里Ashley,是的,这是有意义的。虽然我不知道如何将第二个数组的值添加到I,j并检查这些值。David谢谢你,我正在记录晚上出去玩,但是明天我会做更多的工作,所以我明天可能会相应地修改:)编辑:我刚刚注意到你发布的链接David,以及来自Aidan的答案。就像我说的,我晚上要出去玩,但这看起来有很多信息谢谢大家。
for(int x = 0; x < 5; x++) {
            for(int y = 0; y < 5; y++) {
                if(grid[x][y] != 9) {
                    byte count = 0;
                    for(int lx = -1; lx <= 1; lx++) {  //think of lx and ly as temporary x y
                        if((x+lx) >= 0 && (x+lx) < 5) {
                            for(int ly = -1; ly <= 1; ly++) {
                                if((y+ly) >= 0 && (y+ly) <5) {
                                    if(grid[x+lx][y+ly] == 9) {
                                        count += 1;
                                    }
                                }
                            }
                        }
                    }
                    grid[x][y] = count;
                }
            }
        }