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

基于EasyX库开发的球球大作战游戏

目录

球球大作战

一、开发环境

二、流程图预览

三、代码逻辑

1、初始化时间

2、设置开始界面大小

3、设置开始界面

4、让玩家选择速度

5、设置玩家小球、人机小球、食物的属性

6、一次性把图绘制到界面里

7、进入死循环

8、移动玩家小球

9、移动人机

10、食物刷新

11、画出边界、食物、人机、玩家、小地图,添加击杀数、半径(质量)、玩家名字

12、将内存中的绘图操作批量地绘制到屏幕上,从而提高绘图效率

四、代码预览+运行结果


球球大作战

一、开发环境

VisualStudio专业版:

所需依赖库:EasyX库

二、流程图预览

由于上面的比较模糊,下面分开截取流程图图片

三、代码逻辑

1、初始化时间

starttime();

2、设置开始界面大小

initgraph(WIDTH, HEIGHT);

3、设置开始界面

void start() {setbkcolor(WHITE);                          // 白色背景cleardevice();                              // 初始化背景settextcolor(BLACK);                            // 改字体setbkmode(TRANSPARENT);                 //设置背景是透明的//加载背景图片IMAGE image;loadimage(&image, _T("D:\\桌面\\file2\\球球大作战\\source\\Ball Ball\\x64\\img\\10.jpg"), WIDTH, HEIGHT);//在当前设备上绘制指定图像putimage(0, 0, &image);//加入提示信息settextcolor(WHITE);settextstyle(22, 0, _T("黑体"));outtextxy(50, 480, _T("请选择关卡:"));outtextxy(50, 550, _T("1.小试牛刀"));outtextxy(200, 550, _T("2.炉火纯青"));outtextxy(350, 550, _T("3.登峰造极"));settextstyle(15, 0, _T("宋体"));outtextxy(600, 550, _T("注:按序号选择,默认选择关卡1;游戏中按空格键可以暂停。"));settextcolor(BLACK);settextstyle(22, 0, _T("黑体"));TCHAR s[5];//_stprintf(s, _T("%d"), readCount());_stprintf_s(s, _countof(s), _T("%d"), readCount());outtextxy(810, 200, _T("欢迎进入游戏!"));outtextxy(810, 240, _T("游戏次数:"));outtextxy(910, 240, s);
}

4、让玩家选择速度

void ChooseSpeed() {switch (_getch()) {case 1:speed = 4;case 2:speed = 3;case 3:speed = 2;default:speed = 4;}
}

5、设置玩家小球、人机小球、食物的属性

void setall() {srand((unsigned)time(NULL));                    // 随机数mover.color = RGB(rand() % 256, rand() % 256, rand() % 256);        // 随机颜色mover.life = 1;                             // 赋初值1//把玩家的球一直放在屏幕中央mover.x = int(WIDTH * 0.5);mover.y = int(HEIGHT * 0.5);//设置半径mover.r = 20;
​for (int i = 0; i < AINUM; i++) {               // AI 的属性ai[i].life = 1;ai[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);//ai[i].r = float(rand() % 10 + 10);ai[i].r = 20;ai[i].x = rand() % (MAPW - int(ai[i].r + 0.5)) + int(ai[i].r + 0.5);ai[i].y = rand() % (MAPH - int(ai[i].r + 0.5)) + int(ai[i].r + 0.5);}
​for (int i = 0; i < FNUM; i++) {                // 食物的属性food[i].eat = 1;food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);food[i].x = rand() % MAPW;food[i].y = rand() % MAPH;food[i].type = rand() % 10 + 1;}
​pBuffer = GetImageBuffer(NULL);                 // 获取显存指针setbkcolor(WHITE);                          // 白色背景cleardevice();                              // 初始化背景settextcolor(LIGHTRED);                     // 改字体//设置背景是透明的setbkmode(TRANSPARENT);settextstyle(16, 0, _T("宋体"));
​
}

6、一次性把图绘制到界面里

BeginBatchDraw();

7、进入死循环

8、移动玩家小球

void move(BALL* ball) {if (ball->r <= 0)ball->life = false;if (ball->life == false) {                      // 判定游戏是否接束HWND hwnd = GetHWnd();MessageBox(hwnd, _T("你被吃了"), _T("游戏结束"), MB_ICONEXCLAMATION);endtime();
​}
​if (eaten + ai_eaten == AINUM)                  // 是否吃掉所有 AI{HWND hwnd = GetHWnd();MessageBox(hwnd, _T("恭喜过关"), _T("游戏结束"), MB_OK | MB_ICONEXCLAMATION);   // 结束endtime();}
​for (int i = 0; i < AINUM; i++) {               // 玩家吃 AI 判定if (ball->r >= ai[i].r) {if (ai[i].life == 0)    continue;if (DISTANCE(ball->x, ball->y, ai[i].x, ai[i].y) < (4 / 5.0 * (ball->r + ai[i].r))) {ai[i].life = 0;                 //AI被吃ball->r = sqrt(ai[i].r * ai[i].r + ball->r * ball->r);eaten++;}}}
​for (int n = 0; n < FNUM; n++) {                // 玩家吃食物if (food[n].eat == 0)   continue;if (DISTANCE(ball->x, ball->y, food[n].x, food[n].y) < ball->r) {ball->r += 4 / ball->r;             // 增加面积food[n].eat = 0;                        // 食物被吃}}
​static int mx = 0, my = 0;                      // 记录偏移量
​//判断怎么移动if (GetAsyncKeyState(VK_UP) && (ball->y - ball->r > 0 && ball->y <= (MAPH - ball->r + 10))) {ball->y -= speed;my += speed;}if (GetAsyncKeyState(VK_DOWN) && (ball->y - ball->r >= -10 && ball->y < (MAPH - ball->r))) {ball->y += speed;my -= speed;}if (GetAsyncKeyState(VK_LEFT) && ball->x - ball->r > 0 && (ball->x <= (MAPW - ball->r + 10))) {ball->x -= speed;mx += speed;}if (GetAsyncKeyState(VK_RIGHT) && ball->x - ball->r >= -10 && (ball->x < (MAPW - ball->r))) {ball->x += speed;mx -= speed;}
​//判断是否输入其他用于退出、暂停、继续的按键if (GetAsyncKeyState(VK_SPACE)) {settextcolor(WHITE);settextstyle(32, 0, _T("宋体"));outtextxy(384 - mx, 350 - my, _T("游戏已暂停!"));outtextxy(20 - mx, 500 - my, _T("(ESC)退出"));outtextxy(780 - mx, 500 - my, _T("(回车键)继续"));FlushBatchDraw();_getch();if (GetAsyncKeyState(VK_ESCAPE))exit(0);else_getch();}
​setorigin(mx, my);                          //坐标修正
}

9、移动人机

void AI() {for (int i = 0; i < AINUM; i++) {               // AI 吃玩家if (ai[i].r > mover.r) {if (DISTANCE(mover.x, mover.y, ai[i].x, ai[i].y) < (ai[i].r + mover.r)) {ai[i].r = sqrt(ai[i].r * ai[i].r + mover.r * mover.r);mover.life = 0;mover.r = 0;}}for (int j = 0; j < AINUM; j++) {           // AI 吃 AIif (ai[i].r > ai[j].r) {if (ai[j].life == 0) continue;if (DISTANCE(ai[i].x, ai[i].y, ai[j].x, ai[j].y) < (ai[i].r + ai[j].r)) {ai[i].r = sqrt(ai[i].r * ai[i].r + ai[j].r * ai[j].r);ai[j].life = 0;ai[j].r = 0;ai_eaten++;}}}
​double min_DISTANCE = 100000;int min = -1;for (int k = 0; k < AINUM; k++) {           // AI 靠近 AIif (ai[i].r > ai[k].r && ai[k].life != 0) {if (DISTANCE(ai[i].x, ai[i].y, ai[k].x, ai[k].y) < min_DISTANCE) {min_DISTANCE = DISTANCE(ai[i].x, ai[i].y, ai[k].x, ai[k].y);min = k;}}}if ((min != -1) && (rand() % 2 == 1) && (ai[i].y - ai[i].r > 0 && ai[i].y <= (MAPH - ai[i].r + 10))) {if (rand() % 2) {if (ai[i].x < ai[min].x)ai[i].x += speed ;elseai[i].x -= speed ;}else {if (ai[i].y < ai[min].y)ai[i].y += speed ;elseai[i].y += speed ;}}for (int n = 0; n < FNUM; n++) {            // AI 吃食物if (food[n].eat == 0) continue;if (DISTANCE(ai[i].x, ai[i].y, food[n].x, food[n].y) < ai[i].r) {ai[i].r += 4 / ai[i].r;food[n].eat = 0;}}}
}

10、食物刷新

void Food() {for (int i = 0; i < FNUM; i++) {				// 食物刷新if (food[i].eat == 0) {food[i].eat = 1;food[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);food[i].x = rand() % MAPW;food[i].y = rand() % MAPH;food[i].type = rand() % 10 + 1;}}
}

11、画出边界、食物、人机、玩家、小地图,添加击杀数、半径(质量)、玩家名字

void draw() {float asp = 1;//清空裁剪区,超出区域的绘图操作将被裁剪掉clearcliprgn();IMAGE image;loadimage(&image, _T(""), WIDTH * 4, HEIGHT * 4);putimage(0, 0, &image);//绘画出一个矩形框setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 20);		// 改变笔的颜色、状态setlinecolor(RGB(0, 100, 0));line(-20, MAPH + 20, -20, -20);				// 左竖line(-20, MAPH + 20, MAPW + 20, MAPH + 20);		// 上横line(-20, -20, MAPW + 20, -20);				// 下横line(MAPW + 20, -20, MAPW + 20, MAPH + 20);		// 右竖setfillcolor(GREEN);//当球接近边界时,会在边界外侧绘制一个绿色的填充矩形,// 是用来表示碰撞或者边界的视觉效果if (mover.x - 0.5 * WIDTH / asp < -20)floodfill(-20 - 11, mover.y, RGB(0, 100, 0));if (mover.x + 0.5 * WIDTH / asp > MAPW + 20)floodfill(MAPW + 20 + 11, mover.y, RGB(0, 100, 0));if (mover.y - 0.5 * HEIGHT / asp < -20)floodfill(mover.x, -20 - 11, RGB(0, 100, 0));if (mover.y + 0.5 * HEIGHT / asp > MAPH + 20)floodfill(mover.x, MAPH + 20 + 11, RGB(0, 100, 0));setlinecolor(WHITE);setlinestyle(PS_NULL);for (int i = 0; i < FNUM; i++) {				// 画出食物if (food[i].eat == 0) continue;setfillcolor(food[i].color);switch (food[i].type) {					// 形状case 1:		solidellipse(food[i].x, food[i].y, food[i].x + 2, food[i].y + 4); break;case 2:		solidellipse(food[i].x, food[i].y, food[i].x + 4, food[i].y + 2);	break;case 3:		solidrectangle(food[i].x, food[i].y, food[i].x + 4, food[i].y + 2); break;case 4:		solidrectangle(food[i].x, food[i].y, food[i].x + 2, food[i].y + 4); break;case 5:		solidroundrect(food[i].x, food[i].y, food[i].x + 2, food[i].y + 4, 2, 2); break;case 6:		solidroundrect(food[i].x, food[i].y, food[i].x + 4, food[i].y + 2, 2, 2); break;case 7:		solidroundrect(food[i].x, food[i].y, food[i].x + 4, food[i].y + 2, 4, 2); break;case 8:		solidroundrect(food[i].x, food[i].y, food[i].x + 4, food[i].y + 2, 2, 4); break;case 9:		solidroundrect(food[i].x, food[i].y, food[i].x + 4, food[i].y + 2, 1, 1); break;case 10:	fillcircle(food[i].x, food[i].y, 4); break;}}for (int i = 0; i < AINUM; i++) {				// 画 AIif (ai[i].life == 0) continue;setfillcolor(ai[i].color);//绘圆fillcircle(ai[i].x, ai[i].y, int(ai[i].r + 0.5));}setfillcolor(mover.color);						// 画玩家fillcircle(mover.x, mover.y, int(mover.r + 0.5));IMAGE map(150, 100);							// 小地图SetWorkingImage(&map);setbkcolor(RGB(120, 165, 209));					// 浅灰色背景cleardevice();for (int i = 0; i < AINUM; i++)				// 画 AI(小地图){if (ai[i].life == 0) continue;setfillcolor(ai[i].color);fillcircle(ai[i].x * 150 / WIDTH / 4, ai[i].y * 100 / HEIGHT / 4, int(ai[i].r / 28 + 1.5));}setfillcolor(mover.color);						// 画玩家(小地图)fillcircle(mover.x * 150 / WIDTH / 4, mover.y * 100 / HEIGHT / 4, int(mover.r / 28 + 3.5));setlinecolor(RGB(0, 100, 0));SetWorkingImage();							// 恢复绘图背景putimage(mover.x + int(0.5 * WIDTH) - 150, mover.y - int(0.5 * HEIGHT), 150, 100, &map, 0, 0);						// 画出小地图setlinecolor(LIGHTBLUE);setlinestyle(PS_SOLID | PS_JOIN_BEVEL, 4);line(mover.x + int(0.5 * WIDTH) - 151, mover.y - int(0.5 * HEIGHT), mover.x + int(0.5 * WIDTH) - 151, mover.y - int(0.5 * HEIGHT) + 99);	// 地图边框线line(mover.x + int(0.5 * WIDTH) - 151, mover.y - int(0.5 * HEIGHT) + 99, mover.x + int(0.5 * WIDTH), mover.y - int(0.5 * HEIGHT) + 99);	// 地图边框线setlinestyle(PS_NULL);							// 恢复笔TCHAR str[32];swprintf_s(str, _T("质量:%.1fg  击杀:%d"), mover.r, eaten);settextcolor(WHITE);							// 改字体outtextxy(mover.x - int(0.5 * WIDTH), mover.y - int(0.5 * HEIGHT), str);settextcolor(WHITE);outtextxy(mover.x - 20, mover.y, _T("itlsl"));
}

12、将内存中的绘图操作批量地绘制到屏幕上,从而提高绘图效率

FlushBatchDraw();

四、代码预览+运行结果

源代码+流程图+README资源:https://download.csdn.net/download/2403_82436914/90623088?spm=1001.2014.3001.5503

相关文章:

基于EasyX库开发的球球大作战游戏

目录 球球大作战 一、开发环境 二、流程图预览 三、代码逻辑 1、初始化时间 2、设置开始界面大小 3、设置开始界面 4、让玩家选择速度 5、设置玩家小球、人机小球、食物的属性 6、一次性把图绘制到界面里 7、进入死循环 8、移动玩家小球 9、移动人机 10、食物刷新…...

ES和MySQL概念对比

基本概念 ES和MySQL都属于数据库&#xff0c;不过各有各的特性&#xff0c;大致使用方法与MySQL类似并无区别。 MySQL&#xff1a;擅长事务持有ACID的特性&#xff0c;确保数据的一致性和安全。 ES&#xff1a;持有倒排索引&#xff0c;适合海量数据搜索和分析。 ES和MySQL如何…...

Kotlin 与 Jetpack Compose 参数设计完全指南

作为 Kotlin 和 Jetpack Compose 开发者&#xff0c;合理的参数设计能显著提升代码的可读性和易用性。本文将系统整理各类参数规则&#xff0c;帮助您编写更优雅的 API。 一、基础参数规则 1. 方法参数 // 基础定义 fun 方法名(必需参数: 类型, 可选参数: 类型 默认值): 返…...

dea如何使用git

在 IntelliJ IDEA 中使用 Git 的详细步骤如下&#xff0c;分为配置、基础操作和高级功能&#xff0c;适合新手快速上手&#xff1a; ​一、配置 Git​ ​安装 Git​ 下载并安装 Git&#xff0c;安装时勾选“Add to PATH”。验证安装&#xff1a;终端输入 git --version 显示版本…...

git -- 版本控制介绍(分布式系统),git介绍(对待数据的方式,本地执行,保证完整性,只添加数据,git文件/项目的三种状态,基本的工作流程)

目录 版本控制 介绍 分布式版本控制系统 git 介绍 与多个远程仓库协作 对待数据的方式 本地执行操作 保证完整性 只添加数据 三种状态 工作区 暂存区 Git 目录 基本的git工作流程 版本控制 介绍 一种记录一个或多个文件内容变化的系统&#xff0c;它可以让你在未来…...

嵌入式软件OTA升级,有哪几种Flash划分方式?

第一次接触嵌入式软件OTA升级的时候&#xff0c;我整个人也是懵的。Flash划分&#xff1f;什么鬼&#xff1f;不是直接把新程序烧进去就完事了吗&#xff1f; 结果一上手才发现&#xff0c;这玩意没那么简单&#xff0c;尤其是Flash怎么分&#xff0c;如果Flash划分没弄好&…...

游戏引擎学习第226天

引言&#xff0c;计划 我们目前的目标是开始构建“元游戏”结构。所谓元游戏&#xff0c;指的是不直接属于核心玩法本身&#xff0c;但又是游戏体验不可或缺的一部分&#xff0c;比如主菜单、标题画面、存档选择、选项设置、过场动画等。我们正在慢慢将这些系统结构搭建起来。…...

通过python实现bilibili缓存视频转为mp4格式

需要提前下好ffmpeg import os import fnmatch import subprocess Bilibili缓存的视频&#xff0c;*280.m4s结尾的是音频文件&#xff0c;*050.m4s结尾的是视频&#xff0c;删除16进制下前9个0&#xff0c;即为正常音/视频 使用os.walk模块&#xff0c;遍历每一个目录&#xf…...

Windows 图形显示驱动开发-WDDM 1.2功能—无显示器系统支持

一、架构设计与启动流程 1.1无显示器系统启动与全流程 graph TDA[UEFI固件] -->|FADT.VGA_NOT_PRESENT1| B[Windows Boot Manager]B -->|加载winload.efi| C[内核初始化]C -->|检测显示设备| D{存在GPU?}D -->|是| E[加载WDDM驱动]D -->|否| F[激活MSBDD虚拟…...

低代码 Web 组态

低代码配置式 Web 组态是一种用于创建 Web 应用程序界面的技术&#xff0c;它允许用户通过图形化界面和少量的代码或无需编写大量代码来配置和定制 Web 页面的布局、外观和交互功能。 一、特点 1、低代码或无代码开发&#xff1a;大大降低了开发门槛&#xff0c;无需专业的编程…...

解决7穴连接器的信号完整性问题

在汽车发动机的系统设计中&#xff0c;信号传输是不可或缺的。在信号传输中起着重要作用的一个关键组件是 7 穴连接器&#xff0c;它提供许多重要功能。 但是&#xff0c;这些连接器可能会遇到一些制造商需要解决的问题&#xff0c;知道如何解决 7 腔连接器中的信号完整性问题…...

GDScript快速入门(适合有其它编程语言基础)

GDScript快速入门&#xff08;适合有其它编程语言基础&#xff09; 从零开始学 GDScript Godot 是一款开源、跨平台的游戏引擎&#xff0c;因其轻量、易用和强大的功能而受到广大开发者的喜爱。在 Godot 中&#xff0c;GDScript 是其专为游戏开发设计的脚本语言&#xff0c;具…...

WEB安全--蓝队日志--RCE数据包分析

一、分析数据包内容 攻击者通过URL请求POST传参的方式试图绕过IPS测试RCE漏洞的利用 URL请求中的内容进行urlcode解码后是这样的&#xff1a; http://资产IP/hello.world?-d allow_url_include1 -d auto_prepend_filephp://input 1. -d allow_url_include1&#xff1a; 使…...

springboot项目添加定时任务,用sftp推送zip包到目标服务器

用sftp推送zip包到目标服务器 任务类里面&#xff0c;主要功能是&#xff0c;定时采集三张表的数据&#xff0c;并把数据转换成csv&#xff0c;三份csv压缩成一个加密的zip包&#xff0c;通过sftp推送到指定的目录下 配置类 Data Configuration ConfigurationProperties(pre…...

Mobaxterm 突破 14个 session 限制

mobaxterm 可以说非常好用&#xff0c;但是免费版对会话有限制&#xff0c;对于有很多虚拟机会话需要存储的我来说确实太少了。 当Xterm会话数量到14个时&#xff0c;发现新增的会话没有保存下来&#xff0c;在左侧菜单无法新增保存会话session。 超过限制时&#xff0c;提示…...

体系结构论文(七十一):Quantifying the Impact of Data Encoding on DNN Fault Tolerance

Quantifying the Impact of Data Encoding on DNN Fault Tolerance 研究动机 深度神经网络&#xff08;DNN&#xff09;在硬件运行时可能遇到位翻转&#xff08;bit-flip&#xff09;错误&#xff0c;特别是在能效和面积敏感的平台上&#xff08;如边缘设备、移动端&#xff0…...

学习笔记十一——零基础搞懂 Rust 函数式编程

&#x1f9e0; 零基础搞懂 Rust 函数式编程&#xff1a;到底什么是 “函数式”&#xff1f; Rust 是一门多范式语言&#xff0c;既可以像 C/Java 那样写“命令式代码”&#xff0c;也支持“函数式编程”。但很多刚入门的小伙伴可能会有这些疑问&#xff1a; 函数不就是函数吗&…...

Spark-SQL2

利用IDEA开发Spark-SQL 自定义函数 UDF&#xff1a; UDAF&#xff08;自定义聚合函数&#xff09; 强类型的 Dataset 和弱类型的 DataFrame 都提供了相关的聚合函数&#xff0c; 如 count()&#xff0c;countDistinct()&#xff0c;avg()&#xff0c;max()&#xff0c;min()。…...

python实战案例:玩具销售数据分析

原创 IT小本本 IT小本本 2025年04月12日 22:45 北京 本文将通过一个玩具销售数据的分析案例&#xff0c;展示如何利用 Python 和数据可视化工具从原始数据中提取有价值的商业洞察。将从数据加载、预处理到可视化分析&#xff0c;逐步揭示玩具销售的规律和趋势。 数据准备与加…...

模拟浏览器指纹:生成与定制特定属性

在现代网络环境中&#xff0c;浏览器指纹是一种强大的标识技术&#xff0c;用于区分不同的浏览器实例。通过收集浏览器的各种属性&#xff08;如用户代理、Canvas 指纹、WebGL 特性等&#xff09;&#xff0c;可以生成一个独特的指纹&#xff0c;用于跟踪用户行为或防止欺诈。本…...

vue+vite 减缓首屏加载压力和性能优化

vuevite 减缓首屏加载压力和性能优化 1、预加载项目必需的组件2、模块加载优化3、HMR 热更新优化4 、环境配置优化5、代码模式优化6、高级优化技巧7、架构级优化打包压缩配置 在vuevite构建的工程里面&#xff0c;性能优化分为开发环境和打包后的生产环境&#xff0c;作为开发首…...

狂神SQL学习笔记十三:Delete 和 Truncate 详解

1、删除 保留表的结构不变&#xff0c;清空表的数据 truncate重新设置 自增列 计数器会归零&#xff0c;如果用delete删除&#xff0c;则自增不会变&#xff0c;重新插入数据时自增会从原来的地方开始...

封装实用的时间选择器组件

<template><!-- 使用该时间选择器组件&#xff0c;重置搜索表单的时候&#xff0c;注意得使用async await让重置表单操作完成后再发起请求 --><div class"dateTimePickerSelectWrap"><el-date-pickerv-model"arr":type"dateType…...

关于Blade框架对数字类型的null值转为-1问题

关于Blade框架对数字类型的null值转为-1问题 问题&#xff1a;最近项目遇到了一个问题&#xff0c;SpringBoot项目后端Long类型的数据&#xff0c;如果是NULL的话&#xff0c;返回给前端的时候是-1。如下图&#xff1a; 分析 是由于使用了 blade 框架&#xff0c;项目启动的…...

如何安全地管理固定功能设备?

什么是固定功能设备&#xff1f; 固定功能设备是指具有特定、单一或有限功能的设备&#xff0c;其功能在设计和制造时就被固定下来&#xff0c;通常难以进行大规模的功能扩展或修改。固定功能设备只需要运行特定的应用程序。自动取款机、销售商家用机器、支付站点以及其他专门…...

AttributeError: ‘NoneType‘ object has no attribute ‘pydev_do_not_trace‘

目录 问题描述1. **IDE缓存损坏**(此办法帮我解决问题)2. **PyCharm版本过旧**3. **Python解释器配置问题**4. **第三方库或插件冲突**5. **重置调试配置**其他建议问题原因分析 问题描述 print(ok) Traceback (most recent call last):File "D:\pycharm\PyCharm Communi…...

协享云图分析--3用户模块

用户表 -- 用户表 create table if not exists user (id bigint auto_increment comment id primary key,userAccount varchar(256) not null comment 账号,userPassword varchar(512) not null comment 密码…...

visual studio 如何在 release 模式下调试

在 Visual Studio 中&#xff0c;在 Release 模式下进行调试, 以下是具体步骤&#xff1a; 一、修改项目属性&#xff1a; 右键点击解决方案资源管理器中的项目&#xff0c;选择“属性”。 在“生成”选项卡中&#xff0c;找到“定义 DEBUG 常量”和“定义 TRACE 常量”&…...

课堂总结。

第三章第六节 Spark-SQL核心编程&#xff08;五&#xff09;自定义函数&#xff1a;UDF&#xff1a;val sparkConf new SparkConf().setMaster("local[*]").setAppName("SQLDemo")//创建SparkSession对象val spark :SparkSession SparkSession.builder()…...

JDBC 初认识、速了解

目录 一. JDBC的简介 1. 数据的持久化 2. 什么是JDBC 二. JDBC中常用的类和接口 1. Driver 接口 2. DriverManager 类 3. Connection 接口 4. Statement 接口 5. PreparedStatement接口 6. ResultSet 接口 三. 总结 前言 从现在开始就来讲解JDBC的相关知识了 本文的…...

双指针算法

引入 双指针顾名思义&#xff0c;就是同时使用两个指针&#xff0c;在序列、链表结构上指向的是位置&#xff0c;在树、图结构中指向的是节点&#xff0c;通过或同向移动&#xff0c;或相向移动来维护、统计信息。 ——OI Wiki 接下来我们来看双指针的几个具体使用方法。 板子…...

关于TD算法的笔记【时间差分】

1. TD算法逻辑&#xff1a;TD算法即时间差分算法&#xff0c;结合了蒙特卡洛方法和动态规划思想&#xff0c;通过当前估计值和下一个时间步观测值更新状态价值估计&#xff0c;无需完整episode或环境完整信息。 2. 下一时刻估计值计算&#xff1a;下一时刻估计值为 r_{t 1}\g…...

计算斐波那契数列

1.对于斐波那契数列的理解&#xff1a; (1)常规 该数列由兔子繁衍的想法产生&#xff0c;故又“兔子数列” 其数值为&#xff1a;1、1、2、3、5、8、13、21、34 从数学定义上走&#xff1a;F(0)1&#xff0c;F(1)1, F(n)F(n - 1)F(n - 2)&#xff08;n ≥ 2&#xff0c;n ∈…...

Oracle REGEXP_SUBSTR

在 Oracle 数据库中&#xff0c;REGEXP_SUBSTR 是一个基于正则表达式的字符串处理函数&#xff0c;用于从目标字符串中提取符合特定模式的子串。它比传统的 SUBSTR 函数更灵活&#xff0c;适用于复杂的模式匹配需求。以下是其核心原理、参数解析及实际案例详解&#xff1a; 一…...

无人机自主导航与路径规划技术要点!

一、自主导航与路径规划技术要点 1. 传感器融合 GPS/北斗定位&#xff1a;提供全局定位&#xff0c;但在室内或遮挡环境下易失效。 惯性测量单元&#xff08;IMU&#xff09;**&#xff1a;通过加速度计和陀螺仪实时追踪姿态&#xff0c;弥补GPS信号丢失时的定位空缺。 …...

DDS波形发生器仿真及技术原理

1. 引言 在现代数字信号处理、电路设计以及通信系统中&#xff0c;直接数字频率合成&#xff08;DDS&#xff09;技术因其高速、精细的频率分辨率以及连续相位输出等优点而得到广泛应用。本文主要探讨在DE2-115开发板平台上基于DDS技术实现波形发生器的设计与实践。通过该设计…...

Java使用ANTLR4解析IDL文件

文章目录 前言解析IDL文件准备两个IDL文件准备一个IDL Grammar文件maven配置生成Lexer Parser Listener Visitor代码新建实体类IDL解析遍历器单元测试 参考 前言 接着上篇&#xff1a;Java使用ANTLR4对Lua脚本语法校验&#xff0c;介绍了什么是ANTLR&#xff1f;/ 举了一个hel…...

04-Seata 深度解析:从分布式事务原理到 Seata 实战落地

Seata 深度解析&#xff1a;从分布式事务原理到 Seata 实战落地 一、分布式事务核心理论与挑战 1.1 分布式事务的本质难题 在微服务架构中&#xff0c;一次业务操作可能涉及多个服务的数据库操作&#xff0c;传统单体事务&#xff08;ACID&#xff09;无法跨越服务边界&…...

2025企业增长新引擎:AI Agent驱动人效跃迁|白皮书2.0发布

2025年伊始&#xff0c;一款名为DeepSeek-R1的国产AI大模型以其高性能、低成本等核心优势成功霸榜热搜&#xff0c;在全国乃至全球掀起一场以AI为核心的技术革新与管理变革。 面对这样极具颠覆性的革新命题&#xff0c;易路人力资源科技王天扬先生自2022年起就率团队持续专注于…...

IJCV-2025 | 深圳大学记忆增强的具身导航!ESceme:基于情景记忆的视觉语言导航

作者&#xff1a;Qi Zheng 1 , 2 ^{1,2} 1,2, Daqing Liu 3 ^{3} 3, Chaoyue Wang 3 ^{3} 3, Jing Zhang 2 ^{2} 2, Dadong Wang 4 ^{4} 4, Dacheng Tao 2 ^{2} 2单位&#xff1a; 1 ^{1} 1深圳大学电子与信息工程学院&#xff0c; 2 ^{2} 2悉尼大学计算机科学学院&#xff0c;…...

[第十六届蓝桥杯 JavaB 组] 真题 + 经验分享

A&#xff1a;逃离高塔(AC) 这题就是简单的签到题&#xff0c;按照题意枚举即可。需要注意的是不要忘记用long&#xff0c;用int的话会爆。 &#x1f4d6; 代码示例&#xff1a; import java.io.*; import java.util.*; public class Main {public static PrintWriter pr ne…...

《分布式软总线:网络抖动下的数据传输“定海神针”》

在当下&#xff0c;智能设备之间的互联互通已成为生活与工作的刚需。分布式软总线作为实现这一愿景的关键技术&#xff0c;正日益凸显其重要性。然而&#xff0c;网络环境的复杂性&#xff0c;尤其是网络抖动频繁的情况&#xff0c;给分布式软总线的数据传输带来了严峻挑战。如…...

C++函数

函数 为什么要使用函数 已经有main函数&#xff0c;为什么还要自定义函数&#xff1f;&#xff1a;“避免重复制造轮子”&#xff0c;提高开发效率 函数的定义 函数的设计方法&#xff1a;先确定函数的功能、确定函数的参数、是否需要参数&#xff0c;参数的个数&#xff0c…...

FreeRTOS菜鸟入门(五)·空闲任务与阻塞延时的实现

目录 1. 实现空闲任务 1.1 定义空闲任务的栈 1.2 定义空闲任务的任务控制块 1.3 创建空闲任务 2. 实现阻塞延时 2.1 vTaskDelay()函数 2.2 修改 vTaskSwitchContext()函数 3. SysTick 中断服务函数 4. SysTick 初始化函数 通过之前我们了解知道&#xff0c;任…...

PCIe 学习笔记(一)

系列文章目录 【PCIe】链路测试&#xff0c;数字工程师也要会看高速信号眼图&#xff01; 【PCIe】链路训练状态机(LTSSM) - PCIe链路建立过程概述 【PCIe】PCIe设备的BDF与系统枚举过程 文章目录 系列文章目录PCIe LTSSM**1. 链路训练状态&#xff08;Training States&#…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——LED、按键测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试4.1 LED…...

深度为16,位宽8bit的单端口SRAM——学习记录

链接&#xff1a; 【Verilog HDL 训练】第 13 天&#xff08;存储器、SRAM&#xff09;-云社区-华为云 module sram #(parameter ADDR_BITS4)(input clk,input [ 7:0] addr,input [ 7:0] din,input ce,input we,output reg [ 7:0] dout);localparam MEM_DEPTH 1<<ADDR_…...

面向对象编程

在面向对象编程中&#xff0c;除了通过创建类的实例来访问其属性和方法外&#xff0c;还可以通过在一个类里创建另一个类的属性&#xff08;本质上也是持有另一个类的实例引用&#xff09;的方式来访问该类的属性和方法。下面为你详细解释这两种方式&#xff1a; 1. 通过创建实…...

远程登录一个Linux系统,如何用命令快速知道该系统属于Linux的哪个发行版,以及该服务器的各种配置参数,运行状态?

远程登录一个Linux系统&#xff0c;如何用命令快速知道该系统属于Linux的哪个发行版&#xff0c;以及该服务器的各种配置参数&#xff0c;运行状态&#xff1f; 查看Linux发行版信息 查看发行版名称和版本&#xff1a; cat /etc/*-release或 lsb_release -a查看内核版本&#…...

简单socket通信,回显 服务器程序与客户端程序之间的通信。

Socket 通信编程是一种基于网络的通信方式&#xff0c;允许不同主机上的程序通过网络进行数据交换。 实现结构try catch&#xff1a; 前情了解&#xff1a; 1.如何创建服务器端 定义ServerSocket套接字&#xff0c;需要等待客户端连接&#xff0c;阻塞&#xff0c;直到接入连接…...