C语言 扫雷游戏 可以递归展开空白处

扫雷展开空白的实现 关于扫雷空白展开的实现 阅读详情

扫雷游戏 可以递归展开空白处

main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "game.h"
void game(void)
{
    char game_board[ROWS][COLS] = {'*'};//定义玩家显示的面板
    int mine_board[ROWS][COLS] = {0};     //定义雷的信息的面板
    Init_board(game_board,ROWS, COLS);   //初始化扫雷面板
    print_board(game_board,ROWS,COLS);
    Init_mine_board(mine_board,ROWS,COLS);//初始化雷的信息,把N个雷随机分配到面板里
    game_start(game_board,mine_board);//游戏开始


}

void menu()
{
    int input;
    do
    {
        printf("****************************************\n");
        printf("*******1.游戏开始     0.退出游戏********\n");
        printf("****************************************\n");
        printf("****************************************\n");
        printf("请选择:>");
        scanf("%d",&input);
        switch(input)
        {
        case 1:
            {
                game();
                break;
            }
        case 0:
            {
                printf("退出游戏\n");
                break;
            }
        default:
            {
                printf("输入错误 ,请重新输入!\n");
                break;
            }
        }
    }while(input);
}

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

game.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "game.h"
int count_null = 0;
int cal_mine_num(char(*a)[COLS],int(*b)[COLS],int x, int y)//计算出选定坐标周围有多少个雷
{
    int count = 0;
    int i = 0;
    int j = 0;
    for(i = x-1; i<=x+1; i++)
    {
        for(j = y -1; j<= y+1;j++)
        {
            if(b[i][j] == 1)
            {
                count++;
            }

        }
    }
    return count;
}

void recursion_show_null_block(char(*a)[COLS],int(*b)[COLS],int x, int y)//递归找到空白区域,并给玩家的二维数组赋' '
{
    int sum = 0;
    sum = cal_mine_num(a,b,x,y);
    if(sum == 0&&x>0&&y>0&&x<ROWS-1&&y<COLS-1)//如果sum为零,说明周围
    {
        a[x][y] = ' ';//如果输入的坐标值为0,且坐标位置在9*9的范围内
        count_null++;//翻开的个数+1
        int i = 0;
        int j = 0;
        for(i = x-1; i<=x+1&&x>0&&x<10; i++)
        {
            for(j = y -1; j<= y+1&&y>0&&y<10;j++)//坐标周围8个位置,再继续找(递归)
            {
                if(a[i][j] == '*')
                {
                    recursion_show_null_block(a,b,i,j);
                }
            }
        }
    }
    else if(x>0&&y>0&&x<ROWS-1&&y<COLS-1)//如果坐标周围有雷,则显示雷的个数
    {
        a[x][y] = sum + 48;//整数+48,可以得到它的ASCII码
        count_null++;//翻开的个数+1
    }
}

void Init_board(char(*p)[COLS],int row, int col)//用'*'初始化面板二维数组
{
    int i = 0;
    for(i = 0; i < row; i++)
    {
        int j = 0;
        for(j = 0;j < col; j++)
        {
            p[i][j] = '*';
        }
    }
}
void print_board(char(*p)[COLS],int row, int col)//在11*11的二维数组中,打印出9*9的面板
{
    int i = 0;
    for(i = 0;i<10;i++)
    {
        printf("%d ",i);
    }
    printf("\n");
    printf("\n");
    //int i = 0;
    int j = 0;
    for(i = 1; i < row-1; i++)
    {
        printf("%d ",i);
        for(j = 1; j < col-1; j++)
        {
            printf("%c ",p[i][j]);
        }
        printf("\n");
    }
}

void Init_mine_board(int(*p)[COLS], int row,int col)//初始化雷,把定义的雷的个数放进数组中,用1表示
{
    int i = 0;
    srand((unsigned)time(NULL));
    for(i=0;i<mine_num;i++)
    {
        while(1)
        {
            int a = rand()%9+1;
            int b = rand()%9+1;
            if(p[a][b] == 0)
            {
                p[a][b] = 1;
                break;
            }

        }

    }

}

void game_start(char(*a)[COLS],int(*b)[COLS])
{
    int victory = 0;
    do
    {
        int x = 0;
        int y = 0;
        printf("请输入要排雷的坐标x,y:>");
        scanf("%d%d",&x,&y);
        if(b[x][y] == 1)
        {
            printf("你踩到地雷了,游戏结束!!!\n");
            return;
        }
        else
        {
            recursion_show_null_block(a,b,x,y);
            print_board(a,ROWS,COLS);
            printf("已经排出空格%d\n",count_null);
            if(count_null == 71)
            {
                victory = 1;
                printf("恭喜你,你胜利了!!\n");
            }

        }
    }while(!victory);

}

game.h

#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define mine_num 10
void Init_board(char(*p)[COLS],int row, int col);
void Init_mine_board(int(*p)[COLS], int row,int col);
void game_start(char(*a)[COLS],int(*b)[COLS]);
void print_board(char(*p)[COLS],int row, int col);


别再为域名备案发愁了!微信小程序后端调用,试试这个‘官方捷径’——云托管 本文介绍了微信小程序后端部署的新思路——利用微信云托管服务绕过域名备案难题。通过详细的环境准备、数据库配置、服务部署和小程序端调用方案,帮助开发者快速实现小程序与后端服务的无缝对接,大幅缩短上线周期并降低运维成本。 阅读详情

相关推荐

VSCode+PlatformIO新建工程卡成狗?3步提速大法实测有效(附镜像源配置)

针对VSCode+PlatformIO新建工程时因依赖下载缓慢导致的加载慢问题,本文提供了三步核心提速方案。通过配置Python环境变量、修改PlatformIO插件设置以使用国内镜像源,并优化pip配置文件,实测可大幅缩短工程创建时间,有效解决创建工程卡顿的痛点。

delta的博客 708

【c语言】:扫雷游戏(超详细教程)

扫雷游戏作为一个经典游戏想必大家都玩过吧,本篇文章将通过c语言来实现这个游戏定义游戏函数:这里定义两个数组,一个数组用来布置地雷另一个数组用来给玩家展示//棋盘初始化//打印棋盘//布置地雷//找地雷。

gcvgh的博客 3413

深度学习环境搭建以及DeepLabCut安装过程

文章目录 一、查询电脑硬件 安装GeForce驱动程序 二、环境搭建与软件安装 1.安装CUDA运算平台软件 2.安装cuDNN支持包 3.配置环境变量 三、 DeepLabCut环境配置 1.安装Anaconda 2.创建容器环境 3.激活容器环境 4.安装TensorFlow 5.验证TensorFlow是否安装成功 6...

m0_51136557的博客 3155

用C语言实现扫雷游戏

数组和函数实践

2301_81154483的博客 1061

农业生产AI决策系统架构设计解密:数据层-模型层-应用层核心逻辑

想象一下,在一个炎热的夏日,传统农田里的农民伯伯正满头大汗地检查每一株玉米是否缺水;而几公里外的智慧农场里,一位年轻农民正在空调房里滑动手机屏幕,看着AI系统自动生成的灌溉计划——这就是农业生产AI决策系统带来的改变。本文的目的,就是要揭开这个"智能农业大脑"的面纱,详细讲解它的"身体构造"(架构设计)和"工作原理"(核心逻辑)。我们将聚焦系统最核心的三个部分:数据层(收集农田信息)、模型层(分析信息并思考决策)和应用层(将决策告诉农民)。

AI智能探索者的博客 1325

C#串口通信革命:RJCP.DLL.SerialPortStream实战全解析

本文介绍了如何通过RJCP.DLL.SerialPortStream库实现高性能串口通信解决方案。相比.NET自带的SerialPort类,该库提供了完全的异步非阻塞IO、动态缓冲区控制和多线程事件驱动等优势,特别适合工业自动化和物联网场景。文章详细讲解了环境搭建、核心功能对比,并通过代码示例展示了端口配置、异步通信管道搭建等关键技术。最后以Modbus RTU协议为例,演示了高级协议封装方法,为开发者提供了完整的工业级串口通信实现方案。

墨夶的博客 1870

【C语言学习】C语言实习游戏——扫雷游戏

通过C语言来编辑程序,实现简易9*9扫雷游戏功能。

joes_ju的博客 2069

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error 解决方式: 1.qt程序不要放在共享目录下编译,直接拷贝到ubuntu系统中编译 2.修改/home/xt/Qt5.12.1/5.12.1/android_armv7/mkspecs/android-clang中 #QMAKE_LINK = QMAKECXXQMAKE_CXX QMAKEC​XXQMAKE_CFLAGS -Wl,–exclude-libs,libgc

xt18971492243的博客 735

C语言实现扫雷游戏

C语言实现扫雷游戏

m0_47179741的博客 2658

PCL 点云八叉树射线相交

PCL 点云八叉树射线相交

dayuhaitang1的博客 850

基于STM32设计的数字电子秤

当前项目是采用采用STM32+称重模块+OLED实现了简单的电子秤项目,称重模块上采用24位的ADC芯片,精度较高。实现了称重,校准、去皮等功能。

1万+

【C语言】 扫雷游戏(保姆级的实现过程)

扫雷游戏,想必大家都有玩过吧。没完过的话也可以试着玩一玩,这样对写扫雷游戏这个小游戏的化是会有一个很好的思路的。那么本片博客就来介绍如何实现扫雷游戏的具体步骤。扫雷游戏链接????扫雷游戏网页版 - Minesweeper ​

"謓泽"正在路上朝着"攻城狮"方向"前进四"! 2万+

你知道几种数字地与模拟地连接方式及优缺点?

频率选择性:磁珠的阻抗特性随频率变化,只对某个频点的噪声有显著抑制作用,对于频率不确定或无法预知的情况,可能不是最佳选择。在实际应用中,选择合适的连接方式需要根据具体的电路频率、信号类型、设计要求等因素综合考虑,以达到最佳的电磁兼容效果.高频信号干扰:在高频电路中,单点接地可能导致信号回流路径过长,增加地线电感,从而引入高频噪声。限制噪声电流:0欧姆电阻相当于一个非常窄的电流通路,能够有效地限制环路电流,使噪声得到抑制。抑制高频信号:电感对高频信号有较大的阻碍作用,可以有效抑制高频噪声。

linkking27的博客 800

扫雷小游戏(c语言)

扫雷 一、游戏简介 游戏简介: 《扫雷》是一款益智类解谜游戏,游戏目标是点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。同时能锻炼人们思维能力,以及对鼠标左右键使用的益智类小游戏。 游戏规则: 游戏规则为:在1010或是2015的方阵中随机埋入数量不等的“地雷”,并将全部格子都做隐藏处理。 使用鼠标左键对格子进行“点击”,使用鼠标右键对格子进行“标记”。 当点击到“地雷”时,游戏失败。 当点击到的格子周围8格存在地雷时,将会在这个格子上显示8格之内存在的地雷数量。 当点击到的格子周围

iwanttostudyc的博客 5248

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

扫雷小游戏

扫雷小游戏~~

jienanshan的博客 3045

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

扫雷(含递归展开空白)

目录 前言 代码总览 代码剖析 总结 前言 搭嘎好,今天写个小扫雷,和上次三子棋采用的模式大致相同,采用分文件的方式,建议食用上一篇后再食用这一篇,上次重复的部分内容会简略带过,今天话不多说直接进入正题。 代码总览 test.c文件 #define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void menu() { printf("************************\n"); printf("****.

m0_59793804的博客 1197

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

扫雷游戏实现

扫雷游戏是一个家喻户晓的小游戏,此次文章则着重实现扫雷游戏的一些基本功能,若读者有其余想法可在该基础上进行叠加。本文章采用边分析效果边实现的代码的方式进行阐述。

qq_58177040的博客 1148

C语言实现扫雷游戏:内存优化与递归算法实战

数组作为基础数据结构,在游戏开发中常用于表示网格化场景。通过位域(bit-field)技术优化内存使用,每个扫雷格子仅需1字节存储多重状态,相比传统布尔变量节省75%空间。递归算法实现空白区域展开时,深度优先搜索(DFS)会产生直观的连锁反应效果,这种算法思想也广泛应用于路径寻找等场景。在嵌入式开发等资源受限环境中,C语言精准的内存控制能力尤为重要,例如使用动态内存分配避免栈溢出。通过扫雷这类经典项目,开发者能深入理解二维数组、随机数生成、边界检查等编程核心概念,这些技能在操作系统开发、物联网设备编程等领域

快马扬鞭须努力! 441

实作 C 语言控制台扫雷:双棋盘架构与模块化编程

实践模块化编程:深刻体会 .h文件作为接口声明的重要性。掌握了“以空间换取逻辑简化”的设计策略:双棋盘和边界缓冲是本次实作的核心技巧。理解了小型游戏的状态机模型:通过 while循环和条件变量 (win) 控制游戏进程。引发了对更复杂算法的兴趣:为实现“空白展开”,自然引入了对递归 或 广度优先搜索 (BFS) 算法的学习需求。

Ranyang_06的博客 675

用C语言实现一款简易的扫雷游戏

【代码】用C语言实现一款简易的扫雷游戏。

weixin_65589140的博客 276

Windows C盘爆满终极解决方案:用mklink /J迁移用户文件夹

Windows系统中,C盘空间不足是因系统目录与用户数据混存导致的普遍性存储瓶颈。其本质源于NTFS文件系统的路径绑定机制与应用依赖逻辑——程序通过固定路径访问数据,而非物理位置。目录联接(Junction)作为Windows原生支持的内核级重映射技术,通过mklink /J命令实现跨卷路径透明转发,既保持原有路径兼容性,又规避注册表修改与权限风险。相比手动移动、符号链接或第三方工具,它具备无需管理员权限、全版本兼容、零应用适配成本等工程优势,特别适用于Documents、Downloads等标准用户文件夹

weixin_30247781的博客 408

C语言小游戏——扫雷

今天又学习到一个有趣的东西,用C语言实现扫雷游戏,下面就让小编带领大家一步一步入手吧。

hffh123的博客 2538

C语言——扫雷游戏实现(超详解)

扫雷游戏想必大家应该都玩过吧,这个游戏的目标呢就是在一个 9x9 的棋盘上找出所有没有地雷的格子,而不踩到地雷。当然这个9×9只是一个初级玩法,棋盘大小和雷的数量是可以随便设置的,有那种电脑满屏的模式,但是我没去尝试过,一般玩的都是初级9×9的模式,而本篇文章也主要说的是9×9扫雷游戏的实现。扫雷游戏网页版 - Minesweeper。

2301_80004913的博客 8549

【C语言】实现扫雷游戏(初阶+进阶,有代码和图文讲解)

扫雷游戏整体的代码架构和我上一篇写的n子棋的实现差不多,都是分为game.h文件,game.c文件和test.c文件来写的。这一篇主要讲在C语言中扫雷游戏的设计和扫雷进阶的实现,不过多阐述语法知识。扫雷游戏是一种单人益智游戏,玩家需要在一个方格矩阵中找出所有的地雷,同时避免触雷。游戏开始时,玩家需要选择难度级别,不同难度级别的方格矩阵大小和地雷数量不同。游戏中,玩家可以通过点击方格来揭开它们,如果揭开的方格上没有地雷,则会显示周围八个方格中地雷的数量,如果揭开的方格上有地雷,则游戏结束。

weixin_73276255的博客 3128

【C语言】 -- 扫雷(代码+详解)

详解版扫雷,全是干货,很详细。

Ljy_cx_21_4_3的博客 9978

C语言基础:扫雷游戏的C语言实现(超详图解+源码)

友友们好,今天和大家一起做一个简单的——扫雷小游戏。如下:扫雷的规则很简单。盘面上有许多方格,方格中随机分布着一些雷。你的目标是避开雷,打开其他所有格子。一个非雷格中的数字表示其相邻8格中的雷数,你可以利用这个信息推导出安全格和雷的位置。打开所有安全格将被判定为胜利,打开雷将被判定为失败。

linsc_05的博客 1万+
上一篇: 结构体,位段,枚举,联合体 内存分布浅解
下一篇: 动态内存管理 malloc calloc realloc
any_ways
博客等级 码龄5年 94粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值