C中的扫雷程序与围绕地雷的数字有关

时间:2016-10-21 20:36:04

标签: c minesweeper

所以我需要编写一个像扫雷一样创建网格的程序,然后输入你想要的地雷数量,然后输入地雷的位置。到目前为止,我的计划似乎工作正常,直到我决定将矿井放在与另一矿井相同的一排。当我在同一排放置第二个矿井时,应该与矿井相邻的数字显示与其相邻的矿井数量并不总是有效。这是我正在谈论的图片:

enter image description here

似乎这些数字从网格的最右侧延伸到左侧 - (我认为这就是为什么有一个单独的“1”与一个地雷不相邻的原因网格的左边)?

这是我的代码看起来像这个扫雷程序

#include <stdio.h>

int main(void)
{

    int N;
    int M;
    int W;
    int x;
    int y;

    printf("Enter your rows and columns: ");
    scanf("%d", &N);
    scanf("%d", &M);

    int grid[N][M];
    int i;
    int j;

    for( i = 0; i<N; i++)
    {
        for (j = 0; j < M; j++) {
            grid[i][j] = 0;
        }
    }


    printf("enter number of mines");
    scanf("%d", &W);

    for(i=0; i<W; i++)
    {
        printf("enter location of mines");
        scanf("%d", &x);
        scanf("%d", &y);

        grid[x][y]=-100;

        if(x>0 && y>0)
            grid[x-1][y-1]++;
        if(x>0)
            grid[x-1][y]++;
        if(x>0 && y+1<M)
            grid[x-1][y+1]++;
        if(y>0)
            grid[x][y+1]++;
        if(y+1<M)
            grid[x][y-1]++;
        if(x+1<N && y>0)
            grid[x+1][y-1]++;
        if(x+1<N )
            grid[x+1][y]++;
        if(x+1<N && y+1<M)
            grid[x+1][y+1]++;
    }


    for(i = 0;i<N;i++)
    {
        for(j =0;j<M;j++)
        {
            if(grid[i][j]<0)
                printf("* ");
            else
                printf("%d ",grid[i][j]);
        }
        printf("\n");
    }
    return 0;
}

0 个答案:

没有答案