首页 热点 业界 科技快讯 数码 电子消费 通信 前沿动态 电商

C语言实现扫雷代码

2022-06-07 13:01:32 来源 : 软件开发网

本文实例为大家分享了C语言实现扫雷的具体代码,供大家参考,具体内容如下

前言

扫雷实现的基本规划:

1、玩家可以自由选择进入和退出游戏2、玩家通过输入坐标来排雷3、排查雷给出提示4、玩家可以任意标记雷区5、排雷同时展开非雷区

下面为效果图:

一、主函数(test.c):

通过do while嵌套switch对游戏菜单进行控制:

玩游戏输入1:进入case1开始游戏。

输入2:进入case2退出游戏 。

输入错误:进入default,进入下一次循环重新输入。

菜单给出标记操作提示。

#include "game.h"void menu()//游戏菜单{    printf("**********************************\n");    printf("*******      扫雷游戏     ********\n");    printf("*******       1.play      ********\n");    printf("*******       2.exit      ********\n");    printf("*******tip1:坐标输入 0 0  ********\n");    printf("*******    进行标记操作   ********\n");    printf("*******tip2:坐标输入 0 1  ********\n");    printf("*******    取消标记操作   ********\n");    printf("**********************************\n");}void game(){    //定义两个棋盘,mine里面雷图,"*"为雷," "为非雷    //show里面-为未排雷区域,数字为周围有几颗雷    //空格区域表示安全区域,周围没有雷    char mine[ROWS][COLS] = { 0 };    char show[ROWS][COLS] = { 0 };    //初始化棋盘    init_board(mine, ROWS, COLS, " ");    init_board(show, ROWS, COLS, "-");    //布置雷    set_mine(mine, ROW, COL);    Display_board(show, ROW, COL);//打印棋盘    //排查雷    find_mine(mine, show, ROW, COL);}int main(){    int input = 0;    srand((unsigned int)time(NULL));    do    {        menu();        printf("请选择:>");        scanf("%d", &input);        switch (input)        {        case 1:            printf("开始游戏\n");            game();            break;        case 2:            printf("游戏结束\n");            break;        default:            printf("输入错误,请重新输入\n");        }    } while (input != 2);    return 0;}二、头文件及定义(game.h):

行数、列数、雷数可随时更改

#include #include #include #define ROW 9 //定义行数为9#define COL 9 //定义列数为9#define EASY_COUNT 10 //简单定义一下雷数#define ROWS ROW+2#define COLS COL+2//初始化棋盘void init_board(char arr[ROWS][COLS], int rows, int cols, char set);//打印棋盘void Display_board(char arr[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);//标记坐标void sign_show(char show[ROWS][COLS], int row, int col);//删除标记坐标void del_sign_show(char show[ROWS][COLS], int row, int col);三、game.c(游戏代码实现全过程):

基本逻辑就是两个棋盘:

1、mine棋盘为设雷棋盘,用来设置雷。2、show棋盘给玩家看,打印信息给玩家。

#include "game.h"//初始化棋盘void init_board(char arr[ROWS][COLS], int rows, int cols,char set){    int i = 0;    int j = 0;    for (i = 0; i < rows; i++)    {        for (j = 0; j < cols; j++)        {            arr[i][j] = set;        }    }}//打印棋盘void Display_board(char arr[ROWS][COLS], int row, int col){    int i = 0;    int j = 0;    for (i = 0; i <= col; i++)    {        printf(" %d ", i);        if (i < col)        {            printf("|");        }    }    printf("\n");    for (i = 0; i <= col; i++)    {        printf("---");        if (i < col)        {            printf("|");        }    }    printf("\n");    for (i = 1; i <= row; i++)    {        printf(" %d ", i);        printf("|");        for (j = 1; j <= col; j++)        {            printf(" %c ", arr[i][j]);            if (j < col)            {                printf("|");            }        }        printf("\n");        if (i < row)        {            for (j = 0; j <= col; j++)            {                printf("---");                if (j < col)                {                    printf("|");                }            }        }        printf("\n");    }    printf("=======================================\n");}//布置雷void set_mine(char mine[ROWS][COLS], int row, int col){    int count = EASY_COUNT;    int x = 0;    int y = 0;    while (count)    {        x = rand() % row + 1;        y = rand() % col + 1;        if (mine[x][y] == " ")        {            mine[x][y] = "*";            count--;        }    }}//排查雷static int get_mine_count(char mine[ROWS][COLS], int x, int y)//查输入坐标周围雷数{    int i = 0;    int j = 0;    int count = 0;    for (i = x - 1; i <= x + 1; i++)    {        for (j = y - 1; j <= y + 1; j++)        {            if (mine[i][j] == "*")            {                count++;            }        }    }    return count;}void spread_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y)//展开非雷区{    int i = 0;    int j = 0;    for (i = x - 1; i <= x + 1; i++)    {        for (j = y - 1; j <= y + 1; j++)        {            if (i >= 1 && i <= ROW && j >= 1 && j <= COL)            {                if (get_mine_count(mine, i, j) == 0 && show[i][j] == "-")                {                    show[i][j] = " ";                    spread_mine(mine, show, i, j);                }                else if(get_mine_count(mine, i, j) != 0 && show[i][j] == "-")                {                    int count = get_mine_count(mine, i, j);                    show[i][j] = count + "0";                }            }        }    }}int is_win(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){    int i = 0;    int j = 0;    int count = 0;    for (i = 1; i <= row; i++)    {        for (j = 1; j <= col; j++)        {            if (mine[i][j] != "*" && show[i][j] == "-")            {                return 0;            }        }    }    return 1;}void sign_show(char show[ROWS][COLS], int row, int col)//标记坐标{    int x = 0;    int y = 0;    printf("请选择需要标记的坐标:>");    while (1)    {        scanf("%d %d", &x, &y);        if (show[x][y] == "-")        {            show[x][y] = "#";            break;        }        else        {            printf("输入错误,请重新输入");        }    }}void del_sign_show(char show[ROWS][COLS], int row, int col)//删除标记坐标{    int x = 0;    int y = 0;    printf("请选择需要删除标记的坐标:>");    while (1)    {        scanf("%d %d", &x, &y);        if (show[x][y] == "#")        {            show[x][y] = "-";            break;        }        else        {            printf("输入错误,请重新输入");        }    }}void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col){    int x = 0;    int y = 0;    while (1)    {        printf("请输入排雷的坐标:>");        scanf("%d %d", &x, &y);        if (show[x][y] != "-")        {            printf("此坐标已扫过,请重新输入\n");            continue;        }        else if (x >= 1 && x <= row && y >= 1 && y <= col)        {            if (mine[x][y] == "*")            {                printf("很遗憾,你被炸死了\n");                Display_board(mine, ROW, COL);                break;            }            else            {                int count = get_mine_count(mine, x, y);                if (count + "0" == "0")                {                    show[x][y] = " ";                    spread_mine(mine, show, x, y);//展开非雷区                }                else                {                    show[x][y] = count + "0";                }                Display_board(show, ROW, COL);            }        }        else if (x == 0 && y == 0)//输入坐标为两个0时进行标记操作        {            sign_show(show, row, col);//标记坐标            Display_board(show, ROW, COL);        }        else if (x == 0 && y == 1)//输入坐标为两个0时进行标记操作        {            del_sign_show(show, row, col);//删除标记            Display_board(show, ROW, COL);        }        else        {            printf("输入坐标超出雷区范围,请重新输入\n");        }        if (is_win(mine,show,row,col)==1)        {            printf("恭喜你,扫雷成功\n");            Display_board(mine, ROW, COL);        }    }}总结

以上就是自写C语言扫雷的代码全部内容了:

标签: 开始游戏 退出游戏

相关文章

最近更新
观焦点:超萌相机 2023-03-01 12:29:37
海南百货网 2023-03-01 12:13:44
焦点热讯:宜点充 2023-02-28 10:10:16
天天关注:小铺CEO 2023-02-28 10:07:13
【世界聚看点】KaFit 2023-02-28 09:31:37
葱天下 2023-02-28 09:17:03
渔界竞钓 2023-02-28 08:15:29
焦点快看:鲸奇视频 2023-02-28 06:30:37
环球热议:萝小逗 2023-02-27 23:25:49
简讯:小码公交 2023-02-27 23:16:12
彼岸花 2023-02-27 22:32:52
时时夺宝 2023-02-27 21:37:50
天天动态:袜之源 2023-02-27 21:29:50
天天资讯:AI空气 2023-02-27 20:19:46
世界时讯:绘读 2023-02-27 20:19:41
看点:一元得购 2023-02-27 19:26:28