【c语言】迷宫游戏

news2024/11/23 7:00:43

之前想写的迷宫游戏今天终于大功告成,解决了随机生成迷宫地图的问题,使用的是深度优先算法递归版本,之前的迷宫找通路问题用的是深度优先算法的非递归实现.之前写过推箱子,推箱子用到了人物的移动,以及碰到墙就不会走,我们可以稍微变一下就变成了迷宫游戏

1.游戏演示

迷宫演示

2.游戏整体思路

1.迷宫的生成(难点)
2.人物的移动
3.走到出口的判定
4.使用图形库添加人物图片,墙,路的图片

3.预备准备

将每个状态用数字表示,则创建一个枚举类型,以及定义地图的高和宽

#define Height 9
#define Width 9
enum  Mine
{
 Road,
 Wall, 
 Start,
 End, 
 Player };

由枚举类型可知,Road(路)为0,Wall(墙)为1,Start(起点)为2,End(终点)为3,Player(玩家)为4,初始化地图大小为9*9;

int map[Height+2][Width+2];
int flag = 0;

定义一个二维数组大小为11*11;

4.迷宫的初始化

迷宫的创建

void create_map(int x, int y)
{
	int c[4][2] = { 0,1,1,0,0,-1,-1,0 };
	int i, j, t;
	for (i = 0; i < 4; i++)
	{
		j = rand() % 4;
		t = c[i][0]; c[i][0] = c[j][0]; c[j][0] = t;
		t = c[i][1]; c[i][1] = c[j][1]; c[j][1] = t;




	}
	map[x][y] = Road;
	for (int i = 0; i < 4; i++)
	{
		if (map[x + 2 * c[i][0]][y + 2 * c[i][1]] == Wall)
		{
			map[x + c[i][0]][y + c[i][1]] = Road;
			create_map(x + 2 * c[i][0], y + 2 * c[i][1]);


		}






	}






}
void init()
{
	for (int i = 0; i <= Height + 1; i++)
	{
		for (int j = 0; j <= Width + 1; j++)
		{
			if (i == 0 || i == Height + 1 || j == 0 || j == Width + 1)
				map[i][j] = Road;

			else
				map[i][j] = Wall;





		}



	}
	create_map(2 * (rand() % (Height / 2) + 1), 2 * (rand() % (Width / 2) + 1));
	for (int i = 0; i <= Height + 1; i++)
	{
		map[i][0] = Wall;
		map[i][Width + 1] = Wall;
	}
	for (int j = 0; j <= Height + 1; j++)
	{
		map[0][j] = Wall;
		map[Height + 1][j] = Wall;
	}
	map[2][1] = Start+Player;
	
	map[Height - 1][Width] = End;
}

5.键盘控制人物移动

这里推箱子那节有讲,稍微改变一下即可

void keyevent()
{
	int i = 0; int j = 0;
	for (i = 1; i <= Height; i++)
	{
		for (j = 1; j <= Width; j++)
		{
			if (map[i][j] == Player|| map[i][j] == Player +Start|| map[i][j] == Player +End)//,遍历二维数组,如果二维数组某个元素为4,6,7的话直接跳出两个循环,
			{
				goto end;
			}
		}
	}
end:;//获取当前人物坐标
	char ch = _getch();
	
	//printf("%d    %c", ch, ch);//w 119 a 97 s 115  d 100
	switch (ch)
	{
	case 119:
	case 'w ':
	case 'W':
		if (map[i - 1][j] == Road|| map[i - 1][j]== End|| map[i - 1][j] ==Start)//当人物当前位置上面是路或者出口或者入口都可以走
		{
			map[i - 1][j] += Player;//移动后的位置+4,表示玩家出现在此坐标
			map[i][j] -= Player;//起始位置-4,表示玩家消失在此坐标



		}
	

		break;
	case 97:
	case 'a ':
	case'A':
		if (map[i][j - 1]== Road || map[i][j - 1] == End || map[i][j - 1] ==Start)
		{
			map[i][j - 1] += Player;
			map[i][j] -= Player;



		}
	
		break;
	case 115:
	case 's ':
	case'S':
		if (map[i + 1][j] == Road || map[i + 1][j] == End|| map[i + 1][j] == Start)
		{
			map[i + 1][j] += Player;
			map[i][j] -= Player;



		}
	
		break;
	case 100:
	case 'd ':
	case'D':
		if (map[i][j + 1] == Road || map[i][j + 1] == End|| map[i][j + 1]==Start)
		{
			map[i][j + 1] += Player;
			map[i][j] -= Player;



		}
	
		break;








	}
	for (i = 1; i <= Height; i++)
	{
		for (j = 1; j <= Width; j++)
		{
			if (map[i][j] == Player || map[i][j] == Player + Start || map[i][j] == Player + End)
			{
				goto end1;
			}
		}
	}
end1:;//移动后找到玩家当前位置

	


}

6.打印地图函数

void gamedraw()
{
	for (int i = 1; i <=Height; i++)//遍历二维数组
	{
		for (int j = 1; j <=Width; j++)
		{
			 
				switch (map[i][j])
				{case Road:
					printf("  ");  //路        //一个中文字符相当于二个英文字符
					break;
				case Wall:
					printf("■");//墙
					break;
				case Start:
					printf("入");//入口
					break;
				case End:
					printf("出");//出口
					break;
				
				case Player:
					printf("♂");//玩家
					break;
				case Player+ Start:
					printf("♂");//玩家在起点
					break;
				case Player +End://玩家在终点
					printf("♂");
					break;
                }






		}
				
printf("\n");
	}





}

7.判断到出口函数

void iswin()
{

	if (map[Height - 1][Width]==Player+End)
	{
		flag = 1;
	}
	
}

如果终点的坐标map[Height - 1][Width]7,说明玩家到终点,将flag置为1;
然后 在主函数中加个判断语句,如果flag
1,退出 程序

8.主函数

int main()
{  
	srand((unsigned)time(NULL));
	init();//初始化地图
	//initgraph(Height * 40, Width * 40);
	//bgm();
	//loadimg();
	
	
	
	while (1)
	{
		gamedraw();//画地图函数
		keyevent();//获取方向函数
		iswin();//判断是否到终点
		if (flag == 1)
		{
			exit(-1);//到了退出程序
		
		}
		system("cls");//清屏函数,如果不知道为什么加这一步的话,你可以先不加试试
	}
	
	getchar();
	return 0;



}

9.不加图形库的话的头文件

#include<stdio.h>
#include<time.h>//time的头文件
#include <stdlib.h>//srand的头文件
#include <conio.h>//-getch()头文件
#include <windows.h>//清屏函数头文件

10.不加图形库游戏源码

#define _CRT_SECURE_NO_WARNINGS

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

#define Height 9
#define Width 9


enum  Mine
{
 Road,
 Wall, 
 Start,
 End, 
 Player 





};
int map[Height+2][Width+2];
int flag = 0;


void iswin()
{

	if (map[Height - 1][Width]==Player+End)
	{
		flag = 1;
	}
	





	




}

void gamedraw()
{
	for (int i = 1; i <=Height; i++)
	{
		for (int j = 1; j <=Width; j++)
		{
			 
				switch (map[i][j])
				{case Road:
					printf("  ");          //一个中文字符相当于二个英文字符
					break;
				case Wall:
					printf("■");
					break;
				case Start:
					printf("入");
					break;
				case End:
					printf("出");
					break;
				
				case Player:
					printf("♂");
					break;
				case Player+ Start:
					printf("♂");
					break;
				case Player +End:
					printf("♂");
					break;
                }






		}
				
printf("\n");
	}





}
void keyevent()
{
	int i = 0; int j = 0;
	for (i = 1; i <= Height; i++)
	{
		for (j = 1; j <= Width; j++)
		{
			if (map[i][j] == Player|| map[i][j] == Player +Start|| map[i][j] == Player +End)
			{
				goto end;
			}
		}
	}
end:;
	char ch = _getch();
	
	//printf("%d    %c", ch, ch);//w 119 a 97 s 115  d 100
	switch (ch)
	{
	case 119:
	case 'w ':
	case 'W':
		if (map[i - 1][j] == Road|| map[i - 1][j]== End|| map[i - 1][j] ==Start)
		{
			map[i - 1][j] += Player;
			map[i][j] -= Player;



		}
	

		break;
	case 97:
	case 'a ':
	case'A':
		if (map[i][j - 1]== Road || map[i][j - 1] == End || map[i][j - 1] ==Start)
		{
			map[i][j - 1] += Player;
			map[i][j] -= Player;



		}
	
		break;
	case 115:
	case 's ':
	case'S':
		if (map[i + 1][j] == Road || map[i + 1][j] == End|| map[i + 1][j] == Start)
		{
			map[i + 1][j] += Player;
			map[i][j] -= Player;



		}
	
		break;
	case 100:
	case 'd ':
	case'D':
		if (map[i][j + 1] == Road || map[i][j + 1] == End|| map[i][j + 1]==Start)
		{
			map[i][j + 1] += Player;
			map[i][j] -= Player;



		}
	
		break;








	}
	for (i = 1; i <= Height; i++)
	{
		for (j = 1; j <= Width; j++)
		{
			if (map[i][j] == Player || map[i][j] == Player + Start || map[i][j] == Player + End)
			{
				goto end1;
			}
		}
	}
end1:;

	


}
void create_map(int x, int y)
{//8,8
	int c[4][2] = { 0,1,1,0,0,-1,-1,0 };
	int i, j, t;
	for (i = 0; i < 4; i++)
	{
		j = rand() % 4;
		t = c[i][0]; c[i][0] = c[j][0]; c[j][0] = t;
		t = c[i][1]; c[i][1] = c[j][1]; c[j][1] = t;




	}
	map[x][y] = Road;
	for (int i = 0; i < 4; i++)
	{
		if (map[x + 2 * c[i][0]][y + 2 * c[i][1]] == Wall)
		{
			map[x + c[i][0]][y + c[i][1]] = Road;
			create_map(x + 2 * c[i][0], y + 2 * c[i][1]);


		}






	}






}
void init()
{
	for (int i = 0; i <= Height + 1; i++)
	{
		for (int j = 0; j <= Width + 1; j++)
		{
			if (i == 0 || i == Height + 1 || j == 0 || j == Width + 1)
				map[i][j] = Road;

			else
				map[i][j] = Wall;





		}



	}
	create_map(2 * (rand() % (Height / 2) + 1), 2 * (rand() % (Width / 2) + 1));
	for (int i = 0; i <= Height + 1; i++)
	{
		map[i][0] = Wall;
		map[i][Width + 1] = Wall;
	}
	for (int j = 0; j <= Height + 1; j++)
	{
		map[0][j] = Wall;
		map[Height + 1][j] = Wall;
	}
	map[2][1] = Start+Player;
	
	map[Height - 1][Width] = End;
}
int main()
{  
	srand((unsigned)time(NULL));
	init();
	//initgraph(Height * 40, Width * 40);
	//bgm();
	//loadimg();
	
	
	
	while (1)
	{
		gamedraw();
		keyevent();
		iswin();
		if (flag == 1)
		{
			exit(-1);
		
		}
		system("cls");
	}
	
	getchar();
	return 0;



}

11.加图形库版本

12.头文件改变

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<time.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <graphics.h>//图形库头文件
#include<mmsystem.h>//包含多媒体设备接口头文件
#pragma comment(lib,"winmm.lib")//加载静态库

13.加载图片

这里将游戏的素材,墙,玩家,路,起点,终点的图片放到.cpp的统一目录下,这里可以去看一下我写的推箱子.

void loadimg()
{

	for (int i = 0; i < 5; i++)
	{
		char file[20] = "";
		sprintf(file, "./image/%d.png", i);
		loadimage(ima_all + i, file, 40, 40);


	}





}

14.gamedraw函数修改

因为不会在控制台玩游戏,所以要修改这个函数,这里也可以借鉴推箱子那节的

void gamedraw()
{
	for (int i =1; i <= Height; i++)
	{
		for (int j = 1; j <=Width; j++)
		{
			int x = (j-1)* 40;
			int y = (i-1) * 40;

			switch (map[i][j])
			{
			case Road:
				putimage(x, y, ima_all);         //一个中文字符相当于二个英文字符
				break;
			case Wall:
				putimage(x, y, ima_all + 1);
				break;
			case Player:
				putimage(x, y, ima_all+4);
				break;
			case Player +Start:
				putimage(x, y, ima_all+4);
				break;
			case Start:
				putimage(x, y, ima_all+2);
				break;
			case End:
				putimage(x, y, ima_all+3);
				break;
			case Player+End:
				putimage(x, y, ima_all+4);
				break;
			}






		}


	}





}

具体说一下为什么这里的int x = (j-1)* 40;int y = (i-1) * 40;x,y表示要贴的图片的左上角贴在游戏的哪个位置,因为二维数组是将1,1的坐标贴在界面的左上角,界面的左上角坐标就是0,0.x表示行,y表示列.

15.主函数的修改

int main()
{  
	srand((unsigned)time(NULL));
	init();
	initgraph(Height * 40, Width * 40);
	//bgm();
	loadimg();
	
	
	
	while (1)
	{
		gamedraw();
		keyevent();
		iswin();
		if (flag == 1)
		{
			exit(-1);
		
		}
		system("cls");
	}
	
	getchar();
	return 0;



}

16.加图形库的程序源码

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<time.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <graphics.h>
//#include<mmsystem.h>//包含多媒体设备接口头文件
//#pragma comment(lib,"winmm.lib")//加载静态库
#define Height 9 //如果要修改难度可以修改这里,必须是奇数
#define Width 9  //如果要修改难度可以修改这里,必须是奇数

enum  Mine
{
 Road,
 Wall, 
 Start,
 End, 
 Player 





};
int map[Height+2][Width+2];
int flag = 0;
IMAGE  ima_all[5];
//void bgm()
//{    //打开音乐
//	mciSendString("open ./music.MP3", 0, 0, 0);//后面参数不用管
	//播放音乐
//	mciSendString("play ./music.MP3", 0, 0, 0);//后面参数不用管
//}
void loadimg()
{

	for (int i = 0; i < 5; i++)
	{
		char file[20] = "";
		sprintf(file, "./image/%d.png", i);
		loadimage(ima_all + i, file, 40, 40);//修改难度时将图片大小放成10,地图才能放得下


	}





}
void iswin()
{

	if (map[Height - 1][Width]==Player+End)
	{
		flag = 1;
	}
	





	




}
void gamedraw()
{
	for (int i =1; i <= Height; i++)
	{
		for (int j = 1; j <=Width; j++)
		{
			int x = (j-1)* 40;//修改难度时将图片大小放成10,地图才能放得下*40改为*10


			int y = (i-1) * 40;//修改难度时将图片大小放成10,地图才能放得下*40改为*10

			switch (map[i][j])
			{
			case Road:
				putimage(x, y, ima_all);         
				break;
			case Wall:
				putimage(x, y, ima_all + 1);
				break;
			case Player:
				putimage(x, y, ima_all+4);
				break;
			case Player +Start:
				putimage(x, y, ima_all+4);
				break;
			case Start:
				putimage(x, y, ima_all+2);
				break;
			case End:
				putimage(x, y, ima_all+3);
				break;
			case Player+End:
				putimage(x, y, ima_all+4);
				break;
			}






		}


	}





}

void keyevent()
{
	int i = 0; int j = 0;
	for (i = 1; i <= Height; i++)
	{
		for (j = 1; j <= Width; j++)
		{
			if (map[i][j] == Player|| map[i][j] == Player +Start|| map[i][j] == Player +End)
			{
				goto end;
			}
		}
	}
end:;
	char ch = _getch();
	
	//printf("%d    %c", ch, ch);//w 119 a 97 s 115  d 100
	switch (ch)
	{
	case 119:
	case 'w ':
	case 'W':
		if (map[i - 1][j] == Road|| map[i - 1][j]== End|| map[i - 1][j] ==Start)
		{
			map[i - 1][j] += Player;
			map[i][j] -= Player;



		}
	

		break;
	case 97:
	case 'a ':
	case'A':
		if (map[i][j - 1]== Road || map[i][j - 1] == End || map[i][j - 1] ==Start)
		{
			map[i][j - 1] += Player;
			map[i][j] -= Player;



		}
	
		break;
	case 115:
	case 's ':
	case'S':
		if (map[i + 1][j] == Road || map[i + 1][j] == End|| map[i + 1][j] == Start)
		{
			map[i + 1][j] += Player;
			map[i][j] -= Player;



		}
	
		break;
	case 100:
	case 'd ':
	case'D':
		if (map[i][j + 1] == Road || map[i][j + 1] == End|| map[i][j + 1]==Start)
		{
			map[i][j + 1] += Player;
			map[i][j] -= Player;



		}
	
		break;








	}
	for (i = 1; i <= Height; i++)
	{
		for (j = 1; j <= Width; j++)
		{
			if (map[i][j] == Player || map[i][j] == Player + Start || map[i][j] == Player + End)
			{
				goto end1;
			}
		}
	}
end1:;

	


}
void create_map(int x, int y)
{//8,8
	int c[4][2] = { 0,1,1,0,0,-1,-1,0 };
	int i, j, t;
	for (i = 0; i < 4; i++)
	{
		j = rand() % 4;
		t = c[i][0]; c[i][0] = c[j][0]; c[j][0] = t;
		t = c[i][1]; c[i][1] = c[j][1]; c[j][1] = t;




	}
	map[x][y] = Road;
	for (int i = 0; i < 4; i++)
	{
		if (map[x + 2 * c[i][0]][y + 2 * c[i][1]] == Wall)
		{
			map[x + c[i][0]][y + c[i][1]] = Road;
			create_map(x + 2 * c[i][0], y + 2 * c[i][1]);


		}






	}






}
void init()
{
	for (int i = 0; i <= Height + 1; i++)
	{
		for (int j = 0; j <= Width + 1; j++)
		{
			if (i == 0 || i == Height + 1 || j == 0 || j == Width + 1)
				map[i][j] = Road;

			else
				map[i][j] = Wall;





		}



	}
	create_map(2 * (rand() % (Height / 2) + 1), 2 * (rand() % (Width / 2) + 1));
	for (int i = 0; i <= Height + 1; i++)
	{
		map[i][0] = Wall;
		map[i][Width + 1] = Wall;
	}
	for (int j = 0; j <= Height + 1; j++)
	{
		map[0][j] = Wall;
		map[Height + 1][j] = Wall;
	}
	map[2][1] = Start+Player;
	
	map[Height - 1][Width] = End;
}
int main()
{  
	srand((unsigned)time(NULL));
	init();
	initgraph(Height * 40, Width * 40);
	//bgm();这个音乐也不加了
	loadimg();
	
	
	
	while (1)
	{
		gamedraw();
		keyevent();
		iswin();
		if (flag == 1)
		{
			exit(-1);
		
		}
		//system("cls");这里不需要,因为用不到控制台
	}
	
	getchar();
	return 0;



}

注意不用图形库的铁铁们可以直接复制10.不加图形库的程序源码可以直接运行的
这里给大家推荐一个电影心迷宫巨巨巨巨巨好看,直接点题,真有我小汁的
请添加图片描述

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

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

相关文章

如何解决网站被攻击的问题

在当今数字化时代&#xff0c;网站攻击已经成为互联网上的一个常见问题。这些攻击可能会导致数据泄漏、服务中断和用户信息安全问题。然而&#xff0c;我们可以采取一些简单的措施来解决这些问题&#xff0c;以确保网站的安全性和可用性。 使用强密码和多因素认证 密码是保护网…

今年这情况,还能不能选计算机了?

在知乎上看到一个有意思的问题&#xff0c;是劝退计算机的。 主要观点&#xff1a; 计算机从业人员众多加班&#xff0c;甚至需要99635岁危机秃头 综上所属&#xff0c;计算机不仅卷&#xff0c;而且还是一个高危职业呀&#xff0c;可别来干了。 关于卷 近两年确实能明显感觉…

【论文解读】单目3D目标检测 MonoCon(AAAI2022)

本文分享单目3D目标检测&#xff0c;MonoCon模型的论文解读&#xff0c;了解它的设计思路&#xff0c;论文核心观点&#xff0c;模型结构&#xff0c;以及效果和性能。 目录 一、MonoCon简介 二、论文核心观点 三、模型框架 四、模型预测信息与3D框联系 五、损失函数 六、…

CScrollBar 滚动条

1、水平滚动条、垂直滚动条&#xff1b;滚动条中有一个滚动快&#xff0c;用于表示“当前滚动的位置” 2、 3、处理滚动条消息&#xff1a;水平滚动条响应OnHScroll函数&#xff0c;竖直滚动条响应OnVScroll函数。一般在函数中必须经过一下步骤&#xff1a; 1。得到滚动…

【数据结构】二叉树--OJ练习题

目录 1 单值二叉树 2 相同的树 3 另一颗树的子树 4 二叉树的前序遍历 5 二叉树的最大深度 6 对称二叉树 7 二叉树遍历 1 单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCode&#xff09; bool isUnivalTree(struct TreeNode* root) {if (root NULL){return true;}…

屏幕亮度调节保护您的眼睛

官方下载地址&#xff1a; 安果移动 视频演示&#xff1a;屏幕亮度调节-保护您的眼睛_哔哩哔哩_bilibili 嗨&#xff0c;亲爱的用户&#xff0c;你是否有过这样的体验&#xff1a;夜晚安静的时刻&#xff0c;想要在抖音上看看热门的舞蹈、在快手上发现生活的 趣味、或是在哔…

[MoeCTF 2023] web题解

文章目录 webhttpcookie彼岸的flagmoe图床大海捞针夺命十三枪 web http 连接到本地后&#xff0c;题目给了我们任务 第一个是要求我们GET传参UwUu第二个是要求我们POST传参Luvu第三个是要求我们cookie值为admin第四个是要求我们来自127.0.0.1第五个是要求我们用MoeBrowser浏…

Spring framework Day14:配置类的Lite模式和Full模式

前言 Lite模式和Full模式是指在软件或系统中的不同配置选项。一般来说&#xff0c;Lite模式是指较为简洁、轻量级的配置&#xff0c;而Full模式则是指更加完整、功能更丰富的配置。 Lite模式通常会去除一些不常用或占用资源较多的功能&#xff0c;以提高系统的运行效率和响应…

【C++】 对象模型与内存模型的区别

目录 0 引言1 C 内存模型2 C 对象模型3 二者区别 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;C专栏&#x1f4a5; 标题&#xff1a;【C】 对象模型与内存模型的区别❣️ 寄语&#xff1a;最重要的只有一件事&#xff01;&#x1f388; 最后&am…

Spring(17) AopContext.currentProxy() 类内方法调用切入

目录 一、简介二、代码示例2.1 接口类2.2 接口实现类2.3 AOP切面类2.4 启动类&#xff08;测试&#xff09;2.5 执行结果 一、简介 背景&#xff1a; 在之前 Spring 的 AOP 用法中&#xff0c;只有代理的类才会被切入。例如&#xff1a;我们在 Controller 层调用 Service 的方式…

nginx的优化和防盗链(重点)

一、nginx的优化&#xff08;重点&#xff09; &#xff08;一&#xff09;隐藏版本号 由于nginxbug多&#xff0c;更新版本速度比较快&#xff0c;一旦版本号暴露出去&#xff0c;有可能给对方提供攻击的漏洞 1、在http大模块中修改 2、修改nginx.h源码包 &#xff08;二&a…

竞赛 深度学习LSTM新冠数据预测

文章目录 0 前言1 课题简介2 预测算法2.1 Logistic回归模型2.2 基于动力学SEIR模型改进的SEITR模型2.3 LSTM神经网络模型 3 预测效果3.1 Logistic回归模型3.2 SEITR模型3.3 LSTM神经网络模型 4 结论5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 …

leetcode:1929. 数组串联(python3解法)

难度&#xff1a;简单 给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans &#xff0c;数组下标 从 0 开始计数 &#xff0c;对于所有 0 < i < n 的 i &#xff0c;满足下述所有要求&#xff1a; ans[i] nums[i]ans[i n] nums[i] 具体而言&am…

基于Java的二手车交易管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

基于深度学习网络的疲劳驾驶检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1疲劳检测理论概述 4.2 本课题说明 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 In_layer_Size [227 227 3]; img_size [224,…

BSPHP 未授权访问 信息泄露

漏洞描述 BSPHP 存在未授权访问 泄露用户 IP 和 账户名信息 漏洞复现 访问url&#xff1a; 构造payload访问&#xff1a; /admin/index.php?madmin&clog&atable_json&jsonget&soso_ok1&tuser_login_log&page1&limit10&bsphptime16004073…

【牛客网刷题(数据结构)】:环形链表的约瑟夫问题

描述 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数&#xff0c;报到 m 的人离开。 下一个人继续从 1 开始报数。 n-1 轮结束以后&#xff0c;只剩下一个人&#xff0c;问最后留下的这个人编号是多少&#xff1f; O(n) 示例1 好环形链表的约瑟夫问题是一个经典的问…

cmd/bat 批处理文件的参数/接收命令行参数

前言 略 接收命令行参数 变量 %1~%9 对应命令行参数 1-9变量%0表示自身如果参数超过9个&#xff0c;则需要shift命令 示例 将下面的内容保存为bat文件&#xff08;比如1.bat&#xff09;&#xff1a; echo off echo.%%0为自身 echo.第0个参数是:%0 echo.第1个参数是:%1 e…

ROS 学习 Gazebo仿真

机器人模型添加Gazebo属性 使用xacro设计的机器人URDF模型已经描述了机器人的外观特征和物理特性&#xff0c;虽然已经具备在Gazebo中仿真的基本条件&#xff0c;但是&#xff0c;由于没有在模型中加入Gazebo的相关属性&#xff0c;还是无法让模型在Gazebo仿真环境中动起来。那…

基于Java的大学生兼职论坛管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…