当前位置: 首页 > news >正文

【C++】做一个飞机空战小游戏(五)——getch()控制两个飞机图标移动(控制光标位置)

  [导读]本系列博文内容链接如下:

【C++】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值

【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动
【C++】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动

【C++】做一个飞机空战小游戏(四)——给游戏添加背景音乐(多线程技巧应用)

【C++】做一个飞机空战小游戏(五)——getch()控制两个飞机图标移动(控制光标位置)

​ 

目录

一、控制光标的位置

(二)为什么要控制光标位置

1、避免控制多个图标移动相互影响

2、消除光标的闪烁现象

(二)如何控制光标的输出位置

二、控制两个飞机图标移动程序

(一)头文件control_plane.h

1、更新键盘指令枚举内容

2、增加一个飞机的结构体类型坐标

3、更新飞机坐标计算函数声明

(二)控制函数库control_plane.cpp

1、增加光标控制函数

2、更新显示飞机图标函数

3、初始化函数

4、更新获取键盘指令函数

5、更新了飞机获取指令后位置计算函数的定义

(二)最终程序

1、主函数

2、头文件control_plane.h

3、库函数control_plane.cpp

三、运行效果


飞机空战游戏,一般都是两个飞机,今天介绍一下如何用getch()通过不同的方向键组控制两个飞机移动。

一、控制光标的位置

(二)为什么要控制光标位置

1、避免控制多个图标移动相互影响

本例中本节之前的代码对飞机位置的控制是通过cout函数输出空格和换行来确定飞机图标x和y坐标,这种方式对于游戏中只有一个被控制图标是可行的,但是要控制多个图标移动就行不通了,因为输出换行和空格时会对另外的图标产生影响。

2、消除光标的闪烁现象

输出换行和空格时,光标会不断移动,所以在移动飞机图标时会有光标闪烁的情况,游戏的体验感不好。

而通过控制光标把光标直接移动到要显示飞机图标的位置,就避免了频繁输出换行和空格的操作,不会对屏幕上其他的图标产生影响,也消除了光标闪烁的情况。

(二)如何控制光标的输出位置

对光标位置的控制,本文参考了以下博文

C++移动输出端的光标代码实现_c++光标_我行我素,向往自由的博客-CSDN博客

代码如下所示,需要引入头文件windows.h,并自定义一个gotoxy(x,y)函数,x,y就是光标输出的位置。

#include<windows.h>
void gotoxy(int x, int y) {COORD pos = { x,y };HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄SetConsoleCursorPosition(hOut, pos);//两个参数分别指定哪个窗口,具体位置
}

二、控制两个飞机图标移动程序

要想实现对两架飞机的控制,需要对代码进行部分更新,更新内容包括以下几方面。

(一)头文件control_plane.h

1、更新键盘指令枚举内容

增加一组控制飞机移动的指令,更新后的内容如下:

//定义移动方向命令枚举类型 
typedef  enum {up_cmd,down_cmd,left_cmd,right_cmd,up_cmd2,down_cmd2,left_cmd2,right_cmd2} direction_cmd;

"up_cmd2,down_cmd2,left_cmd2,right_cmd2"四项为新增加的内容。

2、增加一个飞机的结构体类型坐标

extern location plocation,plocation2;			//声明第二架飞机坐标 

3、更新飞机坐标计算函数声明

因为有两架飞机,需要计算两组坐标,所以在函数声明中增加了标识飞机序号的参量int n,具体代码如下:

//计算出接收指令后的飞机坐标 
location plane_locate(int n,location plct,direction_cmd dircmd);

(二)控制函数库control_plane.cpp

1、增加光标控制函数

void gotoxy(int x, int y) {COORD pos = { x,y };HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄SetConsoleCursorPosition(hOut, pos);//两个参数分别指定哪个窗口,具体位置
}

2、更新显示飞机图标函数

有了控制光标函数之后,就可以把显示飞机图标的函数进行调整了,具体代码如下所示。

//飞机图标刷新函数 
void show_plane(location plct)		//预先定义字符定位显示函数,x是列坐标,y是行坐标,原点(x=0,y=0)位于屏幕左上角 
{int x,y;int i,j;	int rows=sizeof(icon_plane)/sizeof(icon_plane[0]);x=plct.x;y=plct.y;for(i=0;i<rows;i++)				//图标每行前输出x个空格 {gotoxy(x,y+i);              //将光标移动到(x,y+i)位置cout<<icon_plane[i]<<endl;  //按行输出飞机图标}
}

3、初始化函数

初始化函数中增加另外一架飞机的初始位置,具体代码如下所示。

//初始化函数 
void init(void)
{plocation.x=2*r_b/3;				//初始化飞机1图标的x坐标为屏幕横轴最大值的2/3 plocation.y=b_b;					//初始化飞机1图标的y坐标为屏幕纵轴最大值plocation2.x=r_b/3;					//初始化飞机2图标的x坐标为屏幕横轴最大值的1/3 plocation2.y=b_b;					//初始化飞机2图标的y坐标为屏幕纵轴最大值
}

4、更新获取键盘指令函数

因为两架飞机,需要有两组控制飞机移动方向的控制键组合,第一组为双码按键“↑、↓、←、→”四个键,第二组为单码键'w'、's'、'a'、'd'四个键。所以函数中增加了第二组键的返回值。

//获取键盘指令函数 
direction_cmd key(void)
{int key_value1,key_value2;			//声明两个变量,存放键值 key_value1=getch();					//先获取第一个码值	if(key_value1==224)					//如果第一个码值为224,则进行第二个码值的判断 {key_value2=getch();			//先获取第二个码值switch(key_value2){case 72:				//向上方向键 return up_cmd;case 80:				//向下方向键return down_cmd;case 75:				//向左方向键return left_cmd;case 77:				//向右方向键return right_cmd;}}else{switch(key_value1){case 119:				//向上方向键 return up_cmd2;case 115:				//向下方向键return down_cmd2;case 97:				//向左方向键return left_cmd2;case 100:				//向右方向键return right_cmd2;}}		
}

5、更新了飞机获取指令后位置计算函数的定义

参量n代表飞机的序号,不同的飞机响应不同的指令dircmd,然后再根据不同的指令分别计算两架飞机位置。

//计算获得移动指令后飞机的坐标 
location plane_locate(int n,location plct,direction_cmd dircmd)
{int x,y;x=plct.x;y=plct.y;if(n==1){switch(dircmd){case up_cmd:y--;				//字符上移一行,行值y减1if(y<t_b)			//限定y值最小值为0{y=t_b;}break;case down_cmd:y++;				//字符下移一行,行值y加1if(y>b_b)			//限定y高度 {y=b_b;}break;case left_cmd:x--;				//字符左移一列,列值x减1if(x<l_b){x=l_b;			//限定x最小值为0; }break;case right_cmd:x++;				//字符右移一列,列值x加1if(x>r_b){x=r_b;			//限定x宽度}break;}}else if(n==2){switch(dircmd){case up_cmd2:y--;				//字符上移一行,行值y减1if(y<t_b)			//限定y值最小值为0{y=t_b;}break;case down_cmd2:y++;				//字符下移一行,行值y加1if(y>b_b)			//限定y高度 {y=b_b;}break;case left_cmd2:x--;				//字符左移一列,列值x减1if(x<l_b){x=l_b;			//限定x最小值为0; }break;case right_cmd2:x++;				//字符右移一列,列值x加1if(x>r_b){x=r_b;			//限定x宽度}break;}}plct.x=x;plct.y=y;return plct;}

(二)最终程序

1、主函数

#include "control_plane.h"
using namespace std;location plocation;
location plocation2;int main(int argc, char** argv) {	init();	//初始化					 bgmusic();//播放背景音乐while(1)					//循环等待键盘指令 {system("cls");			//清屏show_plane(plocation);	//刷新飞机1图标show_plane(plocation2);	//刷新飞机2图标 		dir_cmd=key();			//获取按键指令 //计算收到键盘指令后的两架飞机坐标 plocation=plane_locate(1,plocation,dir_cmd);plocation2=plane_locate(2,plocation2,dir_cmd);	}return 0; 	
}

2、头文件control_plane.h

#ifndef CONTROL_PLANE_H
#define CONTROL_PLANE
#include <iostream>
#include <string>
#include<stdlib.h>
#include<windows.h>
#include <pthread.h>//导入线程头文件库
#include <mmsystem.h> //导入声音头文件库
#pragma comment(lib,"winmm.lib")//导入声音的链接库
#define _CRT_SECURE_NO_WARNINGS 
using namespace std;#define t_b 0  	//图形显示区域上侧边界 
#define l_b 0	//图形显示区域左侧边界
#define r_b 100	//图形显示区域右侧边界
#define b_b 20	//图形显示区域下侧边界//定义飞机造型 
const string icon_plane[]={"    ■   ","■  ■  ■","■■■■■","■  ■  ■","    ■   ","  ■■■ "};//定义图标坐标结构体 
typedef struct{int x;int y;
} location;//定义移动方向命令枚举类型 
typedef  enum {up_cmd,down_cmd,left_cmd,right_cmd,up_cmd2,down_cmd2,left_cmd2,right_cmd2} direction_cmd;extern location plocation,plocation2;			//声明飞机坐标 
static direction_cmd dir_cmd; 		//声明存放按键码值的两个变量//声明刷新飞机位置函数 
void show_plane(location plct);//获取键盘指令 
direction_cmd key(void);//计算出接收指令后的飞机坐标 
location plane_locate(int n,location plct,direction_cmd dircmd);//计算出接收指令后的飞机坐标 
location plane_locate2(location plct,direction_cmd dircmd);void init(void);void* thread_bgmusic(void* arg);
void play_bgmusic();
void bgmusic();#endif

3、库函数control_plane.cpp

#include <iostream>
#include "conio.h"
#include <string>
#include "control_plane.h"
#include<windows.h>
using namespace std;//初始化函数 
void init(void)
{plocation.x=2*r_b/3;				//初始化飞机图标的x坐标为屏幕横轴最大值的一半 plocation.y=b_b;					//初始化飞机图标的y坐标为屏幕纵轴最大值plocation2.x=r_b/3;					//初始化飞机图标的x坐标为屏幕横轴最大值的一半 plocation2.y=b_b;					//初始化飞机图标的y坐标为屏幕纵轴最大值
}//********************************************************************************//以下三个函数为播放背景音乐功能 
//********************************************************************************//播放一遍背景音乐 void play_bgmusic() {  mciSendString(TEXT("open hero.mp3 alias s1"),NULL,0,NULL);mciSendString(TEXT("play s1"),NULL,0,NULL);Sleep(153*1000);//153*1000意思是153秒,是整首音乐的时长 mciSendString(TEXT("close S1"),NULL,0,NULL); }//循环播放音乐线程函数 
void* thread_bgmusic(void* arg) //
{ while(1){  	play_bgmusic();}
} //创建音乐播放线程,开始循环播放音乐 
void bgmusic()
{pthread_t tid; pthread_create(&tid, NULL, thread_bgmusic, NULL);
}void gotoxy(int x, int y) {COORD pos = { x,y };HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄SetConsoleCursorPosition(hOut, pos);//两个参数分别指定哪个窗口,具体位置
}//飞机图标刷新函数 
void show_plane(location plct)		//预先定义字符定位显示函数,x是列坐标,y是行坐标,原点(x=0,y=0)位于屏幕左上角 
{int x,y;int i,j;	int rows=sizeof(icon_plane)/sizeof(icon_plane[0]);x=plct.x;y=plct.y;for(i=0;i<rows;i++)				//图标每行前输出x个空格 {gotoxy(x,y+i);cout<<icon_plane[i]<<endl;}
}//获取键盘指令函数 
direction_cmd key(void)
{int key_value1,key_value2;			//声明两个变量,存放键值 key_value1=getch();					//先获取第一个码值 if(key_value1==224)					//如果第一个码值为224,则进行第二个码值的判断 {key_value2=getch();			//先获取第二个码值switch(key_value2){case 72:				//向上方向键 return up_cmd;case 80:				//向下方向键return down_cmd;case 75:				//向左方向键return left_cmd;case 77:				//向右方向键return right_cmd;}}else{switch(key_value1){case 119:				//向上方向键 return up_cmd2;case 115:				//向下方向键return down_cmd2;case 97:				//向左方向键return left_cmd2;case 100:				//向右方向键return right_cmd2;}}		
}//计算获得移动指令后飞机的坐标 
location plane_locate(int n,location plct,direction_cmd dircmd)
{int x,y;x=plct.x;y=plct.y;if(n==1){switch(dircmd){case up_cmd:y--;				//字符上移一行,行值y减1if(y<t_b)			//限定y值最小值为0{y=t_b;}break;case down_cmd:y++;				//字符下移一行,行值y加1if(y>b_b)			//限定y高度 {y=b_b;}break;case left_cmd:x--;				//字符左移一列,列值x减1if(x<l_b){x=l_b;			//限定x最小值为0; }break;case right_cmd:x++;				//字符右移一列,列值x加1if(x>r_b){x=r_b;			//限定x宽度}break;}}else if(n==2){switch(dircmd){case up_cmd2:y--;				//字符上移一行,行值y减1if(y<t_b)			//限定y值最小值为0{y=t_b;}break;case down_cmd2:y++;				//字符下移一行,行值y加1if(y>b_b)			//限定y高度 {y=b_b;}break;case left_cmd2:x--;				//字符左移一列,列值x减1if(x<l_b){x=l_b;			//限定x最小值为0; }break;case right_cmd2:x++;				//字符右移一列,列值x加1if(x>r_b){x=r_b;			//限定x宽度}break;}}plct.x=x;plct.y=y;return plct;}//计算获得移动指令后飞机的坐标 
location plane_locate2(location plct,direction_cmd dircmd)
{int x,y;x=plct.x;y=plct.y;switch(dircmd){case up_cmd2:y--;				//字符上移一行,行值y减1if(y<t_b)			//限定y值最小值为0{y=t_b;}break;case down_cmd2:y++;				//字符下移一行,行值y加1if(y>b_b)			//限定y高度 {y=b_b;}break;case left_cmd2:x--;				//字符左移一列,列值x减1if(x<l_b){x=l_b;			//限定x最小值为0; }break;case right_cmd2:x++;				//字符右移一列,列值x加1if(x>r_b){x=r_b;			//限定x宽度}break;}plct.x=x;plct.y=y;return plct;}

三、运行效果

(未完待续) 

相关文章:

【C++】做一个飞机空战小游戏(五)——getch()控制两个飞机图标移动(控制光标位置)

[导读]本系列博文内容链接如下&#xff1a; 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…...

Flask 是什么?Flask框架详解及实践指南

Flask 是一个轻量级的 Python Web 框架&#xff0c;它被广泛用于构建 Web 应用程序和 API。Flask 简单易用&#xff0c;具有灵活性和可扩展性&#xff0c;是许多开发者喜欢用其构建项目的原因。本文将介绍 Flask 是什么以及如何使用它来构建 Web 应用程序&#xff0c;同时提供一…...

C. Mark and His Unfinished Essay - 思维

分析&#xff1a; 直接模拟操作会mle&#xff0c;可以每次复制记录对应源字符串的下标&#xff0c;可以记录每次字符串增加的长度的左右端点下标&#xff0c;可以发现左端点与读入的l是对应的&#xff0c;因此就可以向前移到l的位置&#xff0c;这样层层递归&#xff0c;就能找…...

Java的变量与常量

目录 变量 声明变量 变量的声明类型 变量的声明方式&#xff1a;变量名 变量名的标识符 初始化变量 常量 关键字final 类常量 总结 变量和常量都是用来存储值和数据的基本数据类型存储方式&#xff0c;但二者之间有一些关键差别。 变量 在Java中&#xff0c;每个变…...

C# Blazor 学习笔记(6):热重置问题解决

文章目录 前言热重置问题描述解决方法演示 总结 前言 我最近在使用Blazor的时候&#xff0c;使用了BootstrapBlazor&#xff08;以下简称BB&#xff09;创建模板的时候&#xff0c;发现热重置无效。经过了一上午的折腾&#xff0c;我终于解决了这个问题。 热重置 问题描述 …...

一百四十六、Xmanager——Xmanager5连接Xshell7并控制服务器桌面

一、目的 由于kettle安装在Linux上&#xff0c;Xshell启动后需要Xmanager。而Xmanager7版本受限、没有免费版&#xff0c;所以就用Xmanager5去连接Xshell7 二、Xmanager5安装包来源 &#xff08;一&#xff09;注册码 注册码&#xff1a;101210-450789-147200 &#xff08…...

用Rust实现23种设计模式之 模板方法模式

关注我&#xff0c;学习Rust不迷路&#xff01;&#xff01; 模板方法模式是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤的实现延迟到子类中。以下是模板方法模式的优点和使用场景&#xff1a; 优点&#xff1a; 提高代码复用性&#xff1…...

python与深度学习(十三):CNN和IKUN模型

目录 1. 说明2. IKUN模型2.1 导入相关库2.2 建立模型2.3 模型编译2.4 数据生成器2.5 模型训练2.6 模型保存2.7 模型训练结果的可视化 3. IKUN的CNN模型可视化结果图4. 完整代码 1. 说明 本篇文章是CNN的另外一个例子&#xff0c;IKUN模型&#xff0c;是自制数据集的例子。之前…...

题目:2283.判断一个数的数字计数是否等于数位的值

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2283. 判断一个数的数字计数是否等于数位的值 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 两次遍历。第一次对字符串中每个出现的数字计数。第二次比较数字计数与数位的值是否相等。 解…...

任务14、无缝衔接,MidJourney瓷砖(Tile)参数制作精良贴图

14.1 任务概述 在这个实验任务中,我们将深入探索《Midjourney Ai绘画》中的Tile技术和其在艺术创作中的具有挑战性的应用。此任务将通过理论学习与实践操作相结合的方式,让参与者更好地理解Tile的核心概念,熟练掌握如何在Midjourney平台上使用Tile参数,并实际运用到AI绘画…...

【uniapp APP如何优化】

以下是一些可以进行优化的建议&#xff1a; 1. 减少网络请求次数&#xff1a;尽量避免在首页加载时请求大量数据&#xff0c;可以考虑使用分页加载&#xff0c;或者使用下拉刷新和上拉加载更多的方式。 2. 减小图片大小&#xff1a;使用压缩图片的工具&#xff0c;可以尽可能…...

uni-app——下拉框多选

一、组件components/my-selectCheckbox.vue <template><view class"uni-stat__select"><span v-if"label" class"uni-label-text">{{label &#xff1a;}}</span><view class"uni-stat-box" :class"…...

从excel中提取嵌入式图片的解决方法

1 发现问题 我的excel中有浮动图片和嵌入式图片&#xff0c;但是openpyxl的_image对象只提取到了浮动图片&#xff0c;通过阅读其源码发现&#xff0c;这是因为openpyxl只解析了drawing文件导致的&#xff0c;所以确定需要自己解析 2 解决思路 1、解析出media资源 2、解析…...

python socket 网络编程的基本功

python socket逻辑思维整理 UDP发送步骤&#xff1a; 1 、先建立udp套接字 udp_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 2、利用sendto把数据并指定对端IP和端口&#xff0c;本端端口可以不用指定用自动随机的 udp_socket.sendto(“发送的内容”.encode(“…...

【element-ui】form表单初始化页面如何取消自动校验rules

问题描述&#xff1a;elementUI表单提交页面&#xff0c;初始化页面是获取接口数据&#xff0c;给form赋值&#xff0c;但是有时候这些会是空值情况&#xff0c;如果是空值&#xff0c;再给form表单赋值的话&#xff0c;页面初始化时候进行rules校验会不通过&#xff0c;此时前…...

git 公钥密钥 生成与查看

1.什么是公钥 很多服务器都是需要认证的&#xff0c;ssh认证是其中的一种。在客户端生成公钥&#xff0c;把生成的公钥添加到服务器&#xff0c;你以后连接服务器就不用每次都输入用户名和密码了。 很多git服务器都是用ssh认证方式&#xff0c;你需要把你生成的公钥发送给代码仓…...

数据标注对新零售的意义及人工智能在新零售领域的应用?

数据标签对于新零售至关重要&#xff0c;因为它构成了训练和部署人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;模型的基础。在新零售的背景下&#xff0c;数据标签涉及对数据进行分类、标记或注释以使其能够被机器理解的过程。然后&#xff0c;这些…...

命令模式-请求发送者与接收者解耦

去小餐馆吃饭的时候&#xff0c;顾客直接跟厨师说想要吃什么菜&#xff0c;然后厨师再开始炒菜。去大点的餐馆吃饭时&#xff0c;我们是跟服务员说想吃什么菜&#xff0c;然后服务员把这信息传到厨房&#xff0c;厨师根据这些订单信息炒菜。为什么大餐馆不省去这个步骤&#xf…...

【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…...

3、JSON数据的处理

3.1 介绍 JSON数据 Spark SQL can automatically infer the schema of a JSON dataset and load it as a DataFrame Spark SQL能够自动将JSON数据集以结构化的形式加载为一个DataFrame This conversion can be done using SparkSession.read.json on a JSON file 读取一个JSO…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...