当前位置: 首页 > news >正文

C语言 扫雷程序设计

目录

1.main函数

2.菜单打印menu函数

3.游戏game函数

4.宏定义

5.界面初始化

6.打印界面

7.设置雷

8.统计排查坐标周围雷的个数

9.排查雷

10.总代码

test.c代码

game.h代码

game.c代码

结语:


一个简单的扫雷游戏,通过宏定义可以修改行列的大小以及雷的数量,通过输入坐标选择要排查的位置。

1.main函数

int main()
{//设置随机数的生成srand((unsigned int)time(NULL));int input = 0;do{printf("扫雷游戏\n");menu();printf("请选择(1/0):>");scanf("%d", &input);switch (input){case 1:printf("开始游戏\n");game();break;case 0:printf("退出游戏\n");default:printf("输入错误\n");}}while (input);return 0;
}

2.菜单打印menu函数

//打印菜单
void menu()
{printf("******************\n");printf("*****  1.play  ***\n");printf("*****  0.exit  ***\n");printf("******************\n");}

3.游戏game函数

void game()
{//布置好雷的信息char mine[ROWS][COLS] = {0};//排查出雷的信息char show[ROWS][COLS] = {0};//初始化数组的内容为指定内容//mine数组在没有布置雷的时候,都是‘0’board_Init(mine,ROWS,COLS,'0');//show数组在没有排查雷的时候都是‘*’board_Init(show,ROWS,COLS,'*');//打印数组//Display_board(mine, ROW, COL);//Display_board(show, ROW, COL);//设置雷Set_mine(mine, ROW, COL);//Display_board(mine, ROW, COL);Display_board(show, ROW, COL);//排查雷Fine_Mine(mine, show, ROW, COL);}

4.宏定义

//设置行和列的大小
#define ROW 9
#define COL 9
//设置雷的数量
#define COUNT 80

5.界面初始化

初始化数组的内容为指定内容

mine数组在没有布置雷的时候,都是‘0‘

show数组在没有排查雷的时候都是‘*’

//数组初始化
void board_Init(char board[ROWS][COLS], int rows, int cols,char x)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = x;}}
}

6.打印界面

//打印数组
void Display_board(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf("-----扫雷游戏-----\n");printf("  ");for (j = 1; j <= col; j++){printf("%d ", j);}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");printf("\n");}

7.设置雷

//设置雷
void Set_mine(char board[ROWS][COLS], int row, int col)
{//定义雷的数量int count = COUNT;//行1-9//列1-9while (count){int x = rand() % row + 1;//在一行中随机生成一个数int y = rand() % col + 1;//在一列中随机生成一个数if (board[x][y] == '0'){board[x][y] = '1';count--;}}}

8.统计排查坐标周围雷的个数

//统计排查坐标周围雷的个数
int get_mine_count(char board[ROWS][COLS], int x, int y)
{return board[x - 1][y - 1] +board[x - 1][y] +board[x - 1][y + 1] +board[x][y + 1] +board[x + 1][y + 1] +board[x + 1][y] +board[x + 1][y - 1] +board[x][y - 1] - 8 * '0';
}

9.排查雷

//排查雷
void Fine_Mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win<row*col-COUNT){printf("请输入要排查的坐标>:");scanf("%d%d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (show[x][y] != 'x'){printf("该坐标已被排查过了,不能重复排查\n");}else{//如果是雷if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");Display_board(mine, ROW, COL);break;}else//如果不是雷{win++;//统计mine数组中x,y坐标周围有几个雷int count = get_mine_count(mine, x, y);show[x][y] = count + '0';//转换成数字字符Display_board(show, ROW, COL);}}}elseprintf("输入坐标非法,请重新输入\n");}if (win == row*col - COUNT){printf("恭喜你,排雷成功\n");Display_board(mine, ROW, COL);}
}

10.总代码

test.c代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#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};//初始化数组的内容为指定内容//mine数组在没有布置雷的时候,都是‘0’board_Init(mine,ROWS,COLS,'0');//show数组在没有排查雷的时候都是‘*’board_Init(show,ROWS,COLS,'*');//打印数组//Display_board(mine, ROW, COL);//Display_board(show, ROW, COL);//设置雷Set_mine(mine, ROW, COL);//Display_board(mine, ROW, COL);Display_board(show, ROW, COL);//排查雷Fine_Mine(mine, show, ROW, COL);}
int main()
{//设置随机数的生成srand((unsigned int)time(NULL));int input = 0;do{printf("扫雷游戏\n");menu();printf("请选择(1/0):>");scanf("%d", &input);switch (input){case 1:printf("开始游戏\n");game();break;case 0:printf("退出游戏\n");default:printf("输入错误\n");}}while (input);return 0;
}

game.h代码

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//设置行和列的大小
#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2//设置雷的数量
#define COUNT 10
//初始化数组
void board_Init(char mine[ROWS][COLS], int rows, int cols, char x);
//打印数组
void Display_board(char board[ROWS][COLS], int row, int col);
//设置雷
void Set_mine(char board[ROWS][COLS], int row, int col);
//排查雷
void Fine_Mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c代码

define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"//数组初始化
void board_Init(char board[ROWS][COLS], int rows, int cols,char x)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = x;}}
}//打印数组
void Display_board(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf("-----扫雷游戏-----\n");printf("  ");for (j = 1; j <= col; j++){printf("%d ", j);}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");printf("\n");}//设置雷
void Set_mine(char board[ROWS][COLS], int row, int col)
{//定义雷的数量int count = COUNT;//行1-9//列1-9while (count){int x = rand() % row + 1;//在一行中随机生成一个数int y = rand() % col + 1;//在一列中随机生成一个数if (board[x][y] == '0'){board[x][y] = '1';count--;}}}//统计排查坐标周围雷的个数
int get_mine_count(char board[ROWS][COLS], int x, int y)
{return board[x - 1][y - 1] +board[x - 1][y] +board[x - 1][y + 1] +board[x][y + 1] +board[x + 1][y + 1] +board[x + 1][y] +board[x + 1][y - 1] +board[x][y - 1] - 8 * '0';
}//排查雷
void Fine_Mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win<row*col-COUNT){printf("请输入要排查的坐标>:");scanf("%d%d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (show[x][y] != 'x'){printf("该坐标已被排查过了,不能重复排查\n");}else{//如果是雷if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");Display_board(mine, ROW, COL);break;}else//如果不是雷{win++;//统计mine数组中x,y坐标周围有几个雷int count = get_mine_count(mine, x, y);show[x][y] = count + '0';//转换成数字字符Display_board(show, ROW, COL);}}}elseprintf("输入坐标非法,请重新输入\n");}if (win == row*col - COUNT){printf("恭喜你,排雷成功\n");Display_board(mine, ROW, COL);}
}

结语:

技术有限可能有些BUG没有发现,可以往里面添点有意思的程序,比如弄个关机程序进去,扫到雷直接关机,那样会很酷吧

相关文章:

C语言 扫雷程序设计

目录 1.main函数 2.菜单打印menu函数 3.游戏game函数 4.宏定义 5.界面初始化 6.打印界面 7.设置雷 8.统计排查坐标周围雷的个数 9.排查雷 10.总代码 test.c代码 game.h代码 game.c代码 结语&#xff1a; 一个简单的扫雷游戏&#xff0c;通过宏定义可以修改行列的…...

CSS语言的文件操作

CSS语言文件操作浅析 CSS&#xff08;层叠样式表&#xff09;是一种用于描述HTML文档表现的样式表语言。它负责设置网页的视觉效果&#xff0c;包括文字、颜色、布局等。然而&#xff0c;CSS不仅仅是用于修饰页面&#xff0c;它在现代开发中的作用正变得愈发重要。在本文中&am…...

前端-计算机网络篇

一.网络分类 1.按照网络的作用范围进行分类 &#xff08;1&#xff09;广域网WAN(Wide Area Network) 广域网的作用范围通常为几十到几千公里,因而有时也称为远程网&#xff08;long haul network&#xff09;。广域网是互联网的核心部分&#xff0c;其任务是长距离运送主机…...

行为分析:LSTM、3D CNN、SlowFast Networks。这三者的优缺点

在行为分析任务中&#xff0c;**LSTM**、**3D CNN** 和 **SlowFast Networks** 是三种常用的深度学习模型。它们各有优缺点&#xff0c;适用于不同的场景和需求。以下是它们的详细对比&#xff1a; --- ### **1. LSTM&#xff08;Long Short-Term Memory&#xff09;** LSTM …...

【HarmonyOS NEXT】鸿蒙应用使用后台任务之长时任务,解决屏幕录制音乐播放等操作不被挂起

【HarmonyOS NEXT】鸿蒙应用使用后台任务之长时任务&#xff0c;解决屏幕录制音乐播放等操作不被挂起 一、前言 1.后台是什么&#xff1f; 了解后台任务和长时任务前&#xff0c;我们需要先明白鸿蒙的后台特性&#xff1a;所谓的后台&#xff0c;指的是设备返回主界面、锁屏、…...

STM32-WWDG/IWDG看门狗

WWDG/IWDG一旦开启不能关闭&#xff0c;可通过选项字节在上电时启动硬件看门狗&#xff0c;看门狗计数只能写入不能读取。看门狗启用时&#xff0c;T6bit必须置1&#xff0c;防止立即重置。 一、原理 独立看门狗-超时复位 窗口看门狗-喂狗&#xff08;重置计数器&#xff0c;…...

基于视觉惯性 SLAM(VSLAM)、相机和 IMU 数据的融合执行 6 自由度位姿跟踪

案例来源&#xff1a;https://spectacularai.github.io/docs/sdk/wrappers/oak.html 适配相机&#xff1a;带IMU的 OAK-D 系列相机 基于视觉惯性 SLAM&#xff08;VSLAM&#xff09;、相机和 IMU 数据的融合执行 6 自由度位姿跟踪 ~~~~~~~&#xff08;分界线&#xff09;~~~~~…...

Matlab仿真径向受压圆盘光弹图像

Matlab仿真径向受压圆盘光弹图像-十步相移法 主要参数 % 定义圆盘参数 R 15; % 圆盘半径&#xff0c;单位&#xff1a;mm h 5; % 圆盘厚度&#xff0c;单位&#xff1a;mm P 300; % 径向受压载荷大小&#xff0c;单位&#xff…...

网络安全抓包

#知识点&#xff1a; 1、抓包技术应用意义 //有些应用或者目标是看不到的&#xff0c;这时候就要进行抓包 2、抓包技术应用对象 //app,小程序 3、抓包技术应用协议 //http&#xff0c;socket 4、抓包技术应用支持 5、封包技术应用意义 总结点&#xff1a;学会不同对象采用…...

WebSocket 测试调试:工具与实践

在前五篇文章中,我们深入探讨了 WebSocket 的基础原理、服务端开发、客户端实现、安全实践和性能优化。今天,让我们把重点放在测试和调试上,看看如何确保 WebSocket 应用的质量和可靠性。我曾在一个实时通讯项目中,通过完善的测试和调试策略,将线上问题的发现时间从小时级缩短到…...

ArmSoM RK3588/RK3576核心板,开发板网络设置

ArmSoM系列产品都搭配了以太网口或WIFI模块&#xff0c;PCIE转以太网模块、 USB转以太网模块等&#xff0c;这样我们的网络需求就不止是上网这么简单了&#xff0c;可以衍生出多种不同的玩法。 1. 网络连接​ 连接互联网或者组成局域网都需要满足一个前提–设备需要获取到ip&a…...

【学Rust开发CAD】1 环境搭建

文章目录 一、搭建C/C编译环境二、安装Rust三、配置 PATH 环境变量四、验证安装结果五、安装编辑工具 一、搭建C/C编译环境 Rust 的编译工具依赖 C 语言的编译工具&#xff0c;这意味着你的电脑上至少已经存在一个 C 语言的编译环境。如果你使用的是 Linux 系统&#xff0c;往…...

数据结构与算法之二叉树: LeetCode 108. 将有序数组转换为二叉搜索树 (Ts版)

将有序数组转换为二叉搜索树 https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/ 描述 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列请你将其转换为一棵 平衡 二叉搜索树 示例 1 输入&#xff1a;nums [-10,-3,0,5,9…...

Java 多线程之@Async

SpringBoot 中使用 Async 使用 Async 注解步骤&#xff1a; 添加 EnableAsync 注解。在主类上或者 某个类上&#xff0c;否则&#xff0c;异步方法不会生效 添加 Async注解。在异步方法上添加此注解。异步方法不能被 static 修饰需要自定义线程池&#xff0c;则可以配置线程池…...

代码随想录day38 动态规划6

题目&#xff1a;322.零钱兑换 279.完全平方数 139.单词拆分 多重背包 背包总结 需要重做&#xff1a;322&#xff0c;139 322. 零钱兑换 思路&#xff1a;零钱&#xff0c;可取多次-》完全背包。 注意&#xff1a; 五部&#xff1a; 1.dp[j]:价值为j的时候&#xff0c;最…...

LabVIEW无标题的模态VI窗口的白框怎么去除?

在LabVIEW中&#xff0c;如果你遇到无标题的模态&#xff08;modal&#xff09;VI窗口显示有一个白框&#xff0c;通常是由于VI界面的一些属性或者控件设置问题导致的。为了去除这个白框&#xff0c;可以尝试以下几种方法&#xff1a; 1. 检查VI窗口属性设置 确保你的VI窗口属…...

iOS - 原子操作

在 Objective-C 运行时中&#xff0c;原子操作主要通过以下几种方式实现&#xff1a; 1. 基本原子操作 // 原子操作的基本实现 #if __has_feature(c_atomic)#define OSAtomicIncrement32(p) __c11_atomic_add((_Atomic(int32_t) *)(p), 1, __ATOMIC_RELAXED) #define …...

Go语言的语法

Go语言入门与实战 引言 在当今的开发环境中&#xff0c;随着互联网的快速发展&#xff0c;程序员们面临着越来越复杂的系统需求。针对这些需求&#xff0c;Go语言&#xff08;又称Golang&#xff09;作为一种新的编程语言应运而生。Go语言由Google开发&#xff0c;它具有简单…...

【MySQL 保姆级教学】用户管理和数据库权限(16)

数据库账户管理是指对数据库用户进行创建、修改和删除等操作&#xff0c;以控制用户对数据库的访问权限。通过账户管理&#xff0c;可以设置用户名、密码、主机地址等信息&#xff0c;确保数据库的安全性和可控性。例如&#xff0c;使用 CREATE USER 创建用户&#xff0c;ALTER…...

什么是 ES6 “模板语法” ?

ES6 提出了“模板语法”的概念。在 ES6 以前&#xff0c;拼接字符串是很麻烦的事情 var name css var career coder! var hobby [coding ,"writing] var finalString my name is name &#xff0c;I work as a career I love hobby[0] and hobby[1]仅仅几…...

C语言文件操作实战:读写YOLOv12模型权重与配置

C语言文件操作实战&#xff1a;读写YOLOv12模型权重与配置 如果你正在用C或C捣鼓YOLOv12模型&#xff0c;尤其是在那些没有现成Python库的嵌入式或高性能计算环境里&#xff0c;那么你很可能需要自己动手&#xff0c;从最底层的文件读写开始&#xff0c;把模型权重和配置“喂”…...

五年磨剑与二十年深耕:5 年与 20 年程序员的差距,远不止代码本身

在信息技术飞速迭代的今天&#xff0c;程序员这一职业始终站在时代前沿。有人说&#xff0c;程序员是吃 “青春饭” 的行业&#xff0c;年轻意味着精力充沛、学习速度快、能熬夜加班&#xff1b;也有人说&#xff0c;真正的技术高手&#xff0c;往往藏在十几年甚至二十余年的行…...

为什么AI时代真正稀缺的不是代码, 而是 Idea. 我因此做了一个“发现+判断”的项目

最近做项目的时候, 我越来越强烈地感觉到一件事: 现在真正卡住很多人的, 可能已经不是“怎么做”, 而是“到底做什么”。 以前做一个产品, 最大门槛通常是执行。 不会写前端, 不会搭后端, 不会部署, 不会把整个闭环跑起来。那个时候, 真正稀缺的是开发能力。 但这两年情况已…...

如何快速掌握Node.js MySQL驱动:纯JavaScript实现的终极指南

如何快速掌握Node.js MySQL驱动&#xff1a;纯JavaScript实现的终极指南 【免费下载链接】mysql A pure node.js JavaScript Client implementing the MySQL protocol. 项目地址: https://gitcode.com/gh_mirrors/my/mysql 前言 在Node.js生态中&#xff0c;数据库连接…...

Android14语法性别API实战:打造多语言个性化应用

1. Android14语法性别API是什么&#xff1f; 你可能已经注意到&#xff0c;有些语言&#xff08;比如法语、西班牙语&#xff09;的词汇会根据使用者的性别发生变化。比如法语中"亲爱的客户"就有"Chre cliente"&#xff08;女性&#xff09;和"Cher c…...

2026年公考备战:呼和浩特这3家培训机构凭何领跑行业口碑榜?

呼和浩特这3家培训机构凭何领跑行业口碑榜&#xff1f;随着2026年公考备战季悄然拉开序幕&#xff0c;呼和浩特众多备考生的目光再次聚焦于如何选择一家靠谱的培训机构。近期&#xff0c;一份基于学员真实反馈、上岸数据及行业教研深度的本土公考机构口碑榜引发关注。榜单显示&…...

FLUX.1-dev实战应用:5个创意场景,让你的设计效率翻倍

FLUX.1-dev实战应用&#xff1a;5个创意场景&#xff0c;让你的设计效率翻倍 你是不是也遇到过这样的困境&#xff1f;脑子里有一个绝妙的创意画面&#xff0c;却苦于找不到合适的素材&#xff0c;或者请设计师制作周期长、成本高。又或者&#xff0c;面对社交媒体日更的压力&…...

语言的边界,与软件的命运萍

1. 引入 在现代 AI 工程中&#xff0c;Hugging Face 的 tokenizers 库已成为分词器的事实标准。不过 Hugging Face 的 tokenizers 是用 Rust 来实现的&#xff0c;官方只提供了 python 和 node 的绑定实现。要实现与 Hugging Face tokenizers 相同的行为&#xff0c;最好的办法…...

很多团队开始用 AI Agent 写代码以后,都会经历一个很像的时刻 | 模型不行!!!

很多团队开始用 AI Agent 写代码以后&#xff0c;都会经历一个很像的时刻。你把任务丢过去&#xff1a;给用户模块加个搜索功能。20 分钟后&#xff0c;Agent 回来交卷。你打开项目一看&#xff1a;功能加了&#xff0c;但测试全红用的是项目里已经废弃的旧语法API 没走团队统一…...

TS初相识

目录 前言&#xff1a; 关于TS 使用TS之前的环境搭配 TS的数据类型 number string null&undefined 根类型 数组类型 元组 函数类型 前言&#xff1a; js的缺点 错误出现的时机靠后 数据类型并不是连续的内存空间 js没有类型检测机制&#xff08;弱类型&#…...