c语言游戏实战(10):坤坤的篮球回避秀

news2024/11/18 11:38:20

  前言:

这款简易版的球球大作战是博主耗时两天半完成的,玩家需要控制坤坤在游戏界面上移动,来躲避游戏界面上方不断掉下来的篮球。本游戏使用C语言和easyx图形库编写,旨在帮助初学者了解游戏开发的基本概念和技巧。

在开始编写代码之前,我们需要先了解一下游戏的基本规则和功能:

游戏界面:游戏界面是一个矩形区域,玩家可以在这个区域内控制球的移动。

坤坤:玩家控制的坤坤可以在游戏界面内自由移动,按下特定的按键后可以跳跃。

篮球:篮球在游戏界面的正上方源源不断地生成,并下降。

坤坤触碰篮球:当坤坤触碰到上方掉下来的篮球时,坤坤的血量就会降低一格,一共五格血量降完为止。

接下来,我们将通过以下几个步骤来实现这个游戏:

1. 初始化游戏界面和模型的信息。

2. 处理键盘输入,实现玩家控制坤坤的移动和跳跃。

3. 生成足够数量的篮球。

4. 生成篮球,并控制其移动。

5. 检测篮球与坤坤之间的触碰关系,并减少相应的血量。

通过学习这个游戏的开发过程,初学者将能够掌握C语言编程和easyx图形库的基本技巧。

1. 前期准备

第一步:我们需要在easyx官网下载好easyx图形库。(具体操作可以去b站搜索相关视频)

第二步:按照下图的步骤将字符集改为多节字符集,因为如果使用的字符集只包含有限数量的字符,可能无法支持所有需要的字符,导致无法正确加载图像。因此,将字符集改为多字符集可以确保包含所有可能需要的字符,从而避免加载图像时出现错误或乱码问题。

2. 游戏的背景设置

游戏界面的长和宽根据背景图片的长宽(右键点击图片的属性可以查看)来设置,这里的背景图片有两张一张是游戏界面,另一张是游戏结束的图片。这里首先需要声明一个IMAGE类型的变量来存储加载的图片数据。这是后续对图片进行处理的基础,利用函数loadimage可以从本地文件中加载图片(尽量将游戏所需要的素材放在和代码的同一个目录里),最后利用putimage可以将图片绘制到窗口上来。

int main()
{
	Init();
	Itset();
    //设置窗口的长宽
	initgraph(Wide, Hight);
    //缓冲
	BeginBatchDraw();
	while (1)
	{
		show();
        //刷新
		FlushBatchDraw();
	}
	closegraph;
	return 0;
}
//声明IMAGE类型的变量
IMAGE img[2];
//加载图片
loadimage(&img[0], "resource/微信图片_20240222202456.jpg");
loadimage(&img[1], "resource/微信图片_20240303132408.jpg");
//绘制图片
putimage(0, 0, &img[Img]);

3. 初始模型的信息

在这里篮球和坤坤的模型都是球,只是后面用图片覆盖而已。首先在游戏游戏界面的正上方生成多个球(具体数量自己定),然后在游戏的下方生成一个玩家控制的球,最后就是加载图片了。

初始化小球 

void Itset()
{
	//
	for (int i = 0; i < Ball_num; i++)
	{
		Enemy[i].x = Wide / 2;
		Enemy[i].y = 10;
		Enemy[i].r = 10;
	}
	//玩家
	Player.x = Wide / 2;
	Player.r = 10;
	Player.y = Hight - Player.r * 4;
}

加载图片

因为loadimage函数只能加载图片,加载不了视频或者动图,所以我们需要将视频一帧一帧的加载上去,然后用循环绘制图片,这样就产生了一个动图的效果。

IMAGE kunkun[58];
IMAGE ball[Ball_num];
	loadimage(&kunkun[0], "resource/2月22日.png", 34, 34);
	loadimage(&kunkun[1], "resource/2月22日(1).png", 34, 34);
	loadimage(&kunkun[2], "resource/2月22日(2).png", 34, 34);
	loadimage(&kunkun[3], "resource/2月22日(3).png", 34, 34);
	loadimage(&kunkun[4], "resource/2月22日(4).png", 34, 34);
	loadimage(&kunkun[5], "resource/2月22日(5).png", 34, 34);
	loadimage(&kunkun[6], "resource/2月22日(6).png", 34, 34);
	loadimage(&kunkun[7], "resource/2月22日(7).png", 34, 34);
	loadimage(&kunkun[8], "resource/2月22日(8).png", 34, 34);
	loadimage(&kunkun[9], "resource/2月22日(9).png", 34, 34);
	loadimage(&kunkun[10], "resource/2月22日(10).png", 34, 34);
	loadimage(&kunkun[11], "resource/2月22日(11).png", 34, 34);
	loadimage(&kunkun[12], "resource/2月22日(12).png", 34, 34);
	loadimage(&kunkun[13], "resource/2月22日(13).png", 34, 34);
	loadimage(&kunkun[14], "resource/2月22日(14).png", 34, 34);
	loadimage(&kunkun[15], "resource/2月22日(15).png", 34, 34);
	loadimage(&kunkun[16], "resource/2月22日(16).png", 34, 34);
	loadimage(&kunkun[17], "resource/2月22日(17).png", 34, 34);
	loadimage(&kunkun[18], "resource/2月22日(18).png", 34, 34);
	loadimage(&kunkun[19], "resource/2月22日(19).png", 34, 34);
	loadimage(&kunkun[20], "resource/2月22日(20).png", 34, 34);
	loadimage(&kunkun[21], "resource/2月22日(21).png", 34, 34);
	loadimage(&kunkun[22], "resource/2月22日(22).png", 34, 34);
	loadimage(&kunkun[23], "resource/2月22日(23).png", 34, 34);
	loadimage(&kunkun[24], "resource/2月22日(24).png", 34, 34);
	loadimage(&kunkun[25], "resource/2月22日(25).png", 34, 34);
	loadimage(&kunkun[26], "resource/2月22日(26).png", 34, 34);
	loadimage(&kunkun[27], "resource/2月22日(27).png", 34, 34);
	loadimage(&kunkun[28], "resource/2月22日(28).png", 34, 34);
	loadimage(&kunkun[29], "resource/2月22日(29).png", 34, 34);
	loadimage(&kunkun[30], "resource/2月22日(30).png", 34, 34);
	loadimage(&kunkun[31], "resource/2月22日(31).png", 34, 34);
	loadimage(&kunkun[32], "resource/2月22日(32).png", 34, 34);
	loadimage(&kunkun[33], "resource/2月22日(33).png", 34, 34);
	loadimage(&kunkun[34], "resource/2月22日(34).png", 34, 34);
	loadimage(&kunkun[35], "resource/2月22日(35).png", 34, 34);
	loadimage(&kunkun[36], "resource/2月22日(36).png", 34, 34);
	loadimage(&kunkun[37], "resource/2月22日(37).png", 34, 34);
	loadimage(&kunkun[38], "resource/2月22日(38).png", 34, 34);
	loadimage(&kunkun[39], "resource/2月22日(39).png", 34, 34);
	loadimage(&kunkun[40], "resource/2月22日(40).png", 34, 34);
	loadimage(&kunkun[41], "resource/2月22日(41).png", 34, 34);
	loadimage(&kunkun[42], "resource/2月22日(42).png", 34, 34);
	loadimage(&kunkun[43], "resource/2月22日(43).png", 34, 34);
	loadimage(&kunkun[44], "resource/2月22日(44).png", 34, 34);
	loadimage(&kunkun[45], "resource/2月22日(45).png", 34, 34);
	loadimage(&kunkun[46], "resource/2月22日(46).png", 34, 34);
	loadimage(&kunkun[47], "resource/2月22日(47).png", 34, 34);
	loadimage(&kunkun[48], "resource/2月22日(48).png", 34, 34);
	loadimage(&kunkun[49], "resource/2月22日(49).png", 34, 34);
	loadimage(&kunkun[50], "resource/2月22日(50).png", 34, 34);
	loadimage(&kunkun[51], "resource/2月22日(51).png", 34, 34);
	loadimage(&kunkun[52], "resource/2月22日(52).png", 34, 34);
	loadimage(&kunkun[53], "resource/2月22日(53).png", 34, 34);
	loadimage(&kunkun[54], "resource/2月22日(54).png", 34, 34);
	loadimage(&kunkun[55], "resource/2月22日(55).png", 34, 34);
	loadimage(&kunkun[56], "resource/2月22日(56).png", 34, 34);
	for (int i = 0; i < Ball_num; i++)
	{
		loadimage(&ball[i], "resource/5459.png_860.png", 36, 36);
	}

4. 绘制图片

图片是需要根据球来移动的,所以putimage函数的格式应该为:

putimage(x, y, Wide, Hight, &kunkun[a], 0, 0,SRCAND);
  1. x, y:图像左上角在窗口中的坐标。
  2. Wide, Hight:要绘制的图像的宽度和高度。
  3. &kunkun[a]:指向图像数据数组的指针,a是数组中图像数据的索引。
  4. 0, 0:源图像中要复制的区域的左上角坐标。

这样图片的位置就可以根据球的为止移动了。 

void show()
{
	srand((unsigned)time(NULL));
    //清屏函数
	cleardevice();
	//setbkcolor(WHITE);
	putimage(0, 0, &img[Img]);
	putimage(0, 0, &Heal[Health], SRCAND);
	for (int i = 0; i < Ball_num; i++)
	{
		setfillcolor(RGB(229, 124, 77));
		solidcircle(Enemy[i].x, Enemy[i].y, Enemy[i].r);
	}
	putimage(Player.x - 14, Player.y - 14, Wide, Hight, &kunkun[a], 0, 0,SRCAND);
	for (int i = 0; i < Ball_num; i++)
	{
		putimage(Enemy[i].x - 18, Enemy[i].y - 18, Wide, Hight, &ball[i], 0, 0, SRCAND);
	}
}

 5. 篮球的移动

随机生成8个随机数,然后根据这八个随机数在执行向下移动的同时执行向左或向右的指令。为了防止篮球的移动速度太快,我们需要加一个Sleep(10)函数给它降速。当篮球移动出游戏界面的时候我们让它重新生成。

void Enemy_move()
{
	srand((unsigned)time(NULL));
	for (int i = 0; i < Ball_num; i++)
	{
		int direction = rand() % 8;
			if (direction == 0)
			{
				Enemy[i].y++;
				Enemy[i].x--;
			}
			else if (direction == 1)
			{
				Enemy[i].y++;
				Enemy[i].x++;
			}
			else if (direction == 2)
			{
				Enemy[i].y += 2;
				Enemy[i].x += 2;
			}
			else if (direction == 3)
			{
				Enemy[i].y += 2;
				Enemy[i].x -= 2;
			}
			else if (direction == 4)
			{
				Enemy[i].y += 3;
				Enemy[i].x += 3;
			}
			else if (direction == 5)
			{
				Enemy[i].y += 3;
				Enemy[i].x -= 3;
			}
			else if (direction == 6)
			{
				Enemy[i].y += 4;
				Enemy[i].x -= 4;
			}
			else if (direction == 7)
			{
				Enemy[i].y += 4;
				Enemy[i].x += 4;
			}
			if (Enemy[i].x <0 || Enemy[i].x>Wide || Enemy[i].y > Hight - Player.r * 3)
			{
				Enemy[i].x = Wide / 2;
				Enemy[i].y = 10;
				Enemy[i].r = 10;
			}
	}
}

6. 玩家与球碰撞

生成游戏血条,每碰撞一次血条减少,并且重新生成篮球。

IMAGE Heal[6];
	loadimage(&Heal[5], "resource/微信图片_20240303142935.jpg");
	loadimage(&Heal[4], "resource/微信图片_20240303142958.jpg");
	loadimage(&Heal[3], "resource/微信图片_20240303142931.jpg");
	loadimage(&Heal[2], "resource/微信图片_20240303142926.jpg");
	loadimage(&Heal[1], "resource/微信图片_20240303142922.jpg");
//玩家与球碰撞
void collide()
{
	for (int i = 0; i < Ball_num; i++)
	{
		if (Distance(Player.x, Player.y, Enemy[i].x, Enemy[i].y) < Player.r + Enemy[i].r && Health > 0)
		{
			Health--;
			Enemy[i].x = Wide / 2;
			Enemy[i].y = 10;
			Enemy[i].r = 10;
		}
	}
	
}

7. 人物的移动 

在这里需要用到GetAsyncKeyState(vk virtual key)函数获取异步按键状态,其中vk virtual key是虚拟键值,如果接受到这个虚拟键值,它会返回真。VK_UP、VK_LEFT、VK_RIGHT、0x20、0x41、0x44、0x57分别是上箭头键、左箭头键、右箭头键、空格键、a、d、w的虚拟键值。最后这里比较难处理的就是跳跃的这个动作了,我在这里设置人物跳跃后最高上升60个像素格,然后通过while循环循环上升每次上升5个像素个,如果是直接上升60个像素格的话,就是闪现了达不到跳跃的效果,在人物上升的同时其他动作是任然要进行的,所以我们还需要将这些动作函数打包放到这个人物跳跃的while循环当中。值得注意的是我们还需要在这个while循环中加一个Sleep(20)调节循环速度,使这里运动速度与主函数的while循环的运动速度一致。

void player_move()
{
	if (GetAsyncKeyState(VK_LEFT)|| GetAsyncKeyState(0x41))
	{
		if (Player.x > 0)
			Player.x -= Player_sleep;
	}
	if (GetAsyncKeyState(VK_RIGHT)|| GetAsyncKeyState(0x44))
	{
		if (Player.x < Wide)
			Player.x += Player_sleep;
	}
	if (Player.y == Hight - Player.r * 4)
	{
		if (GetAsyncKeyState(0x20) || GetAsyncKeyState(0x57)|| GetAsyncKeyState(VK_UP))
		{
			BeginBatchDraw();
			while (Player.y > Hight - Player.r * 4 - 60)
			{
				Sleep(20);
				Player.y -= 5;
				player_move();
				Enemy_move();
				show();
				collide();
				FlushBatchDraw();
			}
		}
		if (Health == 0)
		{
			printf("\a");
			system("pause");
			exit(0);
		}
	}
}

效果展示:

坤坤的篮球回避秀

源码:

#include<stdio.h>
#include<easyx.h>
#include<time.h>
#include<windows.h>
#include<mmsystem.h>
#include<math.h>
#pragma comment(lib,"winmm.lib")
#define Wide 1280
#define Hight 720
#define Wide1 780
#define Hight1 286
#define Ball_num 20
#define Player_sleep 5
int Health = 5;
int sleep = 1;
int Img = 0;
struct Ball
{
	float x = 0;
	int y = 0;
	float r = 0;

};
struct Ball Enemy[Ball_num];
struct Ball Player;
IMAGE img[2];
IMAGE kunkun[58];
IMAGE ball[Ball_num];
IMAGE Heal[6];
int a = 0;
//加载图片
void Init()
{
	loadimage(&img[0], "resource/微信图片_20240222202456.jpg");
	loadimage(&img[1], "resource/微信图片_20240303132408.jpg");
	loadimage(&Heal[5], "resource/微信图片_20240303142935.jpg");
	loadimage(&Heal[4], "resource/微信图片_20240303142958.jpg");
	loadimage(&Heal[3], "resource/微信图片_20240303142931.jpg");
	loadimage(&Heal[2], "resource/微信图片_20240303142926.jpg");
	loadimage(&Heal[1], "resource/微信图片_20240303142922.jpg");
	loadimage(&kunkun[0], "resource/2月22日.png", 34, 34);
	loadimage(&kunkun[1], "resource/2月22日(1).png", 34, 34);
	loadimage(&kunkun[2], "resource/2月22日(2).png", 34, 34);
	loadimage(&kunkun[3], "resource/2月22日(3).png", 34, 34);
	loadimage(&kunkun[4], "resource/2月22日(4).png", 34, 34);
	loadimage(&kunkun[5], "resource/2月22日(5).png", 34, 34);
	loadimage(&kunkun[6], "resource/2月22日(6).png", 34, 34);
	loadimage(&kunkun[7], "resource/2月22日(7).png", 34, 34);
	loadimage(&kunkun[8], "resource/2月22日(8).png", 34, 34);
	loadimage(&kunkun[9], "resource/2月22日(9).png", 34, 34);
	loadimage(&kunkun[10], "resource/2月22日(10).png", 34, 34);
	loadimage(&kunkun[11], "resource/2月22日(11).png", 34, 34);
	loadimage(&kunkun[12], "resource/2月22日(12).png", 34, 34);
	loadimage(&kunkun[13], "resource/2月22日(13).png", 34, 34);
	loadimage(&kunkun[14], "resource/2月22日(14).png", 34, 34);
	loadimage(&kunkun[15], "resource/2月22日(15).png", 34, 34);
	loadimage(&kunkun[16], "resource/2月22日(16).png", 34, 34);
	loadimage(&kunkun[17], "resource/2月22日(17).png", 34, 34);
	loadimage(&kunkun[18], "resource/2月22日(18).png", 34, 34);
	loadimage(&kunkun[19], "resource/2月22日(19).png", 34, 34);
	loadimage(&kunkun[20], "resource/2月22日(20).png", 34, 34);
	loadimage(&kunkun[21], "resource/2月22日(21).png", 34, 34);
	loadimage(&kunkun[22], "resource/2月22日(22).png", 34, 34);
	loadimage(&kunkun[23], "resource/2月22日(23).png", 34, 34);
	loadimage(&kunkun[24], "resource/2月22日(24).png", 34, 34);
	loadimage(&kunkun[25], "resource/2月22日(25).png", 34, 34);
	loadimage(&kunkun[26], "resource/2月22日(26).png", 34, 34);
	loadimage(&kunkun[27], "resource/2月22日(27).png", 34, 34);
	loadimage(&kunkun[28], "resource/2月22日(28).png", 34, 34);
	loadimage(&kunkun[29], "resource/2月22日(29).png", 34, 34);
	loadimage(&kunkun[30], "resource/2月22日(30).png", 34, 34);
	loadimage(&kunkun[31], "resource/2月22日(31).png", 34, 34);
	loadimage(&kunkun[32], "resource/2月22日(32).png", 34, 34);
	loadimage(&kunkun[33], "resource/2月22日(33).png", 34, 34);
	loadimage(&kunkun[34], "resource/2月22日(34).png", 34, 34);
	loadimage(&kunkun[35], "resource/2月22日(35).png", 34, 34);
	loadimage(&kunkun[36], "resource/2月22日(36).png", 34, 34);
	loadimage(&kunkun[37], "resource/2月22日(37).png", 34, 34);
	loadimage(&kunkun[38], "resource/2月22日(38).png", 34, 34);
	loadimage(&kunkun[39], "resource/2月22日(39).png", 34, 34);
	loadimage(&kunkun[40], "resource/2月22日(40).png", 34, 34);
	loadimage(&kunkun[41], "resource/2月22日(41).png", 34, 34);
	loadimage(&kunkun[42], "resource/2月22日(42).png", 34, 34);
	loadimage(&kunkun[43], "resource/2月22日(43).png", 34, 34);
	loadimage(&kunkun[44], "resource/2月22日(44).png", 34, 34);
	loadimage(&kunkun[45], "resource/2月22日(45).png", 34, 34);
	loadimage(&kunkun[46], "resource/2月22日(46).png", 34, 34);
	loadimage(&kunkun[47], "resource/2月22日(47).png", 34, 34);
	loadimage(&kunkun[48], "resource/2月22日(48).png", 34, 34);
	loadimage(&kunkun[49], "resource/2月22日(49).png", 34, 34);
	loadimage(&kunkun[50], "resource/2月22日(50).png", 34, 34);
	loadimage(&kunkun[51], "resource/2月22日(51).png", 34, 34);
	loadimage(&kunkun[52], "resource/2月22日(52).png", 34, 34);
	loadimage(&kunkun[53], "resource/2月22日(53).png", 34, 34);
	loadimage(&kunkun[54], "resource/2月22日(54).png", 34, 34);
	loadimage(&kunkun[55], "resource/2月22日(55).png", 34, 34);
	loadimage(&kunkun[56], "resource/2月22日(56).png", 34, 34);
	for (int i = 0; i < Ball_num; i++)
	{
		loadimage(&ball[i], "resource/5459.png_860.png", 36, 36);
	}
}
//初始化小球的信息
void Itset()
{
	//
	for (int i = 0; i < Ball_num; i++)
	{
		Enemy[i].x = Wide / 2;
		Enemy[i].y = 10;
		Enemy[i].r = 10;
	}
	//玩家
	Player.x = Wide / 2;
	Player.r = 10;
	Player.y = Hight - Player.r * 4;
}
void Enemy_move()
{
	srand((unsigned)time(NULL));
	for (int i = 0; i < Ball_num; i++)
	{
		int direction = rand() % 8;
			if (direction == 0)
			{
				Enemy[i].y++;
				Enemy[i].x--;
			}
			else if (direction == 1)
			{
				Enemy[i].y++;
				Enemy[i].x++;
			}
			else if (direction == 2)
			{
				Enemy[i].y += 2;
				Enemy[i].x += 2;
			}
			else if (direction == 3)
			{
				Enemy[i].y += 2;
				Enemy[i].x -= 2;
			}
			else if (direction == 4)
			{
				Enemy[i].y += 3;
				Enemy[i].x += 3;
			}
			else if (direction == 5)
			{
				Enemy[i].y += 3;
				Enemy[i].x -= 3;
			}
			else if (direction == 6)
			{
				Enemy[i].y += 4;
				Enemy[i].x -= 4;
			}
			else if (direction == 7)
			{
				Enemy[i].y += 4;
				Enemy[i].x += 4;
			}
			if (Enemy[i].x <0 || Enemy[i].x>Wide || Enemy[i].y > Hight - Player.r * 3)
			{
				Enemy[i].x = Wide / 2;
				Enemy[i].y = 10;
				Enemy[i].r = 10;
			}
	}
}
void show()
{
	srand((unsigned)time(NULL));
	cleardevice();
	putimage(0, 0, &img[Img]);
	putimage(0, 0, &Heal[Health], SRCAND);

	for (int i = 0; i < Ball_num; i++)
	{
		setfillcolor(RGB(229, 124, 77));
		solidcircle(Enemy[i].x, Enemy[i].y, Enemy[i].r);
	}
	putimage(Player.x - 14, Player.y - 14, Wide, Hight, &kunkun[a], 0, 0,SRCAND);
	for (int i = 0; i < Ball_num; i++)
	{
		putimage(Enemy[i].x - 18, Enemy[i].y - 18, Wide, Hight, &ball[i], 0, 0, SRCAND);
	}
}
//距离
int Distance(int x, int y, int x1, int y1)
{
	return sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
}
//玩家与球碰撞
void collide()
{
	for (int i = 0; i < Ball_num; i++)
	{
		if (Distance(Player.x, Player.y, Enemy[i].x, Enemy[i].y) < Player.r + Enemy[i].r && Health > 0)
		{
			Health--;
			Enemy[i].x = Wide / 2;
			Enemy[i].y = 10;
			Enemy[i].r = 10;
		}
	}
	
}
void player_move()
{
	if (GetAsyncKeyState(VK_LEFT)|| GetAsyncKeyState(0x41))
	{
		if (Player.x > 0)
			Player.x -= Player_sleep;
	}
	if (GetAsyncKeyState(VK_RIGHT)|| GetAsyncKeyState(0x44))
	{
		if (Player.x < Wide)
			Player.x += Player_sleep;
	}
	if (Player.y == Hight - Player.r * 4)
	{
		if (GetAsyncKeyState(0x20) || GetAsyncKeyState(0x57)|| GetAsyncKeyState(VK_UP))
		{
			BeginBatchDraw();
			while (Player.y > Hight - Player.r * 4 - 60)
			{
				Sleep(20);
				Player.y -= 5;
				player_move();
				Enemy_move();
				show();
				collide();
				FlushBatchDraw();
			}
		}
		if (Health == 0)
		{
			printf("\a");
			system("pause");
			exit(0);
		}
	}
}
int main()
{
	Init();
	Itset();
	initgraph(Wide, Hight);
	BeginBatchDraw();
	while (1)
	{
		Sleep(20);
		if (a <= 56)
		{
			a++;
		}
		if (a > 56)
		{
			a = 0;
		}
		if (Player.y < Hight - Player.r * 4)
		{
			Player.y += 2;
		}
		if (sleep > 0)
		{
			sleep--;
		}
		if (Health == 0)
			Img = 1;
		show();
		FlushBatchDraw();
		Enemy_move();
		player_move();
		collide();
	}
	closegraph;
	return 0;
}

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

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

相关文章

灾备建设中异地副本含义及使用

异地副本是指将备份数据存放在不同的地理位置&#xff0c;确保数据的安全性和可用性。这种备份方法可以降低数据丢失的风险&#xff0c;因为即使一个位置出现机房级灾难&#xff0c;导致数据出现故障&#xff0c;也可以从另一个位置的数据副本中恢复使用。 在进行异地副本备份…

LeetCode每日一题【c++版】- leetcode 2369. 检查数组是否存在有效划分【动态规划】

题目描述 题目链接&#xff1a;2369.检查数组是否存在有效划分 描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums&#xff0c;你必须将数组划分为一个或多个连续子数组。如果获得的这些子数组中每个都能满足下述条件 之一 &#xff0c;则可以称其为数组的一种有效划分…

JVM常用排查命令

top命令 top命令是我们最常用的Linux命令之一&#xff0c;它可以实时的显示当前正在执行的进程的CPU使用率&#xff0c;内存使用率等系统信息。top -Hp pid 可以查看线程的系统资源使用情况。 vmstat命令 vmstat是一个指定周期和采集次数的虚拟内存检测工具&#xff0c;可以…

Android 拍照本地图片选择框架适配

前言 通常技术方案的选择、会带来后续一些不可控的东西&#xff0c;这也是没法避免的&#xff0c;程序开发者中同时面对、测试、领导、产品各种要求。同时在网络上查找的资料也只是很旧的&#xff0c;不一定适合新设备&#xff0c;需要推倒重新弄 1、解决方案通过意图选择器做…

如何关闭谷歌浏览器“提示密码泄露”的弹窗

使用谷歌浏览器的时候&#xff0c;经常看见图中的提示&#xff0c;大致意思是&#xff1a; 你的密码被外泄&#xff0c;建议你立即检查和修改密码。 只要你不修改密码&#xff0c;这个弹窗就会不停地弹出来提示你。 那么怎么关闭这个弹窗呢&#xff1f; 第一个方法很简单&am…

情感分析(文本分类)数据集汇总

想在推荐前对评论做一些情感分析方面的工作,参考网上其它博主的博客大概整理了一下情感分析方面的数据集的内容&#xff0c;大致分为两类——多分类和二分类&#xff08;俺比较关注的&#xff09;&#xff0c;中英文的数据集都汇总整理了一下&#xff0c;后面会关注一下相关的比…

processing绘制笑脸

笑脸效果图&#xff1a; processing代码&#xff1a; void setup(){size(1000,1000);//Canvas sizebackground(#ffcc33);//Canvas background color } void draw(){ strokeWeight(12);//face-width12px fill(#ffffcc);//face arc(500,500,200,200,0,TWO_PI);//face-size strok…

智慧公厕:打造智慧城市的环卫明珠

在城市建设中&#xff0c;公共卫生设施的完善和智能化一直是重要环节。而智慧公厕作为智慧城市建设的重要组成部分&#xff0c;发挥着不可替代的作用。本文以智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案例现场实景实图&#xff0c;解读智慧公厕如何助力打…

【物联网应用案例】从0到N,智慧农业的数据价值

智慧农业全方位渗透到农业的每一个环节&#xff0c;云端解决方案更推动了研究人员、农艺师及农民间的密切协作&#xff0c;为研发企业提供了既经济又具扩展性的完美方案。 据IDC预计&#xff0c;到2036年&#xff0c;农场收集的数据量将增加800%以上&#xff0c;这凸显了农业数…

AUKFUKF的MATLAB程序,含源码

adaptive UKF与UKF效果对比 只有一个m文件,直接拖到MATLAB上面就能运行并输出结果了 部分结果 程序源码 % adaptive UKF与UKF效果对比 % author:Evand % 作者联系方式:evandjiang@qq.com(除前期达成一致外,付费咨询) % date: 2023-11-07 % Ver1 clear;clc;close all; %%…

FPGA之加法逻辑运算

由于FPGA需要被反复烧写&#xff0c;它实现组合逻辑的基本结构不可能像ASIC 那样通过固定的与非门来完成&#xff0c;而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求&#xff0c;目前主流FPGA都采用了基于SRAM 工艺的查找表结构。LUT本质上就是一个RAM。它把…

KMP算法模板

KMP算法模板 自用&#xff0c;相关题解参考

每日一练:LeeCode-203. 移除链表元素 【链表+虚拟头结点】

每日一练&#xff1a;LeeCode-203. 移除链表元素 【链表虚拟头结点】 思路设置虚拟头结点 本文是力扣 每日一练&#xff1a;LeeCode-203. 移除链表元素 【链表虚拟头结点】 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode-20…

深圳牵头打造鸿蒙原生应用软件生态 | 百能云芯

深圳市工业和信息化局、深圳市政务服务和数据管理局于3月3日联合印发了《深圳市支持开源鸿蒙原生应用发展2024年行动计划》。这一计划旨在通过政策引导、市场推动、社会协同的方式&#xff0c;将深圳打造成一个鸿蒙原生应用软件生态的中心&#xff0c;推动鸿蒙系统在当地的发展…

选择正确的图片格式:JPEG、PNG、GIF、TIFF、BMP和WebP的全面对比

title: 选择正确的图片格式&#xff1a;JPEG、PNG、GIF、TIFF、BMP和WebP的全面对比 date: 2024/3/4 18:35:42 updated: 2024/3/4 18:35:42 tags: 图片格式JPEG压缩PNG透明度GIF动画TIFF印刷BMP位图WebP压缩 在数字化时代&#xff0c;图片是我们生活和工作中不可或缺的一部分。…

SpringCloud的Consul

0.介绍 Console是一款服务发现、健康检查、分布式配置中心&#xff0c;有单独的web可供配置和查看的Spring家族的一员。 1.下载 https://developer.hashicorp.com/consul/install?product_intentconsul 2.启动 consul agent-dev访问localhost:8500 3 Java使用注册中心 …

Android Stdio Execution failed for task ‘:app:compileDebugKotlin‘ 报错解决

具体报错信息如下&#xff1a; compileDebugJavaWithJavac task (current target is 1.8) and compileDebugKotlin task (current target is 17)jvm target compatibility should be set to the same Java version.很显然&#xff0c;这是一个版本冲突问题&#xff0c;compile…

【JavaEE进阶】使用云服务器实现Linux环境搭建

文章目录 &#x1f343;前言&#x1f332;Linux背景知识&#x1f6a9;Linux 是什么&#xff1f;&#x1f6a9;Linux发行版&#x1f6a9;Linux的优势 &#x1f384;Linux环境搭建&#x1f6a9;环境的搭建方式&#x1f6a9;使用云服务器 &#x1f38b;使用终端软件连接到Linux&am…

ChatGPT数据分析应用——漏斗分析

ChatGPT数据分析应用——漏斗分析 ​ 漏斗分析在数据分析中也比较常用&#xff0c;主要是用于发现各个转化流程中哪个环节有问题。接下来我们让ChatGPT解释这个方法的概念并提供相应的案例。发送如下内容给ChatGPT。 ​ ChatGPT收到上述内容后&#xff0c;返回如下结果。 漏斗…

深入Kafka client

分区分配策略 客户端可以自定义分区分配策略, 当然也需要考虑分区消费之后的offset提交, 是否有冲突。 消费者协调器和组协调器 a. 消费者的不同分区策略, 消费者之间的负载均衡(新消费者加入或者存量消费者退出), 需要broker做必要的协调。 b. Kafka按照消费组管理消费者, …