千家信息网

C语言实现扫雷代码怎么写

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了C语言实现扫雷代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言实现扫雷代码怎么写文章都会有所收获,下面我们一起来看看吧。C语言实现扫雷Ov
千家信息网最后更新 2026年11月01日C语言实现扫雷代码怎么写

这篇文章主要介绍了C语言实现扫雷代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言实现扫雷代码怎么写文章都会有所收获,下面我们一起来看看吧。

C语言实现扫雷OvO

0.打印菜单

void menu(){        printf("*****************************\n");        printf("*******    1. play    *******\n");        printf("*******    0. exit    *******\n");        printf("*****************************\n");}

1.初始化棋盘

在初始化棋盘之前,我们设定棋盘大小为9×9,
但这不意味着我们要创建9×9的二维数组。

由于我们要用坐标进行排雷,我们得打印行号、列号。
我们准备设置两个数组,一个用来存放每个位置周围雷的个数,一个用来打印实时棋盘。

void initial(char board[ROWS][COLS], int rows, int cols, char c){        for (int i = 0; i < rows; i++)        {                for (int j = 0; j < cols; j++)                {                        board[i][j] = c;                }        }}

我们使用上面的初始化函数初始化数组。

    //初始化信息盘为'0'        initial(mine, ROWS, COLS, '0');        //初始化雷盘为'*',排雷时对着'*'排雷        //这神秘感不就来了吗        initial(show, ROWS, COLS, '*');

2.打印棋盘

我们用两个for循环打印棋盘。

void display(char board[ROWS][COLS], int row, int col){        for (int i = 0; i <= col; i++)//打印列号        {                printf("%d ", i);        }        printf("\n");        for (int i = 1; i <= row; i++)        {                printf("%d ", i);//打印行号                for (int j = 1; j <= col; j++)                {                        printf("%c ", board[i][j]);                }                printf("\n");        }}

QAQ如果我会EasyX的话就好了。
效果图如下:第一列为行号,第一行为列号。

3.随机埋雷

一说到随机,就想到rand函数。
rand()%9+1,可以生成一个1到9的随机数。
代码中EAST_COUNT为雷的数量,定为10

void set_mine(char mine[ROWS][COLS], int row, int col){        int count = EASY_COUNT;        while (count)        {                int x = rand() % row + 1;                int y = rand() % col + 1;                if (mine[x][y] == '0')                {                        mine[x][y] = '1';                        count--;                }        }}

4.计算周围八个位置中雷的个数

int get_mine(char mine[ROWS][COLS], int x, int y){        return mine[x - 1][y]                 +mine[x - 1][y - 1]                +mine[x][y - 1]                +mine[x + 1][y - 1] +                mine[x + 1][y]                +mine[x + 1][y + 1]                +mine[x][y + 1]                +mine[x - 1][y + 1]                -8 * '0';}

5.递归拓展非雷

我们用递归函数拓展非雷空间

void extent(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y){        if (show[x][y] != '*')                   //若已开辟,则返回        {                return;        }        int count = get_mine(mine, x, y);        if (count > 0)                                        //若大于0,则正常显示雷数                show[x][y] = count + '0';        else if (count == 0)                        //若等于0,则向周围八个方向拓展                show[x][y] = ' ';                extent(mine, show, x - 1, y);                extent(mine, show, x - 1, y - 1);                extent(mine, show, x - 1, y + 1);                extent(mine, show, x, y - 1);                extent(mine, show, x, y + 1);                extent(mine, show, x + 1, y - 1);                extent(mine, show, x + 1, y);                extent(mine, show, x + 1, y + 1);                }

6.胜利条件

通过比较剩余未知格的个数与雷的个数,判断是否胜利。

int iswin(char show[ROWS][COLS]){        int count = 0;        for (int i = 1; i <= ROW; i++)        {                for (int j = 1; j <= COL; j++)                {                        if (show[i][j] == '*')                        {                                count++;                        }                }        }        if (count == EASY_COUNT)        {                return 1;        }        return 0;}

7.输入坐标排雷

根据行号和列号输入坐标进行排雷。

void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){        int x = 0;        int y = 0;        int time = 1;        while (time)        {                printf("请输入要排查的坐标:>\n");                scanf("%d %d", &x, &y);                if (x >= 1 && x <= row && y >= 1 && y <= col)                {                                if (mine[x][y] == '1')                                {                                        printf("很遗憾你被炸死了\n");                                        display(mine, row, col);                                        break;                                }                                else                                {                                        extent(mine, show, x, y);                                        if (iswin(show))                                        {                                                time--;                                                printf("恭喜您,游戏胜利!!!\n");                                        }                                        display(show, row, col);                                }                }                else                {                        printf("输入错误,请重新输入\n");                }        }}

8.完整代码

8.1 game.h
#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include #include #include #define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10//初始化棋盘void initial(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘void display(char board[ROWS][COLS], int row, int col);//布置雷void set_mine(char mine[ROWS][COLS], int row, int col);//排查雷void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);int iswin(char show[ROWS][COLS]);
8.2 test.c
#include "game.h"void menu(){        printf("*****************************\n");        printf("*******    1. play    *******\n");        printf("*******    0. exit    *******\n");        printf("*****************************\n");}void game(){        //创建数组,存放排查后得到的信息和雷的信息        char mine[ROWS][COLS] = { 0 };        char show[ROWS][COLS] = { 0 };        //初始化信息盘为'0'        initial(mine, ROWS, COLS, '0');        //初始化雷盘为'*',排雷时对着'*'排雷        //这神秘感不就来了吗        initial(show, ROWS, COLS, '*');        //布置雷        set_mine(mine, ROW, COL);        //打印雷盘        display(show, ROW, COL);        //排雷        find_mine(mine, show, ROW, COL);}void test(){        int input = 0;        srand((unsigned int)time(NULL));        do        {                menu();                printf("请选择:>");                scanf("%d", &input);                switch (input)                {                case 1:                        //扫雷                        game();                        break;                case 0:                        printf("退出游戏\n");                        break;                default:                        printf("选择错误\n");                        break;                }        } while (input);}int main(){        test();        return 0;}
8.3 game.c
void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){        int x = 0;        int y = 0;        int time = 1;        while (time)        {                printf("请输入要排查的坐标:>\n");                scanf("%d %d", &x, &y);                if (x >= 1 && x <= row && y >= 1 && y <= col)                {                                if (mine[x][y] == '1')                                {                                        printf("很遗憾你被炸死了\n");                                        display(mine, row, col);                                        break;                                }                                else                                {                                        extent(mine, show, x, y);                                        if (iswin(show))                                        {                                                time--;                                                printf("恭喜您,游戏胜利!!!\n");                                        }                                        display(show, row, col);                                }                }                else                {                        printf("输入错误,请重新输入\n");                }        }}

关于"C语言实现扫雷代码怎么写"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"C语言实现扫雷代码怎么写"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

棋盘 输入 代码 扫雷 语言 坐标 个数 信息 数组 行号 胜利 函数 知识 错误 j++ 遗憾 两个 内容 神秘感 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 互联网金融监管科技数据 互联网科技保险 互联网的科技创新 互联网 卓越科技 科技类的互联网平台 山东吉时兔互联网科技有限公司 互联网大会黑科技排名 武汉健翔互联网络科技有限公司 链环科技传统企业怎么转型互联网 西安小鹰速贷互联网科技有限公司 佛山市拉法互联网科技有限公司 威龙国际互联网科技公司 保险科技服务互联网营销体系 怎样加入科技互联网 广州燕处互联网科技有限公司 易企秀互联网科技是做什么的 珠海东科互联网科技有限公司 万物互联网智能科技 绵阳真晨互联网科技有限公司 互联网科技股 平安科技 互联网 青岛互联网科技公司 互联网科技作文 融势互联网科技 贵州叶脉互联网科技有限公司所属行业 每天都有哪些好的互联网科技 互联网科技包装股份有限公司上市 神州科技互联网有限公司 中国主要互联网科技公司
0