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

(C语言篇)扫雷的实现

文章目录

  • 一、开始时的基本思维:
  • 二、进入游戏的逻辑(test.c文件中实现)
  • 三、游戏的编写
    • 1. 初始化棋盘
      • I. test.c
      • II. game.h
      • III. game.c
    • 2.打印棋盘
      • I. test.c
      • II. game.h
      • III. game.c
    • 3.布置雷
      • I. test.c
      • II. game.h
      • III. game.c
    • 4.排查雷
      • I. test.c
      • II. game.h
      • III. game.c
  • 四、完整代码
    • 1.test.c
    • 2.game.h
    • 3.game.c

前言:本次扫雷分为三个文件,分别为test.c、game.h、game.c文件,其中test.c文件主要是用来实现扫雷的逻辑,game.c用于编写游戏的主要实现方法。
在这里插入图片描述

一、开始时的基本思维:

在这里插入图片描述

这里我们可以看到要实现初级的扫雷需要9 * 9的格子,所以需要使用一个二维数组,而我们需要创建两个棋盘,一个是用于放雷的(玩家不可见),一个是用于排查显示的。

在这里插入图片描述

二、进入游戏的逻辑(test.c文件中实现)

#include "game.h"void menu() {printf("-------------欢迎进入超好玩的扫雷游戏---------------
");printf("---------------       1.play       ---------------
");printf("---------------       0.exit       ---------------
");printf("--------------------------------------------------
");
}
void test() {int input = 0;do {menu();//打印菜单printf("请输入1/0: ");scanf("%d", &input);printf("
");switch (input) {case 1:printf("进入游戏
");break;case 0:printf("退出游戏: 
");break;default:printf("你很调皮哦没有输入正确的数字,请重新输入!
");}} while(input);
}
int main() {test();return 0;}

这里头文件的引用就不再介绍了讲三子棋的时候有说过。这里我们来看看效果:

在这里插入图片描述

这里我们可以看到进入游戏的逻辑没有问题,这时就可以把case 1:中的 printf(“进入游戏 ”);改为game函数了。

三、游戏的编写

1. 初始化棋盘

I. test.c

void game() {//创建两个字符数组char mine[ROWS][COLS] = { 0 };  //用于放雷char show[ROWS][COLS] = { 0 };  //用于存放显示不是雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0');  //这里我们把数组全部初始化为'0',代表没有雷  InitBoard(show, ROWS, COLS, '*');  //这里用'*'进行显示}

II. game.h

//头文件的包含
#include <stdio.h>//符号的声明
#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 a);

这里使用#define是方便于改变。如果想做难度高的扫雷可以随时改变棋盘大小。

III. game.c

#include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols, char a) {int i = 0;int j = 0;for (i = 0; i < rows; i++) {	for (j = 0; j < cols; j++) {	board[i][j] = a;}}
}

2.打印棋盘

初始化完后我们就需要打印棋盘了。

I. test.c

void game() {//创建两个字符数组char mine[ROWS][COLS] = { 0 };  //用于放雷char show[ROWS][COLS] = { 0 };  //用于存放显示不是雷的信息//初始化棋盘InitBoard(mine, ROW, COL, '0');  //这里我们把数组全部初始化为'0',代表没有雷 InitBoard(show, ROW, COL, '*');  //这里用'*'进行显示//打印棋盘PrintBoard(mine, ROW, COL);PrintBoard(show, ROW, COL);}

这里传的数组还是11* 11,因为我们只操作中间的9*9的数,所以在传行和列时只需要传大小为9的就行。

II. game.h

//头文件的包含
#include <stdio.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int row, int col, char a);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);

III. game.c

//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col) {int i = 0;int j = 0;for (i = 1; i <= row; i++) {	for (j = 1; j <= col; j++) {	printf(" %c ", board[i][j]);}printf("
");  //打印完一行需要换行}
}

这里我们可以看到棋盘打印出来了,但是这样的话玩家进行判断时还要数他是几行几列,有点麻烦所以可以加上坐标。

在这里插入图片描述

可以改为:

//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col) {int i = 0;int j = 0;//打印列号for (i = 0; i <= col; i++) {printf("%d ", i);}printf("
");for (i = 1; i <= row; i++) {printf("%d ", i); //打印行号for (j = 1; j <= col; j++) {printf("%c ", board[i][j]);}printf("
");  //打印完一行需要换行}
}

接下来我们来看看结果:
在这里插入图片描述

3.布置雷

当我们实现棋盘的打印后就可以布置雷了

I. test.c

void game() {//创建两个字符数组char mine[ROWS][COLS] = { 0 };  //用于放雷char show[ROWS][COLS] = { 0 };  //用于存放显示不是雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0');  //这里我们把数组全部初始化为'0',代表没有雷 InitBoard(show, ROWS, COLS, '*');  //这里用'*'进行显示//打印棋盘//PrintBoard(mine, ROW, COL);//printf("
");//PrintBoard(show, ROW, COL);//布置雷PutMine(mine, ROW, COL);PrintBoard(mine, ROW, COL); 
}

注意想要使用rand函数需要在test函数里加入:
srand((unsigned int)time(NULL));

II. game.h

//头文件的包含
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define COUNT 10//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int row, int col, char a);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col);

使用rand函数时需要包含#include <stdlib.h>这个头文件,time函数需要包含#include <time.h>头文件。

III. game.c

//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col) {int count = 10;//10个雷while (count) {int x = rand() % row + 1;//生成1~9的随机数int y = rand() % col + 1;if (mine[x][y] == '0') {		//排除1重复在一个位置的可能mine[x][y] = '1';count--;}}
}

通过下图可以看出我们成功的布置了10个雷:

在这里插入图片描述

4.排查雷

I. test.c

void game() {//创建两个字符数组char mine[ROWS][COLS] = { 0 };  //用于放雷char show[ROWS][COLS] = { 0 };  //用于存放显示不是雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0');  //这里我们把数组全部初始化为'0',代表没有雷InitBoard(show, ROWS, COLS, '*');  //这里用'*'进行显示//打印棋盘//PrintBoard(mine, ROW, COL);//printf("
");//PrintBoard(show, ROW, COL);//布置雷PutMine(mine, ROW, COL);//PrintBoard(mine, ROW, COL);PrintBoard(show, ROW, COL);//排雷FineMine(mine, show, ROW, COL);
}

II. game.h

//头文件的包含
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int row, int col, char a);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col);
//排雷
void FineMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

III. game.c

//排雷//判断玩家输入坐标周围有几个雷
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');//周围有8格所以乘8个'0'
}
void FineMine(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 - 10) {  //当排了71次后就表示赢了	printf("请输入坐标: ");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) {  //限制输入1~9的数if (mine[x][y] == '1') {  //中雷printf("恭喜你被雷砸上天了,祝你旅行愉快,游戏结束
");PrintBoard(mine, row, col);//打印break;}else {int num = mine_count(mine, x, y);  //判断玩家输入坐标周围有几个雷并且返回,需要用mine数组判断show[x][y] = num + '0';  //因为num是整型所以需要加一个'0'使其变为字符型。加了'0'后还是num这个数。PrintBoard(show, row, col);win++;}}else {printf("你输入的值不在范围内,请重新输入
");}}if (win == row * col - 10) {printf("恭喜你,你成功了,剩下的都是雷
");PrintBoard(mine, row, col);	//赢了打印雷在哪里}
}

对字符转化的思想及判断周围有几个雷的思想:
在这里插入图片描述在这里插入图片描述运行结果:
从图中可以看出,当输入坐标时,它就会显示周围有几个雷
在这里插入图片描述
踩雷时:
在这里插入图片描述
赢时:

为了方便这里我们可以在头文件用#define MINE_COUNT规定雷的总数,这样需要改时就在头文件改即可,为了快速测出赢了我们设置80给雷并且显示mine函数:
此时代码变为:
game.h

//头文件的包含
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define MINE_COUNT 80//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int row, int col, char a);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col);
//排雷
void FineMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c
这里涉及到用#define MINE_COUNT雷的改变为布雷时候和排雷时

//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col) {int count = MINE_COUNT;while (count) {int x = rand() % row + 1;//生成1~9的随机数int y = rand() % col + 1;if (mine[x][y] == '0') {		//排除1重复在一个位置的可能mine[x][y] = '1';count--;}}
}//排雷//判断玩家输入坐标周围有几个雷
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');//周围有8格所以乘8个'0'
}
void FineMine(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 - MINE_COUNT) {  //当排了71次后就表示赢了	printf("请输入坐标: ");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) {  //限制输入1~9的数if (mine[x][y] == '1') {  //中雷printf("恭喜你被雷砸上天了,祝你旅行愉快,游戏结束
");PrintBoard(mine, row, col);//打印break;}else {int num = mine_count(mine, x, y);  //判断玩家输入坐标周围有几个雷并且返回,需要用mine数组判断show[x][y] = num + '0';  //因为num是整型所以需要加一个'0'使其变为字符型。加了'0'后还是num这个数。PrintBoard(show, row, col);win++;}}else {printf("你输入的值不在范围内,请重新输入
");}}if (win == row * col - MINE_COUNT) {printf("恭喜你,你成功了,剩下的都是雷
");PrintBoard(mine, row, col);//赢了打印雷在哪里}
}

如图可以看到当我们输入3 8时就赢了:

在这里插入图片描述赢了:
在这里插入图片描述

四、完整代码

1.test.c

#include "game.h"
void game() {//创建两个字符数组char mine[ROWS][COLS] = { 0 };  //用于放雷char show[ROWS][COLS] = { 0 };  //用于存放显示不是雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0');  //这里我们把数组全部初始化为'0',代表没有雷InitBoard(show, ROWS, COLS, '*');  //这里用'*'进行显示//打印棋盘//PrintBoard(mine, ROW, COL);//printf("
");//PrintBoard(show, ROW, COL);//布置雷PutMine(mine, ROW, COL);PrintBoard(mine, ROW, COL);printf("
");PrintBoard(show, ROW, COL);//排雷FineMine(mine, show, ROW, COL);
}void menu() {printf("-------------欢迎进入超好玩的扫雷游戏-------------
");printf("---------------       1.play       ---------------
");printf("---------------       0.exit       ---------------
");printf("--------------------------------------------------
");
}
void test() {int input = 0;srand((unsigned int)time(NULL));do {menu();//打印菜单printf("请输入1/0: ");scanf("%d", &input);printf("
");switch (input) {case 1:game();break;case 0:printf("退出游戏: 
");break;default:printf("你很调皮哦没有输入正确的数字,请重新输入!
");}} while(input);
}
int main() {test();return 0;
}

2.game.h

//头文件的包含
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//符号的声明
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define MINE_COUNT 10//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int row, int col, char a);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col);
//排雷
void FineMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

3.game.c

#include "game.h"//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char a) {int i = 0;int j = 0;for (i = 0; i < rows; i++) {	//这里一定要初始化全部,不然后面计算周围有几个雷时会出错。for (j = 0; j < cols; j++) {	board[i][j] = a;}}
}//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col) {int i = 0;int j = 0;//打印列号for (i = 0; i <= col; i++) {printf("%d ", i);}printf("
");for (i = 1; i <= row; i++) {printf("%d ", i); //打印行号for (j = 1; j <= col; j++) {printf("%c ", board[i][j]);}printf("
");  //打印完一行需要换行}
}//布置雷
void PutMine(char mine[ROWS][COLS], int row, int col) {int count = MINE_COUNT;while (count) {int x = rand() % row + 1;//生成1~9的随机数int y = rand() % col + 1;if (mine[x][y] == '0') {		//排除1重复在一个位置的可能mine[x][y] = '1';count--;}}
}//排雷//判断玩家输入坐标周围有几个雷
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');//周围有8格所以乘8个'0'
}
void FineMine(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 - MINE_COUNT) {  //当排了71次后就表示赢了	printf("请输入坐标: ");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col) {  //限制输入1~9的数if (mine[x][y] == '1') {  //中雷printf("恭喜你被雷砸上天了,祝你旅行愉快,游戏结束
");PrintBoard(mine, row, col);//打印break;}else {int num = mine_count(mine, x, y);  //判断玩家输入坐标周围有几个雷并且返回,需要用mine数组判断show[x][y] = num + '0';  //因为num是整型所以需要加一个'0'使其变为字符型。加了'0'后还是num这个数。PrintBoard(show, row, col);win++;}}else {printf("你输入的值不在范围内,请重新输入
");}}if (win == row * col - MINE_COUNT) {printf("恭喜你,你成功了,剩下的都是雷
");PrintBoard(mine, row, col);//赢了打印雷在哪里}
}

好了,扫雷就暂时讲到这里了,因博主能力有限,这次的扫雷小游戏还有很多可以优化的地方,如右键标记,输入一个坐标会展开一片等等。当然等博主再厉害点会优化的这些功能的。喜欢的可以点个赞哦。

相关文章:

(C语言篇)扫雷的实现

文章目录 一、开始时的基本思维&#xff1a;二、进入游戏的逻辑(test.c文件中实现)三、游戏的编写 1. 初始化棋盘 I. test.cII. game.hIII. game.c 2.打印棋盘 I. test.cII. game.hIII. game.c 3.布置雷 I. test.cII. game.hIII. game.c 4.排查雷 I. test.cII. game.hIII. gam…...

华为手表开发:WATCH 3 Pro(8)获取位置服务

华为手表开发&#xff1a;WATCH 3 Pro&#xff08;8&#xff09;获取位置服务初环境与设备文件夹&#xff1a;文件新增第二页面geolocation.hmlgeolocation.js修改首页 -> 新建按钮 “ 跳转 ”index.hmlindex.js 引用包&#xff1a;system.router首页效果点击结果按钮跳转后…...

AnLogicFPGA设计的时序约束及时序收敛

本篇博文讲了三个内容&#xff1a;时序约束基本概念、时序约束命令、时序收敛技巧 时序约束基本概念 时序设计的实质就是满足每一个触发器的建立&#xff08;setup&#xff09;时间和保持&#xff08;hold&#xff09;时间。 建立时间(Tsu) 触发器的时钟信号沿到来以前&…...

ubuntu22.10安装sogou输入法后不能输入中文字符(可以输入中文标点符号)

问题描述 想在ubuntu22.10系统上安装sogou中文输入法&#xff0c;按照sogou输入法网站给出的步骤安装后&#xff0c;发现无法输入中文字符&#xff0c;但是可以输入中文标点符号。 sogou网站&#xff1a;https://shurufa.sogou.com/linux/guide 寻找答案1 通过各种百度和必…...

基于微信小程序的生活日用品交易平台 的设计与实现

基于微信小程序的生活日用品交易平台 的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一…...

15:高级篇 - CTK 事件与监听

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 生命周期层事件 在 Plugin 生命周期的不同状态相互转换时,CTK Plugin Framework 会发出各种不同的事件,以供事先注册好的事件监听器处理,这些事件被称为“生命周期层事件”。CTK Plugin Framework 支持的…...

SpringBoot Notes

文章目录1 SpringBootWeb快速入门1.1Spring官网1.2 Web分析2. HTTP协议2.1 HTTP介绍34 SpringBootWeb请求响应5 响应6 分层解耦6.1 三层架构6.1.1 三层架构介绍6.1.2 基于三层架构的程序执行流程&#xff1a;6.1.3 代码拆分6.2 分层解耦6.2.1 内聚、耦合6.2.2 解耦思路6.3 IOC&…...

CoreDNS

目录 文章目录目录本节实战前言1、环境变量2、DNS1.DNS 解析过程2.根域名服务器3.顶级域名服务器4.权威性域名服务器5.dig 域名3、CoreDNS1.CoreDNS 扩展配置&#xff08;1&#xff09;开开启日志服务&#xff08;2&#xff09;特定域名使用自定义 DNS 服务器&#xff08;3&…...

码农饭碗不保——ChatGPT正在取代Coder

码农饭碗不保——ChatGPT正在取代Coder 最近被OpenAI的ChatGPT刷屏了。我猜你已经读了很多关于ChatGPT的文章&#xff0c;不需要再介绍了。假如碰巧您还不太了解ChatGPT是什么&#xff0c;可以先看一下这篇文章&#xff0c;然后再回来继续。 与ChatGPT对话很有趣&#xff0c;…...

PAT (Advanced Level) Practice 1004 Counting Leaves

1004 Counting Leaves题目翻译代码分数 30 作者 CHEN, Yue 单位 浙江大学 A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Specification: Each input file contains one test case. Eac…...

基于Redis实现的分布式锁

基于Redis实现的分布式锁什么是分布式锁分布式锁主流的实现方案Redis分布式锁Redis分布式锁的Java代码体现优化一&#xff1a;使用UUID防止误删除优化二&#xff1a;LUA保证删除原子性什么是分布式锁 单体单机部署中可以为一个操作加上锁&#xff0c;这样其他操作就会等待锁释…...

2023年,还找算法岗工作吗?

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达2023年春招&#xff08;补招&#xff09;已经大规模启动了&#xff01;距离2023年暑期实习不到2个月&#xff01;距离2024届校招提前批不到4个月&#xff01;距离2024届秋招正式批不到6个月&a…...

正点原子ARM裸机开发篇

裸机就是手动的操作硬件来实现驱动设备&#xff0c;后面会有驱动框架不需要这么麻烦 第八章 汇编 LED 灯实验 核心过程 通过汇编语言来控制硬件&#xff08;驱动程序&#xff09; 代码流程 1、使能 GPIO1 时钟 GPIO1 的时钟由 CCM_CCGR1 的 bit27 和 bit26 这两个位控制&…...

20222023华为OD机试 - 压缩报文还原(JS)

压缩报文还原 题目 为了提升数据传输的效率,会对传输的报文进行压缩处理。 输入一个压缩后的报文,请返回它解压后的原始报文。 压缩规则:n[str],表示方括号内部的 str 正好重复 n 次。 注意 n 为正整数(0 < n <= 100),str只包含小写英文字母,不考虑异常情况。 …...

SheetJS的部分操作

成文时间&#xff1a;2023年2月18日 使用版本&#xff1a;"xlsx": "^0.18.5" 碎碎念&#xff1a; 有错请指正。 这个库自说自话升级到0.19。旧版的文档我记得当时是直接写在github的README上。 我不太会使用github&#xff0c;现在我不知道去哪里可以找到…...

pytest总结

这里写目录标题一、pytest的命名规则二、界面化配置符合命名规则的方法前面会有运行标记三、pytest的用例结构三部分组成四、pytest的用例断言断言写法&#xff1a;五、pytest测试框架结构六、pytest参数化用例1、pytest参数化实现方式2、单参数&#xff1a;每一条测试数据都会…...

CNI 网络分析(九)Calico IPIP

文章目录环境流量分析Pod 间Node 到 PodPod 到 serviceNode 到 serviceNetworkPolicy理清和观测网络流量环境 可以看到&#xff0c;在宿主机上有到每个 pod IP 的路由指向 veth 设备 到对端节点网段的路由 指向 tunl0 下一跳 ens10 的 ip 有到本节点网段 第一个 ip 即 tunl0 的…...

分布式任务调度(XXL-JOB)

什么是分布式任务调度&#xff1f; 任务调度顾名思义&#xff0c;就是对任务的调度&#xff0c;它是指系统为了完成特定业务&#xff0c;基于给定时间点&#xff0c;给定时间间隔或者给定执行次数自动执行任务。通常任务调度的程序是集成在应用中的&#xff0c;比如&#xff1a…...

Django框架之模型视图--Session

Session 1 启用Session Django项目默认启用Session。 可以在settings.py文件中查看&#xff0c;如图所示 如需禁用session&#xff0c;将上图中的session中间件注释掉即可。 2 存储方式 在settings.py文件中&#xff0c;可以设置session数据的存储方式&#xff0c;可以保存…...

二极管的“几种”应用

不知大家平时有没有留意&#xff0c;二极管的应用范围是非常广的&#xff0c;下面我们来看看我想到几种应用&#xff0c;也可以加深对电路设计的认识&#xff1a; A&#xff0c;特性应用&#xff1a; 由于二极管的种类非常之多&#xff0c;这里这个大类简单罗列下&#xff1a…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...