12 c++版本的坦克大战

news2024/7/6 19:17:56

前言

呵呵 这大概是 大学里面的 c++ 贪吃蛇了吧 

有一些 面向对象的理解, 但是不多 

这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用 

 

 

坦克大战

#include<iostream>
#include<windows.h>
#include<conio.h>
#include<ctime>
#include<string>
#include<list>
using namespace std;
#define N 4
class Tank_War;
void set_pos(int x, int y);
class Object
{	
protected:
	int x, y;
	int dir;
	int life;

public:
	Object() : x(0), y(0), dir(-1),life(1)	{}
	Object(int x, int y, int dir, int life) : x(x), y(y), dir(dir), life(life) {}	 
	void move();
	void paint()  {	}
	void reduce_blood()	{	life -= 1; 	}
	void increase_blood()	{	life += 1; 	}
	bool is_failure();
	virtual void print(){cout<<x<<"--"<<y<<"=="<<life<<"--"<<endl;}
};

class Missile : public Object
{
public:
	Missile() : Object() {}
	Missile(int x, int y, int dir, int life) : Object(x, y, dir, life) {}
	bool move();
	void paint(string icon);
	int get_x()const	{	return x;	}
	int get_y()const	{	return y;	}
	void set_info(int x, int y, int dir) {	this -> x = x; this -> y = y; this -> dir = dir;	};
	bool operator==(const Missile&_x){return (x==_x.x && y==_x.y&&dir==_x.dir);		}		//list中remove是需要重载==
};

class Tank : public Object
{
private:
	int pre_dir;
	list<Missile> missile_list;

public:
	Tank() : Object(), pre_dir(-1) {}
	Tank(int x, int y, int dir, int life) : Object(x, y, dir,life) {pre_dir = dir;};
	void del_before_move();
	void move(Tank_War &game, string name);
	void paint(string icon);
	int get_x()	const	{	return x;	}
	int get_y()	const	{	return y;	}
	int get_dir()const	{	return dir;	}
	void set_dir(int dir){	pre_dir = this -> dir;	this -> dir = dir;	}
	void set_location(int x, int y){	this -> x = x;	this -> y = y;	}
	void emission_missile();
	void missile_move();
	void check_missile(Tank_War &game, string name);
	bool check_missile_strike(Missile& missile, Tank& tank);
//	bool check_is_right(int x, int y, int dir);
	int distance_squre(int x_1, int y_1, int x_2, int y_2);
	int distance_squre(Tank& tank_2);
	bool operator==(const Tank&_x){return (x==_x.x && y==_x.y&&dir==_x.dir);		}
};


class Tank_War
{
private:
	Tank lead;
	list<Tank> enemy_list;
	int tot;
	int grade;
	bool over;

public:
	Tank_War():lead(28, 21, -1, 4), grade(0), tot(0), over(false) {};
	int game();
	void game_over()	{	over = true;	}
	int draw_menu();
	void draw_game_interface();
	Tank* get_lead()	{	return &lead;	}
	list<Tank>::iterator get_enemy_list_begin()	{	return enemy_list.begin();	}
	list<Tank>::iterator get_enemy_list_end()	{	return enemy_list.end();	}
	Tank* create_enemy();
	void enemy_move();
//	bool check_is_right(int x, int y, int dir);
	bool can_move(Tank &tank, string name);
	bool can_move(Tank& x, Tank& y);
	void check_missile(string name);
	void supply_enemy();
	int get_random_direction();
	list<Tank>::iterator remove_from_enemy_list(list<Tank>::iterator it)	{	return enemy_list.erase(it);		}
	void reduce_tot()	{	tot--;	}
	void increase_grade()	{	grade+=5;set_pos(68, 3);cout<<grade;	}
};


int main()
{
	Tank_War g;
	g.game();

	system("pause");
	return 0;
}


int Tank_War::game()
{
	bool is_move = true;
	int speed = draw_menu();
	system("cls");
	draw_game_interface();
	supply_enemy();
	while(!over)
	{
		if(!lead.is_failure())
		{
			if(tot<N) 	supply_enemy();
			if(GetAsyncKeyState(VK_UP))	lead.set_dir(-1);
			else if(GetAsyncKeyState(VK_DOWN))	lead.set_dir(1);
			else if(GetAsyncKeyState(VK_LEFT))	lead.set_dir(-2);
			else if(GetAsyncKeyState(VK_RIGHT))	lead.set_dir(2);
			else is_move = false;
			if(is_move) lead.move(*this, "lead");	
			enemy_move();
			if(GetAsyncKeyState(VK_RETURN))	lead.emission_missile();	
			if(enemy_list.size() != 0)
			{
			check_missile("lead");
			check_missile("enemy");
			}		
		}
		is_move = true;
		lead.missile_move();

		Sleep(100);
	}

	return 0;
}

void set_pos(int x, int y)
{
	HANDLE cursor = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD position = {x, y};
	SetConsoleCursorPosition(cursor, position);
}

void draw_rect(int x_1, int y_1, int x_2, int y_2, string icon)
{
	if(x_1 > x_2)	swap(x_1, x_2);
	if(y_1 > y_2)	swap(y_1, y_2);
	int n_1 = y_2 - y_1 + 1;
	int n_2 = (x_2 - x_1)/icon.size() + 1;
	for(int i=0; i<n_1; i++)
	{
		set_pos(x_1, y_1+i);
		for(int j=0; j<n_2; j++)
			cout<<icon;
	}
} 

int Tank_War::draw_menu()
{
	int speed = 0;

	draw_rect(0, 3, 79, 3, "-");
	draw_rect(0, 5, 79, 5, "-");
	set_pos(25, 2);
	cout<<"welcome to airplane war games ";
	set_pos(25, 4);
	cout<<"↑ up   ↓ down   enter confirm";
	set_pos(20, 10);
	cout<<"1.easy		easy mode enemy move slow";
	set_pos(20, 14);
	cout<<"2.difficult		difficult mode enemy move fast";
	set_pos(20, 20);
	cout<<"made by He Xiong .   begin at 2014_01_08";
	draw_rect(0, 19, 79, 19, "-");
	draw_rect(0, 22, 79, 22, "-");

	set_pos(18, 10);
	cout<<"->";
	int y = 10;
	while(true)
	{
		if(GetAsyncKeyState(VK_UP) || GetAsyncKeyState(VK_DOWN))
		{
			if(y == 10)
			{
				set_pos(18, y);		cout<<"  ";
				y = 14;
				set_pos(18, y);		cout<<"->";
				speed = 1;
			}
			else if(y == 14)
			{
				set_pos(18, y);		cout<<"  ";
				y = 10;
				set_pos(18, y);		cout<<"->";
				speed = 0;
			}
		}
		else if(GetAsyncKeyState(VK_RETURN))		break;
		Sleep(200);
	}
	return speed;
}

void Tank_War::draw_game_interface()
{
	draw_rect(0, 0, 78, 0, "◆");
	draw_rect(0, 23, 78, 23, "◆");
	draw_rect(0, 1, 0, 22, "◆");
	draw_rect(58, 1, 58, 22, "◆");
	draw_rect(78, 1, 78, 22, "◆");
	int x = 62;
	set_pos(x, 3);		cout<<"GRADE:0";
	set_pos(x, 5);		cout<<"LEVEL:1";
	set_pos(62, 7);		cout<<"↑ UP";
	set_pos(x, 9);		cout<<"↓ down";
	set_pos(x, 11);		cout<<"← left";
	set_pos(x, 13);		cout<<"→ right";
	set_pos(x, 17);		cout<<"life:■■";
	set_pos(x+5, 18);	cout<<"■■";
	lead.set_location(28, 10);
	lead.paint("■");
	set_pos(0, 0);
}

Tank* Tank_War::create_enemy()
{
	int n = 0, k = 0;
	int x = 0, y = 0, dir = 0;
	Tank *p = NULL;
	srand((unsigned)time(NULL));
	while(k != 4)
	{
		n = rand()%2;
		if(n%2 == 0)
		{
			x = 4;			n = rand()%2;
			if(n%2 == 0)	y = 2;
			else			y = 21;
		}
		else
		{
			x = 54;			n = rand()%2;
			if(n%2 == 0)	y = 2;
			else			y = 21;
		}
		dir = get_random_direction();
		p = new Tank(x, y, dir, 1);
		enemy_list.push_back(*p);
		if(can_move(*p, "enemy")){	break;	}
		else	{	enemy_list.pop_back();	delete p;	p = NULL;	}
		k++;
	}
	return p;
}
/*
bool Tank::check_is_right(int x, int y, int dir)
{
	if(distance_squre(x, y, this -> x, this -> y) > 9)
	return true;
	else return false;
}
*//*
bool Tank_War::check_is_right(int x, int y, int dir)
{
	int flag = 0;
	if(!lead.check_is_right(x, y, dir))	++flag;
	list<Tank>::iterator it = NULL;
	for(it=enemy_list.begin(); it!=enemy_list.end(); ++it)
		if(!it -> check_is_right(x, y, dir))	++flag;
	if(flag == 0)	return true;
	else			return false;
}
*/
void Tank_War::supply_enemy()
{
	int n = N - tot;
	Tank *p = NULL;
	for(int i=0; i<n; i++)
	{
		if((p = create_enemy()) != NULL)
		{
		tot++;			p -> paint("■");
		delete p;		p = NULL;
		}
	}
}

void Missile::paint(string icon)
{
	set_pos(x, y);	cout<<icon;
}

void Tank::paint(string icon)
{
	draw_rect(x-2, y, x+2, y, icon);
	draw_rect(x, y-1, x, y+1, icon);
	if((dir+2)%2 == 0)
	{
		set_pos(x-dir, y-1);	cout<<icon;
		set_pos(x-dir, y+1);	cout<<icon;
	}
	else if((dir+2)%2 == 1)
	{
		set_pos(x-2, y-dir);	cout<<icon;
		set_pos(x+2, y-dir);	cout<<icon;
	}

/*					//不是很好,前面两点的会闪
	set_pos(x-2, y-1);
	cout<<"■■■";
	set_pos(x-2, y);
	cout<<"■■■";
	set_pos(x-2, y+1);
	cout<<"■■■";
	if((dir+2)%2 == 0)
	{
		set_pos(x+dir, y-1);	cout<<"  ";
		set_pos(x+dir, y+1);	cout<<"  ";
		draw_rect(x-dir, y-1, x-dir, y+1);
	}
	else if((dir+2)%2 == 1)
	{
		set_pos(x-1, y+dir);	cout<<"  ";
		set_pos(x+1, y+dir);	cout<<"  ";
		draw_rect(x-2, y-dir, x+2, y-dir);
	}
*/
}

bool Missile::move()
{
	if(x>2 && x<56 && y>1 && y <22)
	{
	if((dir+2)%2 == 0)
	{
		set_pos(x, y);	cout<<"  ";
		x += dir;		paint("●");
	}
	else if((dir+2)%2 == 1)
	{
		set_pos(x, y);	cout<<"  ";
		y += dir;		paint("●");
	}
	return true;
	}
	else
	{
		if(x==0 || x==58 || y==0 || y==23)	;
		else
		{	
			set_pos(x, y);	cout<<"  ";
		}
		return false;
	}
}

void Tank::move(Tank_War& game, string name)
{
	if(x>2 && x<56 && y>1 && y <22)
	if((dir+2)%2 == 0)
	{
		Tank p(x+dir, y, dir, 1);
		if(x+dir>2 && x+dir<56)
		{
		if(game.can_move(p, name))
		{
		//draw_rect(x-dir, y-1, x-dir, y+1, "  ");
		//draw_rect(x+dir, y, x+dir, y, "  ");	//为了解决在角落是的BUG
		del_before_move();
		x+=dir;
		paint("■");
		}
		}
		else 
		{
			if(pre_dir > 0)	draw_rect(x+dir, y-1, x+dir, y-1, "  ");
			else	draw_rect(x+dir, y+1, x+dir, y+1, "  ");
			paint("■");
		}
	}
	else
	{
		Tank p(x, y+dir, dir, 1);
		if(y+dir>1 && y+dir<22)
		{
		if(game.can_move(p, name))
		{
		del_before_move();
		y+=dir;
		paint("■");
		}
		}
		else 
		{
			if(pre_dir > 0)	draw_rect(x-2, y+dir, x-2, y+dir, "  ");
			else	draw_rect(x+2, y+dir, x+2, y+dir, "  ");
			paint("■");
		}
	}

}

void Tank::del_before_move()
{
	if(pre_dir == dir)	
		if((dir + 2) % 2 == 0)	draw_rect(x-dir, y-1, x-dir, y+1, "  ");
		else	draw_rect(x-2 , y-dir, x+2, y-dir, "  ");
	else if(pre_dir == -dir)	
		if((dir + 2) % 2 == 0)	draw_rect(x+pre_dir, y, x+pre_dir, y, "  ");
		else	draw_rect(x , y+pre_dir, x, y+pre_dir, "  ");
	else if(pre_dir == 2/dir)	
		if((dir + 2) % 2 == 0)	draw_rect(x-dir, y, x-dir, y-pre_dir, "  ");
		else	draw_rect(x, y-dir, x-pre_dir, y-dir, "  ");
	else
		if((dir + 2) % 2 == 0)	draw_rect(x-dir, y, x-dir, y-pre_dir, "  ");
		else	draw_rect(x, y-dir, x-pre_dir, y-dir, "  ");
}

bool Tank_War::can_move(Tank& tank, string name)
{
	if(name == "lead")
	{
		list<Tank>::iterator it = NULL;
		if(enemy_list.size() != 0)
		{
			for(it=enemy_list.begin(); it!=enemy_list.end(); it++)
			{
				if(!can_move(*it, tank))	return false;
			}
		}
	}
	else
	{
		int flag = 0;
		if(!can_move(lead, tank))	return false;
		list<Tank>::iterator it = NULL;
		if(enemy_list.size() != 0)
		{
			for(it=enemy_list.begin(); it!=enemy_list.end(); it++)
			{	
				if(!can_move(*it, tank)) flag++;
				/*
				if(tank == *it)	
				{
					if(flag)	flag = false;
					else		return false;
				}
				else
				{
					if(!can_move(tank,tank.get_dir() , *it))	return false;
				}
				*/
			}
			if(flag!=1) return false;
			else return true;
		}
	}

	return true;
}

bool Tank_War::can_move(Tank& tank_1, Tank& tank_2)
{
	int x_1 = 0, x_2 = 0, y_1 = 0, y_2 = 0;
	int dis = tank_1.distance_squre(tank_2);
	if(dis > 8)	return true;

	else if(dis == 8)
	{
		if((tank_1.get_dir()+2)%2 == 0)
		{
		if(tank_1.get_dir() > 0)	
		{
			x_1 = tank_1.get_x();	x_2 = tank_2.get_x();
			y_1 = tank_1.get_y();	y_2 = tank_2.get_y();
		}
		else
		{
			x_1 = tank_2.get_x();	x_2 = tank_1.get_x();
			y_1 = tank_2.get_y();	y_2 = tank_1.get_y();
		}
		if(x_1 > x_2)
		{
			if(y_1 > y_2)
			{
			if(tank_2.get_dir() == tank_1.get_dir() || tank_2.get_dir() == 2/tank_1.get_dir())	return true;
			else	return false;
			}
			else
			{
			if(tank_2.get_dir() == tank_1.get_dir() || tank_2.get_dir() == -2/tank_1.get_dir())	return true;
			else	return false;
			}
		}
		else		return true;

		}
		else
		{
		if(tank_1.get_dir() > 0)	
		{
			x_1 = tank_1.get_x();	x_2 = tank_2.get_x();
			y_1 = tank_1.get_y();	y_2 = tank_2.get_y();
		}
		else
		{
			x_1 = tank_2.get_x();	x_2 = tank_1.get_x();
			y_1 = tank_2.get_y();	y_2 = tank_1.get_y();
		}
		if(y_1 > y_2)
		{
			if(x_1 > x_2)
			{
			if(tank_2.get_dir() == tank_1.get_dir() || tank_2.get_dir() == 2/tank_1.get_dir())	return true;
			else	return false;
			}
			else
			{
			if(tank_2.get_dir() == tank_1.get_dir() || tank_2.get_dir() == -2/tank_1.get_dir())	return true;
			else	return false;
			}
		}
		else		return true;
		}
	}

	else if(dis == 5)	
	{	//static int d=0;d++;set_pos(20,20+d);cout<<dis<<"D"<<endl;
		if((tank_1.get_dir()+2)%2 == 0)
		{
		if(tank_1.get_dir() > 0)	
		{
			x_1 = tank_2.get_x();	x_2 = tank_1.get_x();
			y_1 = tank_2.get_y();	y_2 = tank_1.get_y();
		}
		else
		{
			x_1 = tank_1.get_x();	x_2 = tank_2.get_x();
			y_1 = tank_1.get_y();	y_2 = tank_2.get_y();
		}
		if(x_1 > x_2)
		{
			if(y_1 > y_2)
			{
			if(tank_2.get_dir() == -tank_1.get_dir() || tank_2.get_dir() == -2/tank_1.get_dir())	return true;
			else	return false;
			}
			else
			{
			if(tank_2.get_dir() == -tank_1.get_dir() || tank_2.get_dir() == -2/tank_1.get_dir())	return true;
			else	return false;
			}
		}
		else		return false;

		}
		else
		{
		if(tank_1.get_dir() < 0)	
		{
			x_1 = tank_1.get_x();	x_2 = tank_2.get_x();
			y_1 = tank_1.get_y();	y_2 = tank_2.get_y();
		}
		else
		{
			x_1 = tank_2.get_x();	x_2 = tank_1.get_x();
			y_1 = tank_2.get_y();	y_2 = tank_1.get_y();
		}
		if(y_1 > y_2)
		{
			if(x_1 > x_2)
			{
			if(tank_2.get_dir() == -tank_1.get_dir() || tank_2.get_dir() == -2/tank_1.get_dir())	return true;
			else	return false;
			}
			else
			{
			if(tank_2.get_dir() == -tank_1.get_dir() || tank_2.get_dir() == 2/tank_1.get_dir())	return true;
			else	return false;
			}
		}
		else		return false;
		}
	}

	else		return false;
}

bool Object::is_failure()
{
	if(life != 0)	return false;
	else			return true;
}

void Tank::emission_missile()
{
		Missile p;
		if((dir+2)%2 == 0)
			p.set_info(x+2*dir, y, dir);
		else if((dir+2)%2 == 1)
			p.set_info(x, y+2*dir, dir);
		missile_list.push_back(p);
		if(p.get_x()==0 || p.get_x()==58 || p.get_y()==0 || p.get_y()==23)	;
		else			p.paint("■");
		Sleep(100);
}

void Tank::missile_move()
{
	list<Missile>::iterator it = NULL;
	if(missile_list.size() != 0)			//这里一定要判空
	for(it=missile_list.begin(); it!=missile_list.end(); it++)
	{
	if(!it -> move())
		it = missile_list.erase(it);		//删除此步后当前迭代器会“失效”
	}
}

void Tank_War::check_missile(string name)
{
	if(name == "lead")
		lead.check_missile(*this, "lead");
	else
	{
		list<Tank>::iterator it = NULL;
		for(it = enemy_list.begin(); it != enemy_list.end(); it++)
		it -> check_missile(*this, "enemy");
	}
}

void Tank::check_missile(Tank_War &game, string name)
{
	list<Missile>::iterator it_1 = NULL;
	list<Tank>::iterator it_2 = NULL;
	if(name == "lead")
	{
		if(missile_list.size() != 0)
		for(it_1=missile_list.begin(); it_1!= missile_list.end(); it_1++)
		{
			for(it_2=game.get_enemy_list_begin(); it_2!=game.get_enemy_list_end(); it_2++)
				if(it_1 != missile_list.end())
				if(check_missile_strike(*it_1, *it_2))	
				{
					it_1 = missile_list.erase(it_1);
					if(it_2 -> is_failure())
					{
					game.increase_grade();
					it_2 -> paint("  ");
					it_2 = game.remove_from_enemy_list(it_2);
					game.reduce_tot();
					}
				}	
		}
	}
	else
	{
			if(missile_list.size() != 0)
			{
				if(it_1 != missile_list.end())
				for(it_1=missile_list.begin(); it_1!= missile_list.end(); it_1++)
				if(check_missile_strike(*it_1, *(game.get_lead())))	
				{
					it_1 = missile_list.erase(it_1);
					if(game.get_lead() -> is_failure())		game.game_over();
					else 
					{
						game.get_lead() -> paint("  ");
						game.get_lead() -> set_location(28, 10);
						game.get_lead() -> paint("■");
					}
				}
				if(it_1 != missile_list.end())
				for(it_1=missile_list.begin(); it_1!= missile_list.end(); it_1++)
				{
				for(it_2=game.get_enemy_list_begin(); it_2!=game.get_enemy_list_end(); it_2++)
				if(check_missile_strike(*it_1, *it_2))	
				{
					it_1 = missile_list.erase(it_1);
					it_2 -> increase_blood();
				}
				}
			}
	}
}

bool Tank::check_missile_strike(Missile& missile, Tank& tank)
{
	int dis = 0;
	if((dis = distance_squre(missile.get_x(), missile.get_y(), tank.get_x(), tank.get_y())) <= 2)
	{
		if(dis == 2)
		{
		}
		else
		{
			missile.reduce_blood();
			tank.reduce_blood();
			missile.paint("  ");
			return true;
		}
	}
	return false;
}

void Tank_War::enemy_move()
{
	int n = 0;
	srand((unsigned)time(NULL));
	list<Tank>::iterator it = NULL;
	if(enemy_list.size() != 0)
	{
		for(it=enemy_list.begin(); it != enemy_list.end(); it++)
		{
			it -> missile_move();
			n = rand()%3;
			if(n == 0)
			if(can_move(*it, "enemy"))
			{
				n = get_random_direction();
				it -> set_dir(n);
				it->move(*this, "enemy");
			}
			n = rand()%8;
			if(n == 0)	it -> emission_missile();
		}
	}
}

int Tank::distance_squre(int x_1, int y_1, int x_2, int y_2)
{
	return (x_2 - x_1) * (x_2 - x_1) + (y_2 - y_1) * (y_2 - y_1);
}

int Tank::distance_squre(Tank& tank_2)
{
	return distance_squre(x/2, y, tank_2.get_x()/2, tank_2.get_y());
}

int Tank_War::get_random_direction()
{
	int n = 0;
	srand((unsigned)time(NULL));
	if((n = rand()%4) < 2)		n -= 2;
	else		n -= 1;
	return n;
}

 

 

程序截图

首页

6e5ec33a8cee48ec9a8b3815a83072c7.png

 

 

程序执行界面

e0bd744179ac47c89c6b96f0c347b0ba.png

 

 

 

 

 

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

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

相关文章

深度学习基础之《TensorFlow框架(13)—二进制数据》

一、CIFAR-10二进制数据集介绍 1、CIFAR-10数据集 CIFAR-10数据集由10个类别的60000个32x32彩色图像组成&#xff0c;每个类别有6000个图像。有50000个训练图像和10000个测试图像 2、数据集分为五个训练批次和一个测试批次&#xff0c;每个批次有10000个图像 3、data_batch_…

强化SSH服务安全的最佳实践

SSH&#xff08;Secure Shell&#xff09;作为一种广泛应用于Linux和其他类Unix系统中的强大工具&#xff0c;为管理员提供了安全的远程登录和命令执行功能。在现今高度互联的网络环境中&#xff0c;确保SSH服务的安全性显得尤为重要。本文将详细阐述一系列SSH服务的最佳实践&a…

探索文本向量化的新高峰:合合信息acge_text_embedding 模型

前言 文本向量化是将文本数据转换为数值向量的过程。由于计算机只能处理数值数据&#xff0c;文本数据需要被转换成数值形式才能被算法和模型处理。这种向量化的过程使得文本数据能够被机器学习、深度学习等算法有效地处理。文本向量化的方法有多种&#xff0c;其中常见的有以…

输入influx但是无法进入influxdb

问题描述&#xff1a; 博主想通过DockerJmeterInfluxDBGrafana搭建性能测试可视化平台&#xff0c;但是按照别的教程输入influx却无法进入inluxdb&#xff0c;输入输出如下&#xff1a; NAME:influx - Influx ClientUSAGE:influx [command]HINT: If you are looking for the I…

多种方法论的融合,可以把FMEA做得更好——FMEA软件

免费试用FMEA软件-免费版-SunFMEA FMEA&#xff0c;即故障模式与影响分析&#xff0c;是一种预防性质量工具&#xff0c;用于识别产品或过程中潜在的故障模式&#xff0c;评估其对系统的影响&#xff0c;并优先处理那些可能导致严重后果的故障。在实际应用中&#xff0c;单一的…

HashMap常用的API

HashMap好用的API isEmpty()和clear() 例子 package com.example.springbootdemo;import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import java.util.HashMap;/*** Author yimeng* Date 2024/4/26 9:27* PackageName:com.…

2024年Q1季度平板电视行业线上市场销售数据分析

Q1季度平板电视线上市场表现不如预期。 根据鲸参谋数据显示&#xff0c;2024年1月至3月线上电商平台&#xff08;京东天猫淘宝&#xff09;平板电视累计销量约360万件&#xff0c;环比下降12%&#xff0c;同比下降30%&#xff1b;累计销售额约99亿元&#xff0c;环比下降28%&a…

Mockaroo - 在线生成测试用例利器

简介&#xff1a;Mockaroo 是一个无需安装的在线工具&#xff0c;用于生成大量的自定义测试数据。它支持多种数据格式&#xff0c;如JSON、CSV、SQL和Excel&#xff0c;并能模拟复杂的数据结构。 历史攻略&#xff1a; 测试用例&#xff1a;多条件下编写&#xff0c;懒人妙用…

《苍穹外卖》Day08部分知识点记录

一、useGeneratedKeys和keyProperty useGeneratedKeys和keyProperty是<insert>标签中的两个属性&#xff0c;用于处理自动生成的主键值。 1. useGeneratedKeys userGeneratedKeys"true"表示启用自动生成主键功能&#xff1b;当useGeneratedKeys设置为true时…

Yolov5 export.py实现onnx模型的导出

查了很多资料&#xff0c;很多用python代码写的&#xff0c;只需要这个库那个库的&#xff0c;最后都没成功。 不如直接使用Yolov5里面的 export.py实现模型的转换。 一&#xff1a;安装依赖 因为yolov5里面的requirments.txt是将这些转换模型的都注释掉了 所以需要解除注释…

Redis网络相关的结构体 和 reactor模式

目录 1. epoll的封装 结构体aeApiStae 创建epoll fd的封装 epoll_ctl的封装 epoll_wait的封装 2. 结构体aeFileEvent、aeFiredEvent、aeTimeEvent 结构体aeFileEvent 结构体aeFiredEvent 结构体aeTimeEvent 3. struct aeEventLoop aeEventLoop相关的函数 1. 创建eve…

pycharm编辑器------快捷键

pycharm编辑器基础快捷键 上下文操作 01PyCharm 有数百个上下文相关操作&#xff0c;可以帮助您转换、改进和修正代码。按 AIt Enter 以调用“显示上下文操作"。 02我们来应用第一个快速修复:移除形参。 03您几乎可以在任何上下文中调用"显示上下文操作"。我们…

前端补充---15

一、新增表单 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head&g…

C++11 数据结构7 队列的链式存储,实现,测试

前期考虑 队列是两边都有开口&#xff0c;那么在链式情况下&#xff0c;线性表的链式那一边作为对头好呢&#xff1f; 从线性表的核心的插入和删除算法来看&#xff0c;如果在线性表链表的头部插入&#xff0c;每次循环都不会走&#xff0c;但是删除的时候&#xff0c;要删除线…

IDEA中配置使用maven和配置maven的中央仓库

1 以汉化后的IDEA为例配置maven 打开idea选择文件 选择 设置 点击>构建.执行.部署 点击>构建工具 点击>Maven 其中Maven主路径 就是我们maven下载解压后的路径 可以通过边上的三个点选择你解压后的绝对路径&#xff0c;也可以直接把解压后的绝对路劲复制过来 以下…

C++之通俗易懂学模版

目录 一、了解什么是泛性编程 二、模版 1.函数模版 1.1 函数模板概念 1.2 函数模板格式 1.3 函数模板的原理 1.4 函数模板的实例化 1.5 模板参数的匹配原则 2.类模板 2.1 类模板的定义格式 2.2 类模板的实例化 3. 非类型模板参数 4. 模板的特化 4.1 概念 4.2 …

半导体晶圆厂内外网数据单向导出,什么样的方案才安全又便捷?

半导体晶圆厂企业为了隔绝外部⽹络有害攻击、保护⽹络和数据安全&#xff0c;通常采⽤物理隔离的⽅式&#xff0c;将企业内⽹与互联⽹隔离。⽹络隔离后&#xff0c;基于业务开展需求&#xff0c;部分重要数据仍需由内⽹导⼊及导出⾄外部⽹络区域。为保障数据的安全合规性&#…

【Qt常用控件】—— 多元素控件

目录 1.1 List Widget 1.2 Table Widget 1.3 Tree Widget 1.4 小结 Qt 中提供的多元素控件有: QListWidget QListView QTableWidget QTableView QTreeWidget QTreeView xxWidget 和 xxView 之间的区别 以 QTableWidget 和 QTableView 为例&#xff1a; QTableView 是基于…

Java:优先级队列(堆)

一、初识【堆】 1、什么是【优先级队列】&#xff1f; 前面的文章我们介绍过队列&#xff0c;队列是一种先进先出的数据结构&#xff0c;但是&#xff0c;在某些情况下&#xff0c;操作的数据可能需要有一个优先级来获取数据&#xff0c;例如优先获取队列中最大的元素&#xf…

这个合租室友真的没有一点公德心,还好他搬走了

这个合租室友真的没有一点公德心&#xff0c;还好他搬走了 这个出租屋有四个房间。 有三个卧室&#xff0c;和一个隔断。 我住三个卧室中的一个。下图中右边那个就是我住的。 2023年下半年&#xff0c;左边那个屋子来了一个新租户小白。 在住的过程中&#xff0c;隔断间的租…