【C语言】小游戏-扫雷(清屏+递归展开+标记)

news2024/11/23 17:24:29

大家好,我是深鱼~

目录

一、游戏介绍

二、文件分装

 三、代码实现步骤

1.制作简易游戏菜单

 2. 初始化棋盘(11*11)

 3.打印棋盘(9*9)

4.布置雷 

 5.计算(x,y)周围8个坐标的和 

6.排查雷 

 <1>清屏后打印棋盘

<2>递归展开

<3>标记雷

四、完整代码

game.h:相关函数的声明,整个代码要引用的头文件以及宏定义

 game.c:实现游戏相关的函数

test.c:整个游戏相关的测试

 五、游戏展示


一、游戏介绍

 

《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输

排查雷的规则:
1.如果这个位置不是雷,就计算这个位置周围8个坐标有几个雷,并显示雷的个数
2.如果这个位置是雷,就炸死了,表示游戏结束
3.如果把不是雷的位置都找出来了,那就通过了 


二、文件分装

 实现这个扫雷游戏,我创建了三个文件

源文件:

test.c:整个游戏相关的测试

game.c:实现游戏相关的函数

头文件:

game.h:相关函数的声明,整个代码要引用的头文件以及宏定义


 三、代码实现步骤

1.制作简易游戏菜单

这个简易菜单和上一篇文章三字棋一样,就不做过多的解释了

test.c

void menu()//打印简易菜单
{
	printf("************************************\n");
	printf("************   1.进入游戏  **********\n");
	printf("************   0.退出游戏  **********\n");
	printf("************************************\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//空指针NULL
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);//注意这里要加上;
	return 0;
}

 2. 初始化棋盘(11*11)

(1)定义两个数组为11*11:

定义一个数组(mine数组)表示雷的信息(1表示这个坐标是雷,0表示不是雷),另一个数组(show数组)表示排查雷的信息

假设我们要实现一个9*9的棋盘,如果我们只定义一个9*9的二维数组,计算周围8个坐标会越界,那么我们就需要将数组扩大成11*11的二维数组(上下左右分别多一排)

(2)为了简洁,传一个参数char set表示初始化的字符

初始化棋盘(9*9的外部也要初始化),因为mine和show数组不同,再传一个参数set即要初始化的字符内容

(3)宏定义ROWS,COLS,ROW,COL,EASY_COUNT 

为了方便修改游戏难度(改变棋盘的行和列及雷的个数),我们采用宏定义直接进行修改即可

game.h

#define ROW 9//可以进行扫雷的行列
#define COL 9

#define ROWS ROW+2//进行判断的行列
#define COLS COL+2

#define EASY_COUNT 10 //雷的个数

//初始化棋盘(9*9的外部也要初始化)
void InitBoard(char board[ROWS][COLS],char ch);

 game.c

//初始化棋盘(9*9的外部也要初始化),为了mine和show数组不同,再传一个参数set即要初始化的内容
void InitBoard(char board[ROWS][COLS],char ch)
{
	for (int i = 0; i < ROWS; i++)
	{
		for (int j = 0; j < COLS; j++)
		{
			board[i][j] = ch;//自己的棋盘初始化为0,展示的数组初始化为*
		}
	}
}

 3.打印棋盘(9*9)

(1)打印出来的棋盘(show)得是9*9的,但是由于定义的数组就是11*11的,所以函数传参还得传11*11定义的数组

(2)因为我们这个游戏是自己输入需要排雷的位置,所以最好在棋盘的旁边打印出对应的数字,方便输入坐标

game.h

//打印棋盘(打印9*9的部分就可以了)
void DisplayBoard(char board[ROWS][COLS]);

  game.c

//打印棋盘(打印9*9的部分就可以了)
void DisplayBoard(char board[ROWS][COLS])//定义的数组是不变的,一直都是11*11
{
	printf("------扫雷------\n");//用来隔开数组
	//打印列号
	for (int i = 0; i <= COL; i++)
	{
		printf("%d ", i);
	}
	printf("\n");

	for (int i = 1; i <= ROW; i++)//传的是11*11,打印是9*9,也就是从数组下标1开始打印到下标为9
	{
		printf("%d ", i);//打印行号

		for (int j = 1; j <= COL; j++)
		{
			printf("%c ", board[i][j]);//打印字符用%c
		}
		printf("\n");
	}
	printf("------扫雷------\n");
}

4.布置雷 

(1)布置雷是在mine数组上布置,定义mine数组上1代表有雷,0代表没雷(这样方便后面计算周围8个坐标的和)

(2)布置雷需要随机布置,那就得随机生成横纵坐标,跟上篇三字棋生成随机数一样rand函数

,但是注意取模结束后要+1,因为取模的结果是0-8,我们需要生成的坐标是1-9

(3)这里要注意一点:如果一个位置已经布置了雷,那么这个位置就不需要再布置了,加一条判断语句就可以解决这个问题

game.h

//布置雷
void SetMine(char mine[ROWS][COLS]);

   game.c

//布置雷
void SetMine(char mine[ROWS][COLS])
{
	int count = EASY_COUNT;
	while (count)//注意这个循环进行的次数可能大于10次,可能有的位置已经是1,或者是多次生成的坐标相同
	{
		int x = rand() % ROW + 1;//%ROW得到的范围是0-8,结果+1的范围就算1-9
		int y = rand() % COL + 1;
		if (mine[x][y] != '1')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

 5.计算(x,y)周围8个坐标的和 

注意求和的时候需要将字符和数字进行转换,加和的时候数组中的是字符0,而加和是数字0,字符=数字-'0' eg:'1'=1-'0'

   game.c

//计算(x,y)周围8个坐标的和
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
	return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] +
		mine[x][y - 1] +mine[x][y + 1] +
		mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1]-8*'0';//记住要减去8个'0'变成数字
}

6.排查雷 

 排查雷的规则:
1.如果这个位置不是雷,就计算这个位置周围8个坐标有几个雷,并显示雷的个数
2.如果这个位置是雷,就炸死了,表示游戏结束
3.如果把不是雷的位置都找出来了,那就通过了 

(1)传参需要传两个数组,mine数组用来判断是否踩中了雷,show数组打印出来看

(2)排雷需要多次进行,while语句控制结束,当棋盘剩下的格子只剩下10个雷的时间就结束,

或者踩到了雷,直接break跳出结束

 game.h

//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS]);

   game.c

//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS])
{
	int x = 0;
	int y = 0;
	int win = 0;
	char ch = 0;

	while (win<ROW*COL-EASY_COUNT)//当非雷的坐标已经全部排出来了,即只剩下雷了就跳出循环
	{
		printf("请输入要排查雷的坐标:>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= ROW && y >= 1 && y <= COL)
		{
			if (mine[x][y] == '1')//踩中雷了
			{
				system("cls");//清空屏幕
				printf("很遗憾,你被炸死了\n");
				DisplayBoard(mine);
				break;
			}
			else//不是雷,就统计(x,y)周围有几个雷:这时候雷定义为1的好处就出来了,我们直接把周围坐标的和加起来放入show坐标的对应位置上即可
			{
				if (show[x][y] == ' ')//为了避免再次输入已经变成空格的坐标
				{
					printf("该坐标已排查\n");
					continue;
				}
				
				else
				{
				//展开一片,去除和为0,,并打印出和非0的位置(递归实现)
				//条件:1.这个坐标不是雷
				//2.这个坐标周围没有雷,雷的个数是0
				//3.这个坐标没有被排查过
					RemoveZero(mine, show, x, y, &win);
					system("cls");
					DisplayBoard(show);
					do 
					{
						printf("如果需要'$'对雷进行标记,请输入Y;无需标记,请按Enter键继续\n");
						while ((ch = getchar()) != '\n')//清空缓冲区
						{
							;
						}
						scanf("%c", &ch);
						if (ch == 'Y')
						{
							//标记雷并打印
							Remark(show);
						}
						else
						{
							continue;
						}
					} while (ch != '\n');//进行多次标记
					
					
				}
			}
		}
		else
		{
			printf("坐标非法,请重新输入\n");
		}
	}
	if (win == ROW * COL - EASY_COUNT)
	{
		system("cls");
		printf("恭喜你,排雷成功\n");
	}
		
}

优化: 

 <1>清屏后打印棋盘

system("cls");

头文件:#include<windows.h>

清屏后再打印show数组棋盘,可以让屏幕更干净简洁 

system("cls");
DisplayBoard(show);

<2>递归展开

展开一片,去除和为0,,并打印出和非0的位置(递归实现)

条件:1.这个坐标不是雷
           2.这个坐标周围没有雷,雷的个数是0
           3.这个坐标没有被排查过

(1)递归展开:当mine数组计算周围8个坐标的和返回的是0,那就把show数组的这个位置变为空格,并且再看自己周围的八个坐标是否也为0,如果mine数组为0且show数组的对应位置为*,那么再对这个坐标的周围8个坐标进行爆炸式展开(show数组对应位置为*是为了防止多次把同一个位置变为空格

(2)传参记得传一个指针来使win++(即统计GetMineCount()的位置,每变一个符号,剩下的棋格数就少一个,对应又成功一步)

   game.c

//展开一片,去除和为0,并打印出和非0的位置(递归实现)
void RemoveZero(char mine[ROWS][COLS], char show[ROWS][COLS],int x,int y,int *num)
{
	if (x >= 1 && x <= ROW && y >= 1 && y <= COL)//小数组(9*9)内部才需要计算
	{
		//注意加和的时候数组中的是字符0,而加和是数字0,字符=数字-'0' eg:'1'=1-'0'
		int ret = GetMineCount(mine, x, y);
		if (ret == 0)
		{
			show[x][y] = ' ';//如果这个周围坐标和是0,那就变为空格
			(*num)++;//变一个空格win也+1
			//看看周围8个坐标是否为0
			for (int i = x - 1; i <= x + 1; i++)
			{
				for (int j = y - 1; j <= y + 1; j++)
				{
					if (mine[i][j]=='0'&&show[i][j] == '*')//show[i][j] == '*'是为了避免重复
						RemoveZero(mine, show, i, j,num);
				}
			}
		}
		else
		{
			show[x][y] = ret + '0';//数字+'0'变成字符
			(*num)++;
		}
	}
}

<3>标记雷

如果show数组上想要标记的位置为*,则可以标记;如果不是*,则不可标记

    game.c

//标记雷
void Remark(char show[ROWS][COLS])
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请输入要标记的坐标>:\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= ROW && y >= 1 && y <= COL)
		{
			
			if (show[x][y] == '*')
			{
				show[x][y] = '$';
				system("cls");
				DisplayBoard(show);
				break;
			}
			else
			{
				printf("该位置不能被标记,请重新输入\n");
			}

		}
		else
		{
			printf("坐标非法,请重新输入\n");
		}
	}

}


四、完整代码

game.h:相关函数的声明,整个代码要引用的头文件以及宏定义

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>

#define ROW 9//可以进行扫雷的行列
#define COL 9

#define ROWS ROW+2//进行判断的行列
#define COLS COL+2

#define EASY_COUNT 10 //雷的个数

//初始化棋盘(9*9的外部也要初始化)
void InitBoard(char board[ROWS][COLS],char ch);
//打印棋盘(打印9*9的部分就可以了)
void DisplayBoard(char board[ROWS][COLS]);
//布置雷
void SetMine(char mine[ROWS][COLS]);
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS]);

 game.c:实现游戏相关的函数

#include"game.h"
//实现游戏相关的代码
//9*9的棋盘,上面布置10个雷

//排查雷
//1.如果这个位置不是雷,就计算这个位置周围8个坐标有几个雷,并显示雷的个数
//2.如果这个位置是雷,就炸死了,表示游戏结束
//3.如果把不是雷的位置都找出来了,那就通过了

//一个数组表示雷的信息(1表示这个坐标是雷,0表示不是雷),另一个数组表示排查雷的信息
//当要排查数组最外层的雷时,计算周围8个坐标会越界,这就需要把数组扩充为11*11,当然为了两个数组统一起来,两个数组都定义11*11

//初始化棋盘(9*9的外部也要初始化),为了mine和show数组不同,再传一个参数set即要初始化的内容
void InitBoard(char board[ROWS][COLS],char ch)
{
	for (int i = 0; i < ROWS; i++)
	{
		for (int j = 0; j < COLS; j++)
		{
			board[i][j] = ch;//自己的棋盘初始化为0,展示的数组初始化为*
		}
	}
}

//打印棋盘(打印9*9的部分就可以了)
void DisplayBoard(char board[ROWS][COLS])//定义的数组是不变的,一直都是11*11
{
	printf("------扫雷------\n");//用来隔开数组
	//打印列号
	for (int i = 0; i <= COL; i++)
	{
		printf("%d ", i);
	}
	printf("\n");

	for (int i = 1; i <= ROW; i++)//传的是11*11,打印是9*9,也就是从数组下标1开始打印到下标为9
	{
		printf("%d ", i);//打印行号

		for (int j = 1; j <= COL; j++)
		{
			printf("%c ", board[i][j]);//打印字符用%c
		}
		printf("\n");
	}
	printf("------扫雷------\n");
}

//布置雷
void SetMine(char mine[ROWS][COLS])
{
	int count = EASY_COUNT;
	while (count)//注意这个循环进行的次数可能大于10次,可能有的位置已经是1,或者是多次生成的坐标相同
	{
		int x = rand() % ROW + 1;//%ROW得到的范围是0-8,结果+1的范围就算1-9
		int y = rand() % COL + 1;
		if (mine[x][y] != '1')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

//计算(x,y)周围8个坐标的和
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
	return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] +
		mine[x][y - 1] +mine[x][y + 1] +
		mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1]-8*'0';//记住要减去8个'0'变成数字
}

//展开一片,去除和为0,并打印出和非0的位置(递归实现)
void RemoveZero(char mine[ROWS][COLS], char show[ROWS][COLS],int x,int y,int *num)
{
	if (x >= 1 && x <= ROW && y >= 1 && y <= COL)//小数组(9*9)内部才需要计算
	{
		//注意加和的时候数组中的是字符0,而加和是数字0,字符=数字-'0' eg:'1'=1-'0'
		int ret = GetMineCount(mine, x, y);
		if (ret == 0)
		{
			show[x][y] = ' ';//如果这个周围坐标和是0,那就变为空格
			(*num)++;//变一个空格win也+1
			//看看周围8个坐标是否为0
			for (int i = x - 1; i <= x + 1; i++)
			{
				for (int j = y - 1; j <= y + 1; j++)
				{
					if (mine[i][j]=='0'&&show[i][j] == '*')//show[i][j] == '*'是为了避免重复
						RemoveZero(mine, show, i, j,num);
				}
			}
		}
		else
		{
			show[x][y] = ret + '0';//数字+'0'变成字符
			(*num)++;
		}
	}
}

//标记雷
void Remark(char show[ROWS][COLS])
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请输入要标记的坐标>:\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= ROW && y >= 1 && y <= COL)
		{
			
			if (show[x][y] == '*')
			{
				show[x][y] = '$';
				system("cls");
				DisplayBoard(show);
				break;
			}
			else
			{
				printf("该位置不能被标记,请重新输入\n");
			}

		}
		else
		{
			printf("坐标非法,请重新输入\n");
		}
	}
	
	

}
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS])
{
	int x = 0;
	int y = 0;
	int win = 0;
	char ch = 0;

	while (win<ROW*COL-EASY_COUNT)//当非雷的坐标已经全部排出来了,即只剩下雷了就跳出循环
	{
		printf("请输入要排查雷的坐标:>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= ROW && y >= 1 && y <= COL)
		{
			if (mine[x][y] == '1')//踩中雷了
			{
				system("cls");//清空屏幕
				printf("很遗憾,你被炸死了\n");
				DisplayBoard(mine);
				break;
			}
			else//不是雷,就统计(x,y)周围有几个雷:这时候雷定义为1的好处就出来了,我们直接把周围坐标的和加起来放入show坐标的对应位置上即可
			{
				if (show[x][y] == ' ')//为了避免再次输入已经变成空格的坐标
				{
					printf("该坐标已排查\n");
					continue;
				}
				
				else
				{
				//展开一片,去除和为0,,并打印出和非0的位置(递归实现)
				//条件:1.这个坐标不是雷
				//2.这个坐标周围没有雷,雷的个数是0
				//3.这个坐标没有被排查过
					RemoveZero(mine, show, x, y, &win);
					system("cls");
					DisplayBoard(show);
					do 
					{
						printf("如果需要'$'对雷进行标记,请输入Y;无需标记,请按Enter键继续\n");
						while ((ch = getchar()) != '\n')//清空缓冲区
						{
							;
						}
						scanf("%c", &ch);
						if (ch == 'Y')
						{
							//标记雷并打印
							Remark(show);
						}
						else
						{
							continue;
						}
					} while (ch != '\n');//进行多次标记
					
					
				}
			}
		}
		else
		{
			printf("坐标非法,请重新输入\n");
		}
	}
	if (win == ROW * COL - EASY_COUNT)
	{
		system("cls");
		printf("恭喜你,排雷成功\n");
	}
		
}

test.c:整个游戏相关的测试

//测试代码
#include"game.h"
void menu()//打印简易菜单
{
	printf("************************************\n");
	printf("************   1.进入游戏  **********\n");
	printf("************   0.退出游戏  **********\n");
	printf("************************************\n");
}

void game()
{
	char mine[ROWS][COLS];
	char show[ROWS][COLS];
	//初始化棋盘(9*9的外部也要初始化)
	InitBoard(mine, '0');
	InitBoard(show, '*');
	//打印棋盘(打印9*9的部分就可以了)
	DisplayBoard(show);
	//布置雷(放在mine数组9*9中即可)
	SetMine(mine);
	//排查雷
	FindMine(mine, show);
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//空指针NULL
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);//注意这里要加上;

	return 0;
}

 五、游戏展示

扫雷小游戏演示


本次C语言小游戏扫雷的内容就到此啦,有什么问题欢迎评论区或者私信交流,觉得笔者写的还可以,或者自己有些许收获的,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢 ! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/882534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Open_MV学习笔记1:开发环境获取

稍微学点计算机视觉相关吧&#xff0c;从今天开始浅浅地学习一下Open_MV&#xff0c;以及回忆一下Python编程相关&#xff0c;Open_mv编程需要用到Python&#xff0c;因此设俩个专栏&#xff1a;Open_mv专栏与Python的专栏&#xff0c;大家可以与我一起&#xff0c;在俩者之间跳…

电脑-C盘结构

一 缓存文件 winR 输入%temp% 就会进入到电脑缓存目录 这里面的东西都可以删除 主要目录在User/xxx/AppData\Local\Temp 二 临时文件 C盘右键&#xff0c;详细信息 三 桌面文件 文件类型 program data表示是游戏存档/系统/软件的配置文件 drivers文件表示驱动程序文件 s…

js this变量

js this变量 有个比较特殊的箭头函数没有自己的this&#xff0c;而是继承了外部作用域的this

VBA技术资料MF43:VBA_Excel中自动填充

【分享成果&#xff0c;随喜正能量】以时寝息&#xff0c;当愿众生&#xff0c;身得安隐&#xff0c;心无动乱。愿我们都能&#xff0c;梦见幸福&#xff01;在踉跄中前进&#xff0c;在跌倒后跃进&#xff0c;逐渐强大.。 我给VBA的定义&#xff1a;VBA是个人小型自动化处理的…

吃鸡绝地求生游戏找不到msvcp140.dll缺失打不开怎么办?

msvcp140.dll是Microsoft Visual C Redistributable的一部分&#xff0c;它是一个重要的动态链接库文件&#xff0c;包含了许多用于运行依赖于Visual C的应用程序所需的函数和类。当运行依赖于Visual C的应用程序时&#xff0c;系统会自动加载和使用msvcp140.dll文件。当电脑系…

电脑出现msvcr100.dll丢失错误怎么办?

msvcr100.dll它是一个动态链接库文件&#xff0c;包含了许多用于运行依赖于Visual C的应用程序所需的函数和类。当运行依赖于Visual C的应用程序时&#xff0c;系统会自动加载和使用msvcr100.dll文件。当系统提示msvcr100.dll文件丢失时&#xff0c;可能会导致一些应用程序无法…

时序预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元时间序列预测

时序预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现WOA-CNN-BiGRU鲸…

怎样让音频速度变慢?请跟随以下方法进行操作

怎样让音频速度变慢&#xff1f;在会议录音过程中&#xff0c;经常会遇到主讲人语速过快&#xff0c;导致我们无法清晰听到对方说的内容。如果我们能够减慢音频速度&#xff0c;就能更好地记录对方的讲话内容。此外&#xff0c;在听到快速播放的外语或方言时&#xff0c;我们也…

部署工业物联网可以选择哪些通信方案?

部署工业物联网有诸多意义&#xff0c;诸如提升生产效率&#xff0c;降低管理成本&#xff0c;保障生产品质稳定&#xff0c;应对长期从业劳动力变化趋势等。针对不同行业、场景&#xff0c;工业物联网需要选择不同的通信方案&#xff0c;以达到成本和效益的最佳平衡。本篇就简…

12 正则表达式 | HTTP协议相关介绍

文章目录 正则表达式re模块最基础操作&#xff08;匹配开头&#xff09;匹配单个字符匹配多个字符匹配开头结尾匹配分组对于group的理解r的作用re 模块高级用法compilesearchfindall易错点 sub直接替换函数替换 split 根据匹配进行切割字符串&#xff0c;并返回一个列表 python…

【Android Framework (十二) 】- 智能硬件设备开发

文章目录 前言智能硬件的定义与应用智能硬件产品开发流程智能硬件开发所涉及的技术体系概述关于主板选型主板CPU芯片的选择关于串口通信 总结 前言 针对我过往工作经历&#xff0c;曾在一家智能科技任职Android开发工程师&#xff0c;简单介绍下关于任职期间接触和开发过的一些…

文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题

一、如果用go语言&#xff0c;为什么我们分析随机化算法的期望运行时间&#xff0c;而不是其最坏运行时间呢? 文心一言&#xff1a; 在分析算法的性能时&#xff0c;期望运行时间是一个重要的指标&#xff0c;它描述了算法在平均情况下的表现。期望运行时间考虑了所有可能的…

【Linux】—— 进程程序替换

目录 序言 &#xff08;一&#xff09;替换原理 1、进程角度——见见猪跑 1️⃣ 认识 execl 函数 2、程序角度——看图理解 &#xff08;二&#xff09;替换函数 1、命名理解 2、函数理解 1️⃣execlp 2️⃣execv 3️⃣execvp 4️⃣execle 5️⃣execve 6️⃣execve…

【C++】C++入门基础详解(1)

本篇内容要分享的是C的基础内容&#xff0c;C的诞生简单的说就是为了填补C语言中的语法坑&#xff0c;同时对比C语言来说增添很多便捷的语法规则&#xff0c;使用起来比C语言便捷不少&#xff0c;但是学习难度也大大增强&#xff0c;不过难度是成线性增长&#xff0c;可以一步一…

编译工具:CMake(三)| 最简单的实例升级

编译工具&#xff1a;CMake&#xff08;三&#xff09;| 最简单的实例升级 前言过程语法解释ADD_SUBDIRECTORY 指令 如何安装目标文件的安装普通文件的安装&#xff1a;非目标文件的可执行程序安装(比如脚本之类)目录的安装 修改 Helloworld 支持安装测试 前言 本篇博客的任务…

H3C交换机MIB库

非常齐全的官方MIB库 为Zabbix监控华三交换机提供诸多方便。 如下信息提供下载链接和下载账号: MIB清单下载:交换机-新华三集团-H3C MIB库:MIB-新华三集团-H3C

Python Opencv实践 - 图像透射变换

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) rows,cols img.shape[:2] print(rows,cols)#opencv中的透射变换&#xff0c;需要一个3x3透射变换矩阵 #这个矩阵可以通过…

基于IDE Eval Resetter延长IntelliJ IDEA等软件试用期的方法(包含新版本软件的操作方法)

本文介绍基于IDE Eval Resetter插件&#xff0c;对集成开发环境IntelliJ IDEA等JetBrains公司下属的多个开发软件&#xff0c;加以试用期延长的方法。 我们这里就以IntelliJ IDEA为例&#xff0c;来介绍这一插件发挥作用的具体方式。不过&#xff0c;需要说明使用IDE Eval Rese…

Spring Boot+Redis 实现消息队列实践示例

Spring BootRedis 实现一个轻量级的消息队列 文章目录 Spring BootRedis 实现一个轻量级的消息队列0.前言1.基础介绍2.步骤2.1. 引入依赖2.2. 配置文件2.3. 核心源码 4.总结答疑 5.参考文档6. Redis从入门到精通系列文章 0.前言 本文将介绍如何利用Spring Boot与Redis结合实现…

二自由度机械臂的gazebo仿真

一、创建ros软件包 #1、创建工作空间 mkdir 2d_robot_ws cd 2d_robot_ws mkdir src cd src catkin_init_workspace #2、编译工作空间 cd .. catkin_make #3、创建软件包 catkin_create_pkg 2d_robot std_msgs rospy roscpp二、创建模型文件 1、编写urdf模型文件 在2d_robot_…