C语言-扫雷游戏的实现
🌈write in front🌈
🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️
📝个人主页:Aileen_0v0🧸—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:Aileen_0v0🧸的C语言学习系列专栏——CSDN博客
🗼我的格言:"没有罗马,那就自己创造罗马~"


目录
1.扫雷游戏的分析和设计👻
1.1扫雷游戏的功能说明💭
1.2游戏的界面▶️编辑
2.扫雷游戏的代码实现🔆
2.1数据结构的分析🙉
编辑
2.2文件结构设计💫
2.3游戏的过程实现,代码块💦
主函数,用户菜单页面代码⏸️:
棋盘打印*️⃣:
给棋盘加坐标:🔢
布置雷💣:
排雷💥:
3.扫雷游戏的完整代码✨
1.扫雷游戏的分析和设计👻
1.1扫雷游戏的功能说明💭
• 使用控制台实现经典的扫雷游戏
1.2游戏的界面▶️


初始界面

排雷界面

排雷失败界面
2.扫雷游戏的代码实现🔆
2.1数据结构的分析🙉




但是如果我们判断边缘的格子位置是否含雷时,
由于周围边界没有东西,导致我们需要判断这个格子是否位于边缘位置,这就会让代码变的复杂~
于是,我们可以通过 在原来9 * 9 的方格的 上下 , 左右位置 放没有雷的空格子(如上面左右两个数组的橙色边界)

根据刚刚的分析,
我们在左边创建一个mine数组 布置好雷的信息,全部初始化成 字符"0" ~
雷 - "1"
非雷 - "0"
在右边创建一个show数组放置 排查处的雷的信息, 最初未排查时,都放 *
没有排查 - "*"
排查 - 数字字符
小细节:之所以都用 字符数组 是因为 只需要定义字符函数, 方便操作~
如果 左边是整形数组,右边是字符数组 就 需要调用两个不同的函数~

在game.c中打印棋盘的时候,我们只打印9*9的~
因为外边的绿色空格只是为了编写变得容易一点,不会越界~~

但是,按照这种方式打印,我们很难知道是第几行第几列,因为没有标识
于是我们,再利用 for 循环打印出 行和列的序号

利用库函数rand 来随机布置雷
要从1到n中随机取一个数的公式是:
rand()%n+1.
解释一下:
1、库函数rand()会返回一个大于0的随机整数;
2、rand()%n,对这个返回的随机整数除以n取余,结果是一个0到n-1的随机整数3、rand()%n+1,将rand()%n的结果加上1,就可得到一个1到n的随机整数;
更通用一点的公式,产生m到n中(n>m)的一个随机数的公式是:
rand()%(n-m+1)+m。



2.2文件结构设计💫

首先,先创建这三个文件.

2.3游戏的过程实现,代码块💦
主函数,用户菜单页面代码⏸️:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>//扫雷页面都实现
void menu()
{printf("*********************************\n");printf("****** 1. play *****\n");printf("****** 0. exit *****\n");printf("*********************************\n");
}int main()
{int input = 0;do{menu();printf("请选择:<");scanf("%d", &input);switch (input){case 1:printf("扫雷\n");break;case 0:printf("退出游戏\n");break;default:printf("选择错误,请重新选择\n");break;}//case 1 和 default 都是非零//里层switch语句走完 就会走while语句} while (input);return 0;//如果while 后面为0,程序就会自动退出游戏//非0 1就打印扫雷 其他值则重新打印菜单让用户选择}
运行效果:
棋盘打印*️⃣:
头文件game.h 的代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#pragma once#define ROW 9
#define COL 9#define ROWS ROW + 2
#define COLS COL + 2// 函数的声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set);//打印棋盘的
void DisplayBoard(char board[ROWS][COLS],int rows, int cols);
源文件game.c 的代码:
#define _CRT_SECURE_NO_WARNINGS#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{int i = 0;for (i = 0; i < rows; i++){int j = 0;for (j = 0; j < cols; j++){board[i][j] = set;}}
}//打印棋盘,就是打印数组
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;for (i = 1; i <= row; i++){int j = 0;for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}
}
源文件 test.c 的代码:
#define _CRT_SECURE_NO_WARNINGS
#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];//"*"InitBoard(mine, ROWS, COLS,'0');InitBoard(show, ROWS, COLS,'*');//棋盘打印DisplayBoard(mine, ROW, COL);DisplayBoard(show, ROW, COL);//布置雷//排查雷}int main()
{int input = 0;do{menu();printf("请选择:<");scanf_s("%d", &input);switch (input){case 1:printf("扫雷\n");game();//游戏代码模块化break;case 0:printf("退出游戏\n");break;default:printf("选择错误,请重新选择\n");break;}//case 1 和 default 都是非零//里层switch语句走完 就会走while语句} while (input);return 0;//如果while 后面为0,程序就会自动退出游戏//非0 1就打印扫雷 其他值则重新打印菜单让用户选择}
打印结果:
给棋盘加坐标:🔢
在原来打印棋盘上加上坐标,进行定位,只需修改game.c部分的代码:
#define _CRT_SECURE_NO_WARNINGS#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{int i = 0;for (i = 0; i < rows; i++){int j = 0;for (j = 0; j < cols; j++){board[i][j] = set;}}
}//打印棋盘,就是打印数组
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;printf("-----------扫雷游戏-----------\n");//打印棋盘序号for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");//打印9*9的棋盘for (i = 1; i <= row; i++){printf("%d ", i);int j = 0;for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}printf("-----------扫雷游戏-----------\n");
}
打印结果:

布置雷💣:
game.h:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>//标准库头文件
#include<time.h>//布置雷
void SetMine(char mine[ROWS][COLS],int row , int col);
//虽然布置雷是在9*9的格子里面布置--->row 和 col
//但是,数组传参还是11*11的格子,即ROWS和COLS
game.c:
//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0')//如果该位置无雷才在这个位置放雷{mine[x][y] = '1';count--;}}}
test.c文件:
//布置雷SetMine(mine, ROW, COL);DisplayBoard(mine, ROW, COL);
打印结果:
排雷💥:
通过观察,ASCII表可知:
字符'0'-->ASCII值:48
字符'1'-->ASCII值:49
字符'2'-->ASCII值:50
字符'3'-->ASCII值:51
依此类推
得出规律:'1' - '0' = 49-48 = 1
'3' - '0' = 51-48 = 3
字符-字符=数字 ----------> 反推: 数字+字符=字符
统计 x y 周围有几个雷 --->
把其周围的字符值'0'和'1'加起来即可
然后减去8个字符'0' 得到数字,去代替 x y 处的 '*'.

game.h:
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
game.c:
//实现GetMineCount数组
static int GetMineCount(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;int y = 0;while (1)//死循环排雷{printf("请输入要排查的坐标:>");scanf("%d %d", &x, &y);//注意:x y 要在有效的排查范围(9*9)之内if (x >= 1 && x <= row && y >= 1 && y <= col){//开始排查是否是雷if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;}else{int count = GetMineCount(mine, x, y);show[x][y] = count + '0';DisplayBoard(show, ROW, COL);//count + 字符'0;变成对应的数字字符放到show数组里}}else{printf("坐标非法,重新输入\n");}}}
test.c:
//排查雷FindMine(mine, show, ROW, COL);
注意:GetMineCount 没有在其它文件中声明是因为,我们只希望它在game.c处悄悄使用它,所以前加static
运行结果:
上面的排雷,未限制排雷次数,即可无限循环下去,这样子的游戏设计显然不合理~
于是,我们可以根据,雷和非雷的数量关系进行排雷循环次数的限制.
game.h:
//布置80个雷
#define EASY_COUNT 80
game.c:
//排查雷
void FindMine(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-EASY_COUNT)//根据雷和非雷的数量关系限制循环次数{printf("请输入要排查的坐标:>");scanf("%d %d", &x, &y);//注意:x y 要在有效的排查范围(9*9)之内if (x >= 1 && x <= row && y >= 1 && y <= col){//开始排查是否是雷if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;}else{int count = GetMineCount(mine, x, y);show[x][y] = count + '0';DisplayBoard(show, ROW, COL);//count + 字符'0;变成对应的数字字符放到show数组里win++;}}else{printf("坐标非法,重新输入\n");}}if (win == row * col - EASY_COUNT){printf("恭喜你,扫雷成功\n");DisplayBoard(mine, ROW, COL);}}
我们可以通过改变雷的个数,然后根据mine的数组打印的结果对照着进行排雷成功的结果输出,检查是否有误.
运行结果:

3.扫雷游戏的完整代码✨
game.h:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>//标准库头文件
#include<time.h>
#pragma once#define ROW 9
#define COL 9#define ROWS ROW + 2
#define COLS COL + 2//布置10个雷
#define EASY_COUNT 10// 函数的声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set);//打印棋盘的
void DisplayBoard(char board[ROWS][COLS],int rows, int cols);
game.c:
#define _CRT_SECURE_NO_WARNINGS#include "game.h"
#include <stdio.h>void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{int i = 0;for (i = 0; i < rows; i++){int j = 0;for (j = 0; j < cols; j++){board[i][j] = set;}}
}//打印棋盘,就是打印数组
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;printf("-----------扫雷游戏-----------\n");//打印棋盘序号for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");//打印9*9的棋盘for (i = 1; i <= row; i++){printf("%d ", i);int j = 0;for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}printf("-----------扫雷游戏-----------\n");
}//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0')//如果该位置无雷才在这个位置放雷{mine[x][y] = '1';count--;}}}//实现GetMineCount数组
static int GetMineCount(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;int y = 0;int win = 0;while (win<row*col-EASY_COUNT)//根据雷和非雷的数量关系限制循环次数{printf("请输入要排查的坐标:>");scanf("%d %d", &x, &y);//注意:x y 要在有效的排查范围(9*9)之内if (x >= 1 && x <= row && y >= 1 && y <= col){//开始排查是否是雷if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;}else{int count = GetMineCount(mine, x, y);show[x][y] = count + '0';DisplayBoard(show, ROW, COL);//count + 字符'0;变成对应的数字字符放到show数组里win++;}}else{printf("坐标非法,重新输入\n");}}if (win == row * col - EASY_COUNT){printf("恭喜你,扫雷成功\n");DisplayBoard(mine, ROW, COL);}}
test.c:
#define _CRT_SECURE_NO_WARNINGS
#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];//"*"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);}int main()
{int input = 0;srand((unsigned int)time(NULL));//强制转换成无符号整型do{menu();printf("请选择:<");scanf_s("%d", &input);switch (input){case 1:printf("扫雷\n");game();//游戏代码模块化break;case 0:printf("退出游戏\n");break;default:printf("选择错误,请重新选择\n");break;}//case 1 和 default 都是非零//里层switch语句走完 就会走while语句} while (input);return 0;//如果while 后面为0,程序就会自动退出游戏//非0 1就打印扫雷 其他值则重新打印菜单让用户选择}

🌻今天的扫雷游戏就分享到这里啦~🌻
🌻喜欢就一键三连支持一下吧♥~🌻
🌻附上今天的日落图☺️🌻
🌻谢谢家人们!🌻
相关文章:
C语言-扫雷游戏的实现
🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...
七天学会C语言-第七天(结构体)
1.定义结构体 例 1:把一个学生的信息(包括学号、姓名、性别、住址等 4 项信息) 放在一个结构体变量中,然后输出这个学生的信息。 #include <stdio.h>struct Student {int student_id;char name[30];char gender;char address[60]; };int main() …...
《深度学习工业缺陷检测》专栏介绍 CSDN独家改进实战
💡💡💡深度学习工业缺陷检测 1)提供工业小缺陷检测性能提升方案,满足部署条件; 2)针对缺陷样品少等难点,引入无监督检测; 3)深度学习 C、C#部署方案&#…...
unity 实现双击物体让其隐藏,单击物体让其显示
unity 实现双击物体让其隐藏,单击物体让其显示 private float tapThreshold 0.25f; private float tapTimer 0.0f; private bool tap false; private void Update() { if (Input.GetMouseButtonDown(0)) { if (Time.time < this.tapTimer this.tapThreshold)…...
代码随想录二刷day35
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣860. 柠檬水找零二、力扣406. 根据身高重建队列三、力扣452. 用最少数量的箭引爆气球 前言 一、力扣860. 柠檬水找零 class Solution {public boolean…...
第九章 常用服务器的搭建
第九章 常用服务器的搭建 1.配置FTP服务器 1.1.FTP简介 FTP(File Transfer Protocol,文件传送协议)是TCP/IP网络上两台计算机间传送文件的协议,FTP是在TCP/IP网络和Internet上最早使用的协议之一,它属于网络协议…...
数据结构_复杂度讲解(附带例题详解)
文章目录 前言什么是数据结构?什么是算法?一. 算法的时间复杂度和空间复杂度1.1 算法效率1.2 如何衡量一个算法好坏 二. 时间复杂度2.1 时间复杂度概念例题一例题一分析 实例一实例一分析 三. 空间复杂度实例实例问题解析 四. 常见复杂度对比五. 常见时间…...
学习MLPERF
测试基准与标准 | BenchCouncil 其中涉及AI的有如下: AI (1) AIBench Training AIBench 培训采用平衡的 AI 基准测试方法,考虑全面性、代表性、可负担性和可移植性。该方法广泛调查人工智能任务和模型,并在最大程度上涵盖了算法级、系统级…...
openEuler-20.03 LTS管理用户和用户组
openEuler-20.03 LTS 管理用户和用户组的官方文档,在这里。补充一下关于如何在 openeuler 上创建启用 sudo 新用户(无需修改服务器 /etc/sudoers 文件)的一个小知识点。 创建启用 sudo 新用户 该 sudo 命令提供了一种向普通用户授予管理员特权…...
什么是读写锁
读写锁 读写锁有3 种状态:读模式下的加锁状态、写模式下的加锁状态和不加锁状态,一次只有一个线程可以占有写模式的读写锁,但是可以有多个线程同时占有读模式的读写锁。因此可知,读写锁比互斥锁具有更高的并行性! 读…...
低代码助力企业数字化转型
在当今这个数字化快速发展的时代,企业面临的竞争越来越激烈,数字化转型已成为企业发展的必经之路。低代码平台作为一种新型的开发工具,正在逐渐成为企业数字化转型的重要助力。本文将从数字化转型背景、低代码平台介绍、低代码平台的应用、低…...
Linux 作业
一. 题目 二.作业内容 第一题: 因老师要求上传安装后远程连接XShell截图,如下: 制作yum缓存:[rootRHEL8 ~]# yum makecache 安装gcc:[rootRHEL8 ~]# yum install gcc -y 制作快照:快照,初始 s…...
【数据分享】2005-2022年全国民航机场客货吞吐量和起降架次数据
机场是一个城市对外联系的重要渠道,机场的旅客吞吐量和货物吞吐量是体现一个城市对外联系程度的重要指标。 本次我们给大家分享的是2005-2022年我国民航机场的旅客吞吐量、货邮吞吐量、起降架次数据。数据格式为Excel和Shp两种格式。数据坐标为WGS1984。原始数据来…...
清华博士面试的准备(已通过)
内修(30%) 不管如何 任何人都不能影响你的心态。因为冷静、理性,才能处理好95%以上的问题。剩下的5%我可以不拥有。不能既要、又要、还要。尊重客观规律。放下我执。 价值导向、解决问题为导向。 允许一切事情的发生,是我们最大的…...
requests爬虫详解
Requests 安装 pip install requests 示例 from fake_useragent import UserAgent import requestsdef cra1_1(): url http://xx/front/website/findAllTypes headers {User-Agent: UserAgent().chrome} resp requests.get(url, headersheaders) result resp.json()i…...
oracle的正则表达式(regular expression)
当前,正则表达式已经在很多软件中得到广泛的应用,包括Linux, Unix,HP等操作系统,PHP,C#,Java等开发环境,ORACLE则在10G中推出了自己的正则表达式。 Oracle 10g正则表达式提高了SQL灵活性&#…...
sh脚本 单独可以执行,放到crontab中不执行(定时清空redis)
1.原因: 执行环境的不同 2.解决办法: 添加环境变量 PATH/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH 3. 完整示例: #!/bin/shPATH/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:…...
mysql 半同步复制模式使用详解
目录 一、前言 二、mysql主从架构简介 2.1 mysql主从复制架构概述 2.2 为什么使用主从架构 2.2.1 提高数据可用性 2.2.2 提高数据可靠性 2.2.3 提升数据读写性能 2.3 主从架构原理 2.4 主从架构扩展 2.4.1 双机热备(AB复制) 2.4.2 级联复制 2…...
以太坊代币标准ERC20、ERC721
两个概念 ERC(Ethereum Request for Comment) 以太坊意见征集稿EIP(Ethereum Improvement Proposals)以太坊改进提案 ERC和EIP用于使得以太坊更加完善;在ERC中提出了很多标准,用的最多的标准就是它的Token标准; 有哪些标准详细见https://eips.ethereum…...
编写基于冒泡排序算法的qsort函数
目录 1.简单认识冒泡排序 2.进入正文分析如何实现函数 3.1比较两个相邻元素的大小 3.2比较两个相邻元素大小后要换函数 4.my_qsort函数: 5.总结: 1.简单认识冒泡排序 冒泡排序的步骤如下: 比较相邻的两个元素,如果第一个元素比…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...



