用c语言实现扫雷小游戏。

2023-11-08

相信小伙伴在学习c语言的时候想做一些小趣事,下面就是用c语言来实现一个扫雷小游戏,不过是简单的实现扫雷(只是通过数组的方式来实现),适合新手学习。

我用的是vs敲的这个代码,大家可以用vs运行(可能有些小地方不支持其他编译器,不过自己可以修改)。

1.创建一个sao.c的文件,用来放main()函数,也是程序的入口,sao.c文件中的代码如下:

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

void menu()
{
    printf("********************************\n");
    printf("******1.玩游戏  0.退出游戏******\n");
    printf("********************************\n");
}

void game()
{
    //1.布置好雷区
    char mine[ROWS][COLS] = { 0 };

    //2.排查雷的信息
    char show[ROWS][COLS] = { 0 };

    //初始化
    initboard(mine, ROWS, COLS, '0');
    initboard(show, ROWS, COLS, '*');

    //打印出棋盘
    //displayboard(mine, ROW, COL);
    displayboard(show, ROW, COL);

    //布置雷区
    setmine(mine, ROW, COL);
    //displayboard(mine,ROW,COL);

    //扫雷
    findmine(mine, show, ROW, COL);
}
void test()
{
    printf("扫雷游戏\n");
    srand((unsigned int)time(NULL));
    int input = 0;
    do{
        menu();
        printf("请选择:");
        scanf_s("%d", &input);
        switch (input) {
        case 1:
            game();
            break;
        case 0:
            break;
        default:
            printf("输入错误!\n");
            break;
        }
    } while(input);
}

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

2.第二个文件名为:sao2.c ,这个文件中主要是放一些函数的实现,sao.2c中的代码为:

#include"sao.h"

void initboard(char board[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++)
        {
            board[i][j] = set;
        }
    }
}

void displayboard(char board[ROWS][COLS], int row, int col)
{
    int i = 0;
    int j = 0;
    printf("   ");
    for (i = 1; 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");
    }
}

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

int get_mine_count(char mine[ROWS][COLS], int x, int y)
{
    return
        mine[x - 1][y] +
        mine[x + 1][y] +
        mine[x][y + 1] +
        mine[x][y - 1] +
        mine[x - 1][y - 1] +
        mine[x - 1][y + 1] +
        mine[x + 1][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;
    int y = 0;
    while (1)
    {
        printf("请输入你排查的坐标:");
        scanf_s("%d%d", &x, &y);
        if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
        {
            //坐标合法
            if (mine[x][y] == '1')
            {
                printf("很遗憾!你被炸死了!\n");
                displayboard(mine,row,col);
                break;
            }
            else
            {
                int count = get_mine_count(mine, x, y);
                show[x][y] = count + '0';
                displayboard(show, row, col);
            }
        }
        else {
            printf("输入错误!\n");
        }
    }
}

3.第三个文件为:sao.h的头文件,里面主要是放一些函数的申明和宏,具体代码如下:

#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#include<stdio.h>
#define EASY_MINE 10
#include<time.h>

//声明
void initboard(char board[ROWS][COLS], int rows, int cols,char set);
//声明
void displayboard(char board[ROWS][COLS], int row, int col);
//布置雷区函数的声明
void setmine(char board[ROWS][COLS], int row, int col);
//扫雷声明
void  findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

4.上面代码对大神来说不值一提,对学习c阶段的小伙伴来说可以看看,没有什么难度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用c语言实现扫雷小游戏。 的相关文章

  • 使用python批量修改文件名

    使用python对文件名进行批量修改 使用split方法对原文件名进行切分 选择需要的部分进行保留做为新的文件名 也可添加字段 函数说明 split 函数 语法 str split str num string count str n 参数
  • 十六进制串口发送

    字符串转化为十六进制 让串口发送数据 int hexdata lowhexdata unsigned short int hexdatalen 0 unsigned char hexdatalenH8 hexdatalenL8 int le
  • Math类的常用方法

    在本篇文章种 我使用Type就意味着这个是类型的可变的 可以是int 也可以是double long float 1 取绝对值Math abs Type number 返回值是你传入的类型 2 向上取整Math ceil double nu
  • Element Plus 全局修改组件默认属性

    main js 这里已修改ElSelect为示例 import ElementPlus ElSelect from element plus ElSelect props clearable type Boolean default tru

随机推荐

  • SpringBoot集成dynamic-datasource实现多数据源自动注入

    springboot在集成dynamic datasource后配置多数据源其实还是很简单的 pom依赖
  • requests.exceptions.SSLError 请求异常,SSL错误,证书认证失败问题解决

    请求异常 SSL错误 证书认证失败解决方法 在爬取一些网站的数据时 有时候会碰到以下报错 requests exceptions SSLError HTTPSConnectionPool host martin audio com port
  • postman工具批量调用接口

    1 先在Collections中建一个文件夹 然后新建一个接口保存 2 然后选择Run 3 准备一个txt文件 增加要循环的参数json数组 4 选择接口 上传文件 配置参数 Iterations为线程数 Delay为推迟多久 然后点下面的
  • 3Dgame_homework8

    3D游戏 作业8 简单粒子制作 要求 相关理论 粒子系统 Unity 粒子系统 拟物控制 制作过程 准备 实现 光 光晕 星光 制作结果与控制 简单粒子制作 要求 按参考资源 Unity3d Particle System 系统的学习 三
  • Discuz! X3.4:若检测到未登录,返回提示登录链接

    if trim G username return lt lt
  • Java8中 Date和LocalDate的相互转换

    一 简述 Date对象表示特定的日期和时间 而LocalDate Java8 对象只包含没有任何时间信息的日期 因此 如果我们只关心日期而不是时间信息 则可以在Date和LocalDate之间进行转换 二 Date转LocalDate 如果
  • linux svn 修改回退,玩转SVN-版本回退

    当我们想放弃对文件的修改 可以使用 SVN revert 命令 svn revert 操作将撤销任何文件或目录里的局部更改 我们对文件 readme 进行修改 查看文件状态 root runoob svn runoob01 trunk sv
  • Python之模块打包

    1 什么是模块打包 模块打包目的是让自己开发的功能能够实现共享 供给他人使用 包管理索引平台 Python Package Index 2 怎么打包 tar gz格式 这个就是标准压缩格式 里面包含了项目元数据和代码 可以使用Python
  • 2021.06.15

    括号生成 力扣 方法 回溯 回溯算法框架 result def backtrack 路径 选择列表 if 满足结束条件 result add 路径 return for 选择 in 选择列表 做选择 backtrack 路径 选择列表 撤销
  • DeBruijin 【HDU - 2894】【欧拉回路】

    题目链接 可以说这题是着实有趣了 题意 我们给出一个K 现在我们想最多的表示从 的数 也就是00 0 11 1 0 1都是K个 譬如说K 3 我们可以用字典序最小的 00010111 按顺序的用二进制表示 000 001 010 101 0
  • github Page博客速度优化+Cloudflare_https两端配置+解决重定向次数过多问题

    网站加速调优 自从加了CDN之后我的博客偶尔会报错 重定向次数过多 症状 XXX XXX XXX 将您重定向的次数过多 尝试清除 Cookie ERR TOO MANY REDIRECTS 可能原因 参考阿里云cdn解决方案https he
  • Spark机器学习实例

    2020 07 09 引言 Learning Spark 过程中只是简单介绍了mllib中的东西 没有一个完整的实践过程 暂时还没有去找有没有专门做这种的书 好像我看 spark in action 是有这部分内容 后续在看 本篇文章就利用
  • BERT:深度双向预训练语言模型

    论文标题 BERT Pre training of Deep Bidirectional Transformers for Language Understanding 论文链接 https arxiv org abs 1810 04805
  • AJAX发送对象参数及Spring 4.3----@GetMapping, @PostMapping, @PutMapping, @DeleteMapping)

    前言 Spring4 3中引进了 RestController GetMapping PostMapping PutMapping DeleteMapping PatchMapping 来帮助简化常用的HTTP方法的映射 并更好地表达被注解
  • CSS flex属性

    flex弹性盒模型 让所有弹性盒模型对象的子元素都有相同的长度 且忽略它们内部的内容 可以做到水平布局 div div div div
  • 随机改变背景颜色

    开发工具与关键技术 VS 2019 JS 作者 唐嘉怡 撰写时间 2022 5 8 注意 要按照步骤一步一步执行下去 设置一个div盒子 给这个盒子一个id名为box 并给这个盒子设置样式 再设置一个随机改变背景颜色的按钮 给他一个id名为
  • 解决element 弹窗屏幕变灰的问题(双层弹窗)(遮罩层问题)

    问题 新增按钮弹窗 新增按钮里需要选择部门 又一个弹窗 此时点第二个弹窗的时候页面会灰 解决 在最后一个弹窗上面加属性 append to body true 就能解决 element 已经说明了问题 嵌套Dialog必须指定该标签 这个属
  • 精讲Flutter官网的第一个例子

    原文链接 前言 学习Flutter你一定会看到官网的第一个例子 中文版 或 英文版 但是作为新手 或许你看的会很费劲 这篇文章的目的是帮助你更好的理解这个例子 最终的效果图 我们先分析一下如何实现上图中的效果 Android开发者 1 准备
  • 【Spring Boot】——集成lombok

    还在编写无聊枯燥又难以维护的POJO吗 洁癖者的春天在哪里 请看Lombok 在过往的Java项目中 充斥着太多不友好的代码 POJO的getter setter toString 异常处理 I O流的关闭操作等等 这些样板代码既没有技术含
  • 用c语言实现扫雷小游戏。

    相信小伙伴在学习c语言的时候想做一些小趣事 下面就是用c语言来实现一个扫雷小游戏 不过是简单的实现扫雷 只是通过数组的方式来实现 适合新手学习 我用的是vs敲的这个代码 大家可以用vs运行 可能有些小地方不支持其他编译器 不过自己可以修改