栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言实现扫雷游戏

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言实现扫雷游戏

目录

一、函数声明部分 

二、函数定义部分

1、菜单函数以及主函数定义

2、游戏实现函数

 3、布置地雷

4、游戏规则设定

三、总结


一、函数声明部分 

下面就是扫雷中使用到的所有函数,为了省事我把所有的代码都放在一个C文件中实现

宏定义中设置了游戏的界面布局,以及设置地雷的个数(这里默认的是10个地雷),界面是一个9*9的方格布局

如图:

代码如下:

#include
#include
#include

#define ROW 9
#define COL 9

#define ROWS    ROW + 2
#define COLS    COL + 2

#define EASY_COUNT 10//地雷个数


void play();//游戏实现
int menu();//菜单界面
int mine_count(char mine[ROWS][COLS],int x,int y); //计算周围地雷个数
void InitBoard(char board[ROWS][COLS],int rows,int cols,char set);//初始化界面布局
void DisplayBoard(char board[ROWS][COLS],int rows,int cols);//打印布局
void SetMine(char board[ROWS][COLS],int row,int col);//布置地雷
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);//扫雷

二、函数定义部分

1、菜单函数以及主函数定义

这里是进入游戏的一个简单的选择菜单,通过选择(1/2)来执行相应的操作,调用该游戏实现函数以及推出游戏和错误判断

代码如下:

int menu()
{
    int input = 0,choose = 0;
    printf("1、 扫雷游戏     2、退出n");
    printf("-----------------------n");
    printf("请选择(1/2)>:");
    do
    {
        scanf("%d",&input);
        switch(input)
        {
            case 1:
                while(1)
                {
                    printf("n");
                    play();
                    printf("1、继续     2、退出n");
                    printf("请输入你的选择:");
loop:
                    scanf("%d",&choose);
                    switch(choose)
                    {
                        case 1:
                            break;
                        case 2:
                            return 0;
                        default:
                            printf("请输入正确的选项:");
                            goto loop;
                    }
                }
            case 2:
                printf("退出成功!n");
                return 0;
            default:
                printf("请输入正确的选项:");
                break;
        }
    } while(input);

    return 0;
}

int main()
{
    menu();
    return 0;
} 

2、游戏实现函数

首先先初始化游戏布局并打印出来,之后进行布置地雷以及计算周围八个方格中地雷的数量,最后开始扫雷

如图: 

代码如下:

void play()
{
    srand((unsigned int)time(NULL));
    char mine[ROWS][COLS] = {0};//布置地雷
    char show[ROWS][COLS] = {0};//排查地雷

    InitBoard(mine,ROWS,COLS,'0');
    InitBoard(show,ROWS,COLS,'*');
    DisplayBoard(show,ROW,COL);

    //DisplayBoard(mine,ROW,COL);//显示地雷
    SetMine(mine,ROW,COL);
    FindMine(mine,show,ROW,COL);
}

 3、布置地雷

这里使用了rand()函数在该方格没有地雷的情况下随机布置相应的地雷,有地雷的方格值为1,没有地雷的方格值为0,布置完地雷后再使用打印函数将界面布局打印出来

扩展:

在C语言中,我们一般使用 头文件中的 rand() 函数来生成随机数

int rand (void);        //void 表示不需要传递参数。

但是多次运行上面的代码,你会发现每次产生的随机数都一样

实际上,rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”,我们可以通过 srand() 函数来重新“播种”,这样种子就会发生改变。

void srand (unsigned int seed);

它需要一个 unsigned int 类型的参数。在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同。

使用 头文件中的 time() 函数即可得到当前的时间(精确到秒),就像下面这样:

srand((unsigned)time(NULL));

代码如下:

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

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

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

4、游戏规则设定

用函数实现计算周围八个方格中地雷的数量就可以进行简单的排雷操作了,输入坐标进行排雷,直到排完所有雷则通过游戏,如果输入的方格坐标为之前布置的雷坐标那么恭喜你踩到雷了游戏结束,你可以选择继续玩或者直接退出。

如图:

 

代码如下:

int mine_count(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';

}

void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
    int x = 0,y = 0,win = 0;

    while(win < row * col - EASY_COUNT)
    {
        printf("请输入排雷坐标:>");
loop:
        scanf("%d%d",&x,&y);
        if(x >= 1 && x <= row && y >= 1 && y <= col)
        {
            if(mine[x][y] == '1')
            {
                printf("你已踩到雷,游戏结束n");
                DisplayBoard(mine,ROW,COL);
                break;
            }
            else
            {
                int count = mine_count(mine,x,y);
                show[x][y] = count + '0';
                DisplayBoard(show,ROW,COL);
                win++;
            }
        }
        else
        {
            printf("请输入正确的坐标:");
            goto loop;
        }
    }
    if(win == row * col - EASY_COUNT)
    {
        printf("通关成功!n");
    }
}

 

三、总结

以上就是个人分享的关于扫雷游戏所有的代码,用C语言简单的实现了扫雷这个小游戏,虽然在界面和功能的实现上都很粗糙,但是对于一个初学C语言小白的我来讲也是一个小小的进步,也希望自己继续加油之后写出更优秀的代码


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号