详解:扫雷游戏的实现

news2025/7/19 11:35:22

扫雷游戏的实现

  • 设置雷
  • 排查雷
  • 标记雷
  • 打印棋盘
  • 初始化棋盘
  • 获得雷的个数
  • 扩展区域
  • test.c的实现
  • meni.c的实现
  • meni.h的实现

铁汁们,今天给大家分享一篇扫雷游戏的实现,来吧,开造⛳️

1.需要存储雷的信息,创建二维数组来存储数据信息,把为雷设置为1,不是雷设置为0。
2.在某个位置存储其所围成的正方形区域中雷的个数,若个数为1,则在查看棋盘的时候,会与雷的位置1产生歧义,所以创建两个二维数组,棋盘1(show二维数组)用来排查雷(玩家可以看到的棋盘RowCol)、棋盘2(meni二维数组 )用来设置雷的位置((Row+2)乘以(Col+2))。
3.在玩家可以看到的棋盘中,把全部数据初始化为 ‘
’,为了方便进行二个棋盘的相互利用,从而无需调用两个函数分别对两棋盘单独处理,把设置雷的二维数组存储的数据类型改成字符型。

设置雷

思路:
遍历棋盘1(show二维数组),并与棋盘2(meni二维数组 )搭配使用判断是否已经在该位置设置了雷

1.让电脑在合法的区域内(Row*Col)产生随机坐标;

2.设置雷的限制条件:如果该坐标在棋盘1内数据为 ’0‘时,才可以在此位置设置一个雷(原因:若放置前一个雷的坐标与本次放置雷的坐标相同,如果无限制条件,则在此位置处本次设置雷就覆盖了前一次设置的雷,因为设置雷的个数是确定的,会造成在棋盘中设置雷的个数不满足规定雷的个数)。

void SetMeni(char board[Rows][Cols], int row, int col)  //设置棋盘中雷的位置,雷设置的范围在Row*Col棋盘内
{
	int x = 0;  //将是雷的地方设置成1,不是雷的地方设置为0作用:在获得一个位置周边(所围成的正方形区域)雷的个数,可以直接进行计算,直接返回结果,不需要每次判断某个位置是否雷
	int y = 0;
	int count = Count; //已经定义规定好要设置的雷的个数
	while (count)
	{ //产生随机数的所有库函数:rand函数--调用-->srand函数--调用-->time函数
		x = rand() % row + 1;//电脑随机产生要设置雷的坐标
		y = rand() % col + 1; 
		if (board[x][y] == '0') //防止下一次设置雷的坐标与上次设置雷的坐标相同,重复设置,从而达不到规定的要设置的雷的个数
		{
			board[x][y] = '1';   
			--count;  //每设置完一个雷,规定数目的雷减一
		}
	}
}

将是雷的地方设置成1,不是雷的地方设置为0作用:在获得一个位置周边(所围成的正方形区域)雷的个数,可以直接进行计算,直接返回结果,不需要每次判断某个位置是否雷,效率提高。

产生随机数的所有库函数:rand函数–调用–>srand函数–调用–>time函数,rand函数、srand函数均需要调用头文件#include<stdlib.h>,time函数需要调用头文件#include<time.h>。

在这里插入图片描述
在这里插入图片描述

排查雷

思路:
排查的条件:循环变量小于(RowCol-Count)棋盘1中数据减去规定雷的个数,排查的坐标需要是合法的坐标范围内(在RowCol);
若该坐标在棋盘2(meni数组)对应的位置为雷,则跳出循环,反之,则进行扩展区域函数。

void FindMeni(char meni[Rows][Cols], char show[Rows][Cols], int row, int col)  //排查雷
{
	int x = 0;
	int y = 0;
	while (i<row*col-Count)
	{
		printf("请输入要排查的坐标,中间以空格隔开>:");
		scanf("%d %d", &x, &y);
		if (x >= 1 && y >= 1 && x <= row && y <= col)
		{
			if (meni[x][y] == '1')
			{
				printf("你被炸死了\n");
				printboard(meni, Row, Col);
				break;
			}
			else
			{
				Extendboard(meni, show, row, col,x,y);  //扩展区域
				printboard(show, Row, Col);  //打印扩展后Row*Col棋盘,用于检查是否扩展成功
				int input = 0;
				printf("请选择是否要标记雷,若要标记雷,请输入1>:");
				scanf("%d", &input);
				switch (input)
				{
				case 1:
					MarkMeni(show, row, col);
					break;
				default:
					break;
				}
            }
		}
		else
		{
			printf("需要排查的坐标不合法,请重新输入\n");
		}
	}
	if (i == row * col - Count)  //当所有不是雷的元素都排查完,才是排雷成功
	{
		printf("恭喜你,排雷成功\n");
		printboard(meni, Row, Col);
	}
}

在这里插入图片描述

标记雷

思路:
前提条件:标记雷的坐标要在合法的范围内(Row*Col),在棋盘1(show数组)进行标记,且要标记的位置原来存储的数据为 ’ * ',才可以进行标记(在棋盘上存储了空格和数字的位置已经被判断出不是雷)。

void MarkMeni(char show[Rows][Cols], int row, int col) //标记雷可能存在的地方
{ 
	printf("标记雷\n");
	int x = 0;   //存储我们输入的雷可能存在的坐标
	int y = 0;
	while (1)
	{
		printf("请输入要标记雷的坐标,中间以空格隔开");
		scanf("%d %d", &x, &y);
		if (x >= 1 && y >= 1 && x <= row && y <= col)  //标记雷的位置要在Row*Col棋盘上
		{
			if (show[x][y] == '*') //某位置可标记的条件
			{
				show[x][y] ='?';
				break;  
			}
			else
			{
				printf("该位置不能被标记,请重新输入\n");
			}
		}
		else
		{
			printf("需要标记雷的坐标不合法,请重新输入\n");
		}
	}
	printboard(show, Row, Col); //打印执行标记后Row*Col棋盘,可以检查该位置是否被标记
}

在这里插入图片描述

打印棋盘

思路:遍历棋盘1(Row*Col)

打印坐标的行、列数:对于棋盘2(meni二维数组),棋盘1(show二维数组)在棋盘2的位置行、列均是从1开始;

打印存放在棋盘1中的数据,供玩家观看。

void printboard(char board[Rows][Cols], int row, int col) //打印棋盘
{
	printf("------扫雷游戏------\n");
	int i = 0;
	for(i = 0 ; i <= row ; i++)  //设置列号,并打印
	printf("%d ", i); 
	printf("\n");
	i = 0;
	for (i = 1; i <= row; i++) //打印的是Row*Col棋盘
	{
		printf("%d ", i);   //设置行号,并打印
		int j = 0;
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);  //打印棋盘上的数据
		}
		printf("\n"); //每一行打印完都需要换行,不然下一行的数据会衔接
	}
}

在这里插入图片描述

初始化棋盘

思路:
遍历棋盘2(meni二维数组),赋初始值,打印Row*Col区域。
在这里插入图片描述

获得雷的个数

数字字符减去0字符等于其对应的数字
思路:
方法1:采用双层for循环来遍历棋盘2(meni二维数组)

从以某位置为中心围成的正方形区域(3*3)第一行开始遍历,直到遍历完第三行,依次将存放在棋盘2中对应位置的数字字符数据转化为对应的数字,在分别相加。


int GetMenicount(char meni[Rows][Cols], int x, int y)  //获得雷的个数,前提条件,该位置已经证明了不是雷,存放的是‘0’
{
	int sum = 0;  //存放获得一个位置周边(所围成的正方形区域)雷的个数
	int i = 0;  
	for (i = x - 1; i <= x + 1; i++)  //遍历该位置所围成的正方形区域
	{
		int j = 0;
		for (j = y - 1; j <= y + 1; j++)  
		{
			sum += meni[i][j]-'0';  //数字字符减去字符0得到的是数字
		}
	}
	return sum;
}

在这里插入图片描述

方法2:

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';

在这里插入图片描述

扩展区域

思路:
采用递归实现,该位置处不是雷、该位置周边(所围成的正方形区域)不是雷 ,且不能在扩展已经设为空格的位置,
否则会造成死递归,从而造成栈溢出采用递归实现,
扩展的坐标应在合法的区域(Row*Col),不然会造成数组越界;

采用双层for循环来遍历棋盘2(meni二维数组),从以某位置为中心围成的正方形区域(33)第一行开始遍历,
判断该坐标所在棋盘1(show数组)所对应的数值是否为 '
’ 或者为 ‘?’(‘?’只是我们手动标记雷可能存在的地方,可能也满足该函数的前提条件,若满足,则需要扩展),直到遍历完第三行,

void Extendboard(char meni[Rows][Cols], char show[Rows][Cols], int row, int col,int x,int y)  //扩展区域,进入到该函数就说明该位置处不是雷,从此位置向外扩展
{  //采用递归实现,该位置处不是雷、该位置周边(所围成的正方形区域)不是雷 ,且不能在扩展已经设为空格的位置,否则会造成死递归,从而造成栈溢出采用递归实现
	int count = 0;  //存放获得一个位置周边(所围成的正方形区域)雷的个数
	if (x >= 1 && y >= 1 && x <= row && y <= col)  //扩展的坐标应在Row*Col棋盘
	{
		count=GetMenicount(meni, x, y);  
		if (count==0)  //该位置可以扩展
		{
			show[x][y] = ' ';  
			i++;  //记录不是雷的元素个数
			int i = 0;
			for (i = x - 1; i <= x + 1; i++)
			{
				int j = 0;
				for (j = y - 1; j <= y + 1; j++)
				{
					if (show[i][j] == '*'||show[i][j]=='?') //注意‘?’只是我们手动标记雷可能存在的地方,可能也满足该函数的前提条件,若满足,则需要扩展
					{
						Extendboard(meni, show, row, col, i,j);
					}![在这里插入图片描述](https://img-blog.csdnimg.cn/c1cfaa1860174181a0827d6e9e62f3bc.png#pic_center)

				}
			}
		}
		else  //该位置周边(所围成的正方形区域)有雷,就把该位置周边(所围成的正方形区域)雷的个数转化为字符存储在该位
		{
			show[x][y] = count + '0';  // 数字+字符0等于数字字符
			i++;  //记录不是雷的元素个数
		}
	}	
}

在这里插入图片描述

test.c的实现

#define _CRT_SECURE_NO_WARNINGS 1
#include"meni.h"
void meue()//菜单栏
{
	printf("****************\n");
	printf("**** 1.play ****\n");
	printf("**** 0.exit ****\n");
	printf("****************\n");
}

void game()
{
	char meni[Rows][Cols] = { 0 }; //设置雷数组
	char show[Rows][Cols] = { 0 }; //排查雷数组
	Initboard(meni, Rows,Cols,'0'); //初始化设置雷的棋盘全为‘0’
	//printboard(meni, Row, Col);
	SetMeni(meni, Row, Col);  //设置棋盘中雷的位置
	//(meni, Row, Col); //打印设置雷的棋盘
	Initboard(show, Rows, Cols, '*');  //初始化排查雷的棋盘为‘*’
	printboard(show, Row, Col);  //打印排查雷的棋盘
	FindMeni(meni, show, Row, Col);  //排查雷
}

int main()
{
	 srand((unsigned int)time(NULL)); //生成随机数要调用的函数,srand的头文件为#include<stdlib.h>、time的头文件为#include<time.h>
	 int input = 0;
     do
	 {
		 meue();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 0:
			printf("退出游戏\n");
			break;
		case 1:
			game();
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}

	 }while (input);
	 return 0;
}

meni.c的实现

#define _CRT_SECURE_NO_WARNINGS 1
#include"meni.h"
int i = 0;
void Initboard(char board[Rows][Cols], int rows, int cols, char set)//初始化棋盘,形参的名字和实参的名字可以相同也可不同
{
	int i = 0;    //初始化棋盘
	for (i = 0; i < rows; i++) //遍历Rows*Cols棋盘
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;  //将棋盘初始化为自己规定的格式
		}
	}
}

void printboard(char board[Rows][Cols], int row, int col) //打印棋盘
{
	printf("------扫雷游戏------\n");
	int i = 0;
	for(i = 0 ; i <= row ; i++)  //设置列号,并打印
	printf("%d ", i); 
	printf("\n");
	i = 0;
	for (i = 1; i <= row; i++) //打印的是Row*Col棋盘
	{
		printf("%d ", i);   //设置行号,并打印
		int j = 0;
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);  //打印棋盘上的数据
		}
		printf("\n"); //每一行打印完都需要换行,不然下一行的数据会衔接
	}
}

void SetMeni(char board[Rows][Cols], int row, int col)  //设置棋盘中雷的位置,雷设置的范围在Row*Col棋盘内
{
	int x = 0;  //将是雷的地方设置成1,不是雷的地方设置为0作用:在获得一个位置周边(所围成的正方形区域)雷的个数,可以直接进行计算,直接返回结果,不需要每次判断某个位置是否雷
	int y = 0;
	int count = Count; //已经定义规定好要设置的雷的个数
	while (count)
	{ //产生随机数的所有库函数:rand函数--调用-->srand函数--调用-->time函数
		x = rand() % row + 1;//电脑随机产生要设置雷的坐标
		y = rand() % col + 1; 
		if (board[x][y] == '0') //防止下一次设置雷的坐标与上次设置雷的坐标相同,重复设置,从而达不到规定的要设置的雷的个数
		{
			board[x][y] = '1';   
			--count;  //每设置完一个雷,规定数目的雷减一
		}
	}
}

int GetMenicount(char meni[Rows][Cols], int x, int y)  //获得雷的个数,前提条件,该位置已经证明了不是雷,存放的是‘0’
{
	int sum = 0;  //存放获得一个位置周边(所围成的正方形区域)雷的个数
	int i = 0;  
	for (i = x - 1; i <= x + 1; i++)  //遍历该位置所围成的正方形区域
	{
		int j = 0;
		for (j = y - 1; j <= y + 1; j++)  
		{
			sum += meni[i][j]-'0';  //数字字符减去字符0得到的是数字
		}
	}
	return sum;
}

void Extendboard(char meni[Rows][Cols], char show[Rows][Cols], int row, int col,int x,int y)  //扩展区域,进入到该函数就说明该位置处不是雷,从此位置向外扩展
{  //采用递归实现,该位置处不是雷、该位置周边(所围成的正方形区域)不是雷 ,且不能在扩展已经设为空格的位置,否则会造成死递归,从而造成栈溢出采用递归实现
	int count = 0;  //存放获得一个位置周边(所围成的正方形区域)雷的个数
	if (x >= 1 && y >= 1 && x <= row && y <= col)  //扩展的坐标应在Row*Col棋盘
	{
		count=GetMenicount(meni, x, y);  
		if (count==0)  //该位置可以扩展
		{
			show[x][y] = ' ';  
			i++;  //记录不是雷的元素个数
			int i = 0;
			for (i = x - 1; i <= x + 1; i++)
			{
				int j = 0;
				for (j = y - 1; j <= y + 1; j++)
				{
					if (show[i][j] == '*'||show[i][j]=='?') //注意‘?’只是我们手动标记雷可能存在的地方,可能也满足该函数的前提条件,若满足,则需要扩展
					{
						Extendboard(meni, show, row, col, i,j);
					}
				}
			}
		}
		else  //该位置周边(所围成的正方形区域)有雷,就把该位置周边(所围成的正方形区域)雷的个数转化为字符存储在该位
		{
			show[x][y] = count + '0';  // 数字+字符0等于数字字符
			i++;  //记录不是雷的元素个数
		}
	}	
}

void MarkMeni(char show[Rows][Cols], int row, int col) //标记雷可能存在的地方
{ 
	printf("标记雷\n");
	int x = 0;   //存储我们输入的雷可能存在的坐标
	int y = 0;
	while (1)
	{
		printf("请输入要标记雷的坐标,中间以空格隔开");
		scanf("%d %d", &x, &y);
		if (x >= 1 && y >= 1 && x <= row && y <= col)  //标记雷的位置要在Row*Col棋盘上
		{
			if (show[x][y] == '*') //某位置可标记的条件
			{
				show[x][y] ='?';
				break;  
			}
			else
			{
				printf("该位置不能被标记,请重新输入\n");
			}
		}
		else
		{
			printf("需要标记雷的坐标不合法,请重新输入\n");
		}
	}
	printboard(show, Row, Col); //打印执行标记后Row*Col棋盘,可以检查该位置是否被标记
}

void FindMeni(char meni[Rows][Cols], char show[Rows][Cols], int row, int col)  //排查雷
{
	int x = 0;
	int y = 0;
	while (i<row*col-Count)
	{
		printf("请输入要排查的坐标,中间以空格隔开>:");
		scanf("%d %d", &x, &y);
		if (x >= 1 && y >= 1 && x <= row && y <= col)
		{
			if (meni[x][y] == '1')
			{
				printf("你被炸死了\n");
				printboard(meni, Row, Col);
				break;
			}
			else
			{
				Extendboard(meni, show, row, col,x,y);  //扩展区域
				printboard(show, Row, Col);  //打印扩展后Row*Col棋盘,用于检查是否扩展成功
				int input = 0;
				printf("请选择是否要标记雷,若要标记雷,请输入1>:");
				scanf("%d", &input);
				switch (input)
				{
				case 1:
					MarkMeni(show, row, col);
					break;
				default:
					break;
				}
            }
		}
		else
		{
			printf("需要排查的坐标不合法,请重新输入\n");
		}
	}
	if (i == row * col - Count)  //当所有不是雷的元素都排查完,才是排雷成功
	{
		printf("恭喜你,排雷成功\n");
		printboard(meni, Row, Col);
	}
}

meni.h的实现

#define _CRT_SECURE_NO_WARNINGS 1
#define Row 9 //控制排查雷的棋盘,用户可以直接看到的棋盘
#define Col 9 //#define 行、列的值,有利于实现多列、多行的棋盘
#define Rows Row+2  //为了记录该位置周边(所围成的正方形区域)雷的个数时,防止造成越界
#define Cols Col+2
#define Count 10 //规定雷的个数,常量不能被修改,不可直接++、--
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void Initboard(char board[Rows][Cols], int rows, int cols, char set); //初始化棋盘
void printboard(char board[Rows][Cols], int rows, int cols);  //打印棋盘
void SetMeni(char board[Rows][Cols], int rows, int cols);  //设置雷
void FindMeni(char meni[Rows][Cols],char show[Rows][Cols], int rows, int cols);  //排查雷
int GetMenicount(char meni[Rows][Cols], int rows, int cols);  //获得该位置周边(所围成的正方形区域)雷的个数
void Extendboard(char meni[Rows][Cols], char show[Rows][Cols], int rows, int cols,int x,int y);  //扩展区域
void MarkMeni( char show[Rows][Cols], int rows, int cols);  //标记雷
运行结果

在这里插入图片描述

铁铁们,扫雷游戏的实现就到此结束啦,请动动你们的手给作者点个👍鼓励吧,你们的鼓励就是我的动力✨
![在这里插入图片描述](https://img-blog.csdnimg.cn/479a508828ad409a893811a0b3060f3d.jpeg#pic_center

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

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

相关文章

gateway的使用

什么是Spring Cloud Gateway 网关作为流量的入口&#xff0c;常用的功能包括路由转发&#xff0c;权限校验&#xff0c;限流等。 Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架&#xff0c;定位于取代 Netflix Zuul。相比 Zuul 来说&#xff0c;Spring Cloud …

第1章 量化设计与分析基础

1.1 引言 如今一台价格不足500美元的手机&#xff0c;性能便堪比1993年世界上最快的售价5000万美元的计算机&#xff0c;这种快速发展既得益于计算机制造技术的发展&#xff0c;也得益于计算机设计的创新。 纵观计算机发展的历史&#xff0c;技术一直在稳定地提升&#xff0c…

【COT】Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

文章目录 主要解决什么问题采用什么方法实验分析与结果消融实验Commonsense ReasoningSymbolic Reasoning 问题与展望 Chain-of-Thought Prompting Elicits Reasoning in Large Language Models 主要解决什么问题 大语言模型越来越大&#xff0c;效果越来越好。但是在一些具有…

Sui Builder House首尔站|主网上线后首次亮相

Sui Builder House提供与全球Sui构建者会面、合作并学习Sui平台前沿技术的机会。Sui基金会计划将于2023年在全球12个城市举办Sui Builder House。截止目前&#xff0c;已成功在美国丹佛市、越南胡志明市和中国香港举办三场Builder House活动。 Sui Builder House首尔站将于6月…

【D435i深度相机YOLO V5结合实现目标检测】

【D435i深度相机YOLO V5结合实现目标检测】 1. 前言2 分析2.1 关于yolo部分2.2 关于获取三维坐标的部分2.3 关于文件结构部分 3. 代码 1. 前言 参考&#xff1a;Ubutntu下使用realsense d435i&#xff08;三&#xff09;&#xff1a;使用yolo v5测量目标物中心点三维坐标 欢迎大…

满意度指标- NPS 的ABtest(公式推导)

&#x1f449;A 组的NPS如下 &#x1f449;B 组的NPS如下 &#xff08;下标为1&#xff0c;均为A组的样本数据&#xff1b;下标为2&#xff0c;均为B组的样本数据&#xff09; 要验证A\B两组的NPS差异是否显著&#xff0c;可通过假设检验。 一、假设检验前置准备 1. 选择…

FastDFS理论与Java程序的对接(图片,文件上传)

目录 fastdfs概述Java程序对接fastDFSpom配置java启动类注解yaml文件配置controller类service类 fastdfs概述 什么是分布式文件系统&#xff1f; 是指文件系统管理的物理存储资源不一定直接连接在本地节点上&#xff0c;而是通过计算机与节点相连。 通俗来讲&#xff1a; 传统…

【medini analyze 软件介绍】

medini analyze 软件介绍 简介主要功能&#xff08;功能安全范畴&#xff09;1、HARA2、建模3、FMEA & FMEDA4、FTA*这里只是笔者根据汽车功能安全分析经验简单列举了medini analyze的部分功能&#xff0c;完整的功能介绍请参考ANSYS官网* 简介 medini analyze是一款专业的…

怎么把pdf文件压缩到最小?四招快速压缩!

怎么把pdf文件压缩到最小&#xff1f;平常我们要压缩一个文件&#xff0c;一般都知道该如何操作。系统中自带了压缩工具&#xff0c;只需右键点击需要压缩的对象并选择"压缩"选项即可完成操作。然而&#xff0c;很多人也会发现&#xff0c;尽管大部分的文件都可以通过…

网络安全公司Dragos披露网络安全事件

工业网络安全公司 Dragos 披露了它所称的“网络安全事件”&#xff0c;此前一个已知的网络犯罪团伙试图突破其防御并渗透到内部网络以加密设备。 虽然 Dragos 表示威胁行为者没有破坏其网络或网络安全平台&#xff0c;但他们可以访问公司的 SharePoint 云服务和合同管理系统。…

05-HTML-图片标签

<img> 标签&#xff1a;src 属性是必需的。它规定图像的 URL。 绝对 URL - 指向另一个网站&#xff08;比如 src"http://www.example.com/image.gif"&#xff09;相对 URL - 指向网站内的一个文件&#xff08;比如 src"image.gif"&#xff09; <…

网络层最重要的协议—IP协议

网络层最重要的协议—IP协议 IP协议格式解决IP地址不够用问题的三种方法方法一: 动态分配IP地址方法二: NAT网络地址转换方法三: IPv6(根本上解决IP不够用的问题)小结&#xff1a; IP协议之地址管理主机号/网络号子网掩码特殊IP IP协议格式 4位版本&#xff1a;此处取4或64位首…

sort ,uniq ,tr ,cut命令

目录 一、sort命令 1.格式 2.命令演示 2.1 选项 -n :按照数字大小排序 2.2选项 -r &#xff1a;反向排序 2.3选项 -u&#xff1a;隐藏多余行 2.4选项 -t &#xff1a;指定分隔符&#xff1b;-k &#xff1a;指定字符&#xff1b;-o &#xff1a;指定保存文件 二、uniq命令…

Git的安装与版本控制

这里写目录标题 原理安装基本使用gitee-IDEA协同开发成员邀请开发组成员指定仓库权限给当前仓库设定分支提交代码时必须向自己的分支提交合并分支 - 无冲突 原理 Git本地有四个工作区域&#xff1a; 工作目录&#xff08;Working Directory&#xff09;、暂存区(Stage/Index)、…

【Linux】笔记分享

目录 - 前言- 目录结构- 磁盘文件系统- 文件权限 ls -l 的内容文件及目录权限实际案例 修改权限 -chmod[change ...]第一种方式&#xff1a; 、-、 变更权限第二种方式&#xff1a;通过数字变更权限 修改文件所有者 -chown 修改文件所在组 -chgrp - 命令类型基础命令网络性能…

【数据类型-列表】------- PYTHON基础9

内容目录 一、数据类型-列表1. 列表1.1. 列表的截取 result List[start:end:step]1.2. 列表元素的修改 List[index] element1.3. 列表元素的删除 del List[index] 或 del List[start:end:step]1.4. 列表元素的拼接 “” 或者增量赋值运算符 “” 2. 列表常用内置函数 对象.内…

jdbc工具包

JDBC工具类 介绍 JDBC全称是Java数据库连接&#xff08;Java Database connect&#xff09;&#xff0c;它是一套用于执行SQL语句的JavaAPI。应用程序可通过这台API连接到关系数据库&#xff0c;并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。 JDBC实现细节 从…

深入浅出C语言——排序

文章目录 排序的概念常见的排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序hoare版本挖坑法前后指针版本快速排序的非递归形式 归并排序递归版本非递归版本 计数排序排序算法复杂度及稳定性分析 排序的概念 排序就是使用使一串记录&#xff0c;按照其中的某个或某些关…

vue3 nextTick()应用

在Vue3中&#xff0c;可以使用nextTick函数来延迟执行某些操作&#xff0c;这些操作会在下一次DOM更新周期之后执行。这个函数通常用于在数据更新后&#xff0c;等待DOM更新之后执行一些操作&#xff0c;比如获取DOM元素的尺寸、位置等。 nextTick() 例如&#xff0c;以下一个…

C语言—与坤(机)对弈

目录 设计思路 游戏运行效果 函数的声明 头文件game.h 游戏主体(源文件) 1.game.c 2.test.c 各文件的阐述 各部分的设计心得 1.打印菜单 2.初始化棋盘 3.打印棋盘 棋盘最终效果 1.打印数据 2.打印分割线 如何扩展为10 x 10 棋盘&#xff1f; 4.玩家下棋、电脑下…