各位巨佬,如何用c语言做出这个呢?(带注释那种)

在最终的程序项目中,您需要使用 C 语言设计和实现一个扫雷游戏。 详细要求如下:
(一)矿场设置
你必须从键盘输入雷区的宽度和高度,建立一个地雷
地雷的可能位置由白色方块显示的字段。 为了
例如,一个宽度为10,高度为20的雷区如下所示

img

(2) 矿场设置
您必须在地雷字段中输入您要设置的地雷数量,并输入
这些矿山的位置。 例如,地雷数量为 2,位置
其中是 (1,2) 和 (3,4),这意味着我们必须挖掘,一个放在
矿场的第二行第三列,第四行还有一个
和第五列

img


3)扫地雷

在 Mine Weep 过程中,你不断猜测地雷可能的位置,如果你
猜对了,那么我对应的白色就换成“”,否则
不断输入地雷的可能位置,直到找到所有地雷。 例如,如果我们
输入一个位置 (1,2),那么放置在位置 (1,2) 的地雷被“
”替换,如果我们
输入一个位置(5,6),意思是猜错了,那么我们需要输入
另一个位置,直到两个地雷被扫出来

img

巨佬们,请写一点注释在里面,真的不会

使用ege图形界面画图,定义一个二维数组,根据数组的数据画出矩形。

参考如下链接:

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

运行结果:

img

参考如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

class CGame 
{
public:
    CGame(); //初始化
    virtual ~CGame();

    void setRowandCol(int row,int col)
    {
        int i,j;
        mrow = row;
        mcol = col;
        for (i=0;i<row;i++)
        {
            for (j=0;j<col;j++)
            {
                grid[i][j] = rand()%2; //生成0-1的随机数
                state[i][j] = 0;
            }
        }
    }

    void Print(); //打印当前图
    int DoStep(); 
    void FlgMine(int x,int y); //标记雷
    void Open(int x,int y); //打开该结点
    int Judge(); //判断是否结束
    void Run(); //游戏运行
private:
    //最大30*30
    int grid[30][30]; //生成雷图,0表示无雷,1表示有雷
    int state[30][30]; //状态,0表示未翻开,1表示标雷,2表示已翻开
    int mrow,mcol; //保存实际行数和列数
    int mflag; //是否触雷
    int bover; //游戏是否结束
};
CGame::CGame()
{
    mflag = 0;
    bover = 0;
}
void CGame::Print()
{
    int i,j;
    //system("cls");
    printf("\n");
    for (i=0;i<mrow;i++)
    {
        for (j=0;j<mcol;j++)
        {
            if (state[i][j] == 0)
                printf("□");
            else if(state[i][j] == 1)
                printf("m"); //标记累
            else
                printf("%d ",grid[i][j]);//打开
        }
        printf("\n");
    }
}
//
int CGame::DoStep()
{
    int x,y,op;
    char ch;
    printf("请输入行列数:");
    scanf("%d %d",&x,&y);
    printf("请选择:1.标雷  2.翻开 ");
    while(1)
    {
        scanf("%d",&op);
        if(op==1)
        {
            FlgMine(x,y);
            break;
        }
        else
        {
            Open(x,y);
            if(mflag) return 0;
            break;
        }
    }
    fflush(stdin);
    printf("是否继续(按y继续/按q退出):");
    ch = getchar();
    getchar();
    if(ch == 'Y' || ch == 'y')
        return 1;
    return 0;
}
//标记雷
void CGame::FlgMine(int x,int y)
{
    state[x-1][y-1] = 1; //标记雷
    Print(); //刷新雷图
}
//打开该结点
void CGame::Open(int x,int y)
{
    state[x-1][y-1] = 2;//翻开
    Print();//刷新雷图
    if(grid[x-1][y-1] == 1)//是雷
    {
        mflag = true; //结束游戏
        printf("翻到雷了");
    }
}
//判断是否结束
int CGame::Judge() 
{
    if(mflag) return 1;
    //判断是否都已经翻出
    for (int i=0;i<mrow;i++)
    {
        for (int j=0;j<mcol;j++)
        {
            if (state[i] == 0)
            {
                return 0;
            }
        }
    }
    return 1;
}
//游戏运行
void CGame::Run()
{
    printf("This is MINE block ...\n");
    Print(); 
    while(!bover)
    {
        if( DoStep() )
            Judge();
        else
            break;
    }
}
CGame::~CGame(){}
int main()
{
    CGame game;
    int row,col;
    srand((unsigned int)time(NULL));
    printf("Input MINE block width:");
    scanf("%d",&col);
    printf("Input MINE block height:");
    scanf("%d",&row);
    game.setRowandCol(row,col);
    game.Run();
    printf("游戏运行结束\n");
    system("pause");
    return 0;
}