当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C语言编写扫雷

C语言编写扫雷

2018年10月13日  | 移动技术网IT编程  | 我要评论

神回复吧,小学生读后感,fc兵蜂

扫雷
定义两个二维数组:mine用来布雷、show用来显示扫雷情况、mine初始化为’0’、show初始化为’*’;开始扫雷输入坐标、如果有雷、提示你踩雷了,本轮游戏结束,如果没雷继续扫直到扫完所有没有雷的地方,没扫一次会提示其周围有几个雷。因为统计四周,边缘位置不好实现,所以把二维数组的行和列都加二,这样无论是否在边缘都可以当做一种情况来实现。

#include
#pragma warning(disable:4996)
#include
#define row 11            
#define col 11
#define default 10
void menu();
void init_board(char mine[row][col], char show[row][col]);  //初始化棋盘
void display_board(char show[row][col]);                    //打印棋盘
void set_mine(char mine[row][col]);                         //布雷
int get_mine(char mine[row][col], int x, int y);            //统计该位置周围雷的个数
void mine_sweep(char mine[row][col], char show[row][col]);   //扫雷
void game();                                                 //玩游戏
int main()
{
    int input = 1;
    menu();
    while (input)
    {
        printf("请选择:\n");
        scanf("%d", &input);
        switch (input)
        {
        case 0:
            printf("退出程序\n");
            break;
        case 1:
            game();
            break;
        default:
            printf("错误指令请重新选择:\n");
            break;
        }
    }
    system("pause");
    return 0;
}
void menu()
{
    printf("###########扫雷#########\n");
    printf("####0:start||1:exit####\n");
    printf("########################\n");
}
void init_board(char mine[row][col], char show[row][col])
{
    int i = 0;
    int j = 0;
    for (i = 1; i < row - 1; i++)
    {
        for (j = 1; j < col - 1; j++)
        {
            mine[i][j] = '0';
        }
    }
    for (i = 1; i < row - 1; i++)
    {
        for (j = 1; j < col - 1; j++)
        {
            show [i][j] = '*';
        }
    }
}
void display_board(char show[row][col])
{
    int i, j;
    printf("  ");
    for (i = 1; i < col - 1; i++)
        printf("%d ", i);
    printf("\n");
    for (i = 1; i < row - 1; i++)
    {
        printf("%d ", i);
        for (j = 1; j < col - 1; j++)
        {
            printf("%c ", show[i][j]);
        }
        printf("\n");
    }
}
void set_mine(char mine[row][col])
{
    int x = 0;
    int y = 0;
    int count = default;
    srand((unsigned)time(null));
    while (count)
    {
        x = rand() % (row-2) + 1;
        y = rand() % (col-2) + 1;
        if (mine[x][y] == '0')
        {
            mine[x][y] = '1';
            count--;
        }
    }
}
int get_mine(char mine[row][col], int x, int y)
{
    int count = 0;
    if (mine[x - 1][y - 1] == '1')
        count++;
    if (mine[x - 1][y] == '1')
        count++;
    if (mine[x-1][y + 1] == '1')
        count++;
    if (mine[x][y - 1] == '1')
        count++;
    if (mine[x ][y + 1] == '1')
        count++;
    if (mine[x + 1][y - 1] == '1')
        count++;
    if (mine[x + 1][y] == '1')
        count++;
    if (mine[x + 1][y + 1] == '1')
        count++;
    return count;
}
void mine_sweep(char mine[row][col], char show[row][col])
{
    int x = 0;
    int y = 0;
    int count = 0;
    while (count != (row - 2)*(col - 2) - default)
    {
        printf("请输入坐标row(1-9)col(1-9):");
            scanf("%d%d", &x, &y);
        if (mine[x][y] == '1')
        {
            printf("踩到雷了:\n");
            printf("雷在棋盘的位置:\n");
            display_board(mine);
            return;
        }
        else
        {
            int ret = get_mine(mine, x, y);
            show[x][y] = ret + '0';
            display_board(show);
        }
    }
    printf("扫雷成功\n");
}
void game()
{
    char mine[row][col];
    char show[row][col];
    init_board(mine, show);
    display_board(show);
    set_mine(mine);
    mine_sweep(mine, show);
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网