企业网站建设安阳/新冠疫情最新消息今天
环境要求:
1、VS2015以上
2、成功安装并配置图形库
项目注意事项:代码复制好以后,把下面的字符集改为多字节字符集
第 1 节 项目需求
实现一款推箱子游戏,效果如下图所示 , 具体规则:1. 箱子只能推动而不能拉动;2. 如果箱子前一格是地板或箱子目的地,则可以推动一个箱子往前走一格,如果箱子已经在箱子目的地则不能再推动;3. 推箱子的小人不能从箱子目的地上直接穿过;4. 注意不要把箱子推到死角上,不然就无法再推动它了;5. 所有箱子都成功推到箱子目的地,游戏结束,过关成功!
第 2 节 项目实现
2.1 模块划分
2.1.1 地图初始化
搭台唱戏
地图表示:
1、游戏道具显示(墙、箱子、箱子目的地、小人、地板)2、便于程序在游戏过程中进行逻辑判断和控制小人向前一步的动作控制3、 判断游戏结果
道具表示:

编码实现:
#include <graphics.h>
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
#define RATIO 61
#define SCREEN_WIDTH 960
#define SCREEN_HEIGHT 768
#define LINE 9
#define COLUMN 12
#define START_X 100
#define START_Y 150
IMAGE images[6];
/*游戏地图*/
int map[LINE][COLUMN] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },{ 0, 1, 4, 1, 0, 2, 1, 0, 2, 1, 0, 0 },
{ 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0 },
{ 0, 1, 0, 2, 0, 1, 1, 4, 1, 1, 1, 0 },
{ 0, 1, 1, 1, 0, 3, 1, 1, 1, 4, 1, 0 },
{ 0, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 0 },
{ 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
int main(void) {IMAGE bg_img;//搭台唱戏initgraph(SCREEN_WIDTH, SCREEN_HEIGHT);loadimage(&bg_img, _T("blackground.bmp"), SCREEN_WIDTH,SCREEN_HEIGHT, true);putimage(0, 0, &bg_img);//加载道具图标loadimage(&images[0], _T("wall.bmp"), RATIO, RATIO, true);loadimage(&images[1], _T("floor.bmp"), RATIO, RATIO, true);loadimage(&images[2], _T("des.bmp"), RATIO, RATIO, true);loadimage(&images[3], _T("man.bmp"), RATIO, RATIO, true);loadimage(&images[4], _T("box.bmp"), RATIO, RATIO, true);loadimage(&images[5], _T("box.bmp"), RATIO, RATIO, true);for (int i = 0; i < LINE; i++) {for (int j = 0; j < COLUMN; j++) {putimage(START_X + j * RATIO, START_Y + i * RATIO,&images[map[i][j]]);}}system("pause");return 0;
}
2.1.2 热键控制
热键定义:
左 => a下 => s上 => w右 => d退出 => q
#include <conio.h>
//控制键 上、下、左、右 控制方向,'q' 退出
#define KEY_UP 'w' //char 'a'
#define KEY_LEFT 'a'
#define KEY_RIGHT 'd'
#define KEY_DOWN 's'
#define KEY_QUIT 'q'
//游戏环节
bool quit = false;
do {if (_kbhit()) { //玩家按键char ch = _getch();if (ch == KEY_UP) {gameControl(UP);}else if (ch == KEY_DOWN) {gameControl(DOWN);}else if (ch == KEY_LEFT) {gameControl(LEFT);}else if (ch == KEY_RIGHT) {gameControl(RIGHT);}else if (ch == KEY_QUIT) {quit = true;}}Sleep(100);
} while (quit == false); //!quit
2.1.3 推箱子控制
/**********************************************
*实现游戏四个方向(上、下、左、右)的控制
* 输入:
* direct - 人前进方向
* 输出: 无
**********************************************/
void gameControl(enum _DIRECTION direct) {struct _POS next_pos = man;struct _POS next_next_pos = man;switch (direct) {case UP:next_pos.x--;next_next_pos.x -= 2;break;case DOWN:next_pos.x++;next_next_pos.x += 2;break;case LEFT:next_pos.y--;next_next_pos.y -= 2;break;case RIGHT:next_pos.y++;next_next_pos.y += 2;break;}//宏展开 next_pos.x>=0 && next_pos.x<LINE && next_pos.y>=0 &&next_pos.y < COLUMNif (isValid(next_pos) && map[next_pos.x][next_pos.y] == FLOOR) {//人的前方是地板changeMap(&next_pos, MAN); //小人前进一格changeMap(&man, FLOOR);man = next_pos;}else if (isValid(next_next_pos) && map[next_pos.x][next_pos.y] ==BOX) {//人的前方是箱子//两种情况,箱子前面是地板或者是箱子目的地if (map[next_next_pos.x][next_next_pos.y] == FLOOR) {changeMap(&next_next_pos, BOX);changeMap(&next_pos, MAN); //小人前进一格changeMap(&man, FLOOR);man = next_pos;}else if (map[next_next_pos.x][next_next_pos.y] == BOX_DES) {changeMap(&next_next_pos, HIT);changeMap(&next_pos, MAN); //小人前进一格changeMap(&man, FLOOR);man = next_pos;}}
}
2.1.4 游戏结束
/**********************************************
*判断游戏是否结束,如果不存在任何一个箱子目的地,就代表游戏结束
*输入: 无
*返回值:
* true - 游戏结束 false - 游戏继续
**********************************************/
bool isGameOver() {for (int i = 0; i < LINE; i++) {for (int j = 0; j < COLUMN; j++) {if (map[i][j] == BOX_DES) return false;}}return true;
}
/**********************************************
*游戏结束场景,在玩家通关后显示
*输入:
* bg - 背景图片变量的指针
*返回值: 无
**********************************************/
void gameOverScene(IMAGE* bg) {putimage(0, 0, bg);settextcolor(WHITE);RECT rec = { 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT };settextstyle(20, 0, _T("宋体"));drawtext(_T("恭喜您~ \n 您终于成为了一个合格的搬箱子老司机!"),&rec, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
//main 函数中
if (isGameOver()) {gameOverScene(&bg_img);quit = true;
}
3、完整代码实现:
box_main.cpp:
#pragma once#include"box_man.h"int main() {initgraph(WEIGHT, HEIGHT);IMAGE bg_img;//参数分别表示图片变量的地址,图片的路径,图片的高度,宽度,是否要拉伸//用_T()是为了进行编码转换,也可以更改项目属性——高级——多字符集loadimage(&bg_img, _T("blackground.bmp"), WEIGHT, HEIGHT, true);//加载图片到内存putimage(0, 0, &bg_img);//把图片显示到窗口,参数分别表示坐标x,坐标y(从左上角开始计算),图片变量地址//加载道具loadimage(&images[WALL], _T("wall_right.bmp"), RATIO, RATIO, true);//墙loadimage(&images[FLOOR], _T("floor.bmp"), RATIO, RATIO, true);//地板loadimage(&images[BOX_DES], _T("des.bmp"), RATIO, RATIO, true);//目的地loadimage(&images[MAN], _T("man.jpg"), RATIO, RATIO, true);//小人loadimage(&images[BOX], _T("box.jpg"), RATIO, RATIO, true);//箱子loadimage(&images[HIT], _T("des.jpg"), RATIO, RATIO, true);//目标命中,地图刚开始时没有数字5的,因此这个到后面判断游戏才发挥作用//加载到地图上for (int i = 0; i < LINE; i++) {for (int j = 0; j < COLUMN; j++) {if (map1[i][j] == MAN) {//找到小人的位置man.x = i;man.y = j;}putimage(WEIGHT_BIAS + j * RATIO, HEIGHT_BIAS + i * RATIO, &images[map1[i][j]]);//核心代码段!!这个代码非常漂亮,利用行列坐标直接求出图片的位置}}//进入游戏环节bool quit = false;do{if (_kbhit()) //玩家有敲击键盘的操作{char ch = _getch(); //获取敲击的热键switch (ch){case 'w':gameControl(UP);break;case 'a':gameControl(LEFT);break;case 's':gameControl(DOWN);break;case 'd':gameControl(RIGHT);break;case 'q':quit = true;break;default:break;}Sleep(100); //因为一直在循环,一直在消耗CPU,休眠可以节约CPU资源if (isGameOver()) { //游戏结束GameOverField(&bg_img);quit = true;}} } while (quit == false);//游戏结束system("pause");closegraph();return 0;
}
function.cpp:
#include<iostream>
#include<iostream>
#include<Windows.h>
#include<graphics.h>
#include<stdlib.h>
#include<string>
#include<conio.h> //获取键盘的热键
#include<mmsystem.h>//音乐头文件
#pragma comment(lib,"winmm.lib")//支持音乐播放的库文件
using namespace std;#define WEIGHT 1190 //游戏窗口的宽度
#define HEIGHT 800 //游戏窗口的高度#define LINE 9 //地图的行数
#define COLUMN 12 //地图的列数#define KEY_UP 'w' //上键
#define KEY_LEFT 'a' //左键
#define KEY_DOWN 's' //下键
#define KEY_RIGHT 'd' //右键
#define KEY_QUIT 'q' //退出#define WEIGHT_BIAS 300 //地图离整个画布的横向偏移
#define HEIGHT_BIAS 150 //地图离整个画布的纵向偏移
#define RATIO 61 //小人物、强、箱子等元素的长和宽//把判断条件用宏来替换
#define isValid(pos) pos.x >= 0 && pos.x < LINE && pos.y >= 0 && pos.y < COLUMN && map1[pos.x][pos.y]//小人所在二维数组的位置,行数和列数
struct _POS {//很多开源项目结构体名用下划线开头int x;int y;
};
struct _POS man;typedef enum _DIRECTION {UP,DOWN,LEFT,RIGHT
}DIRECTION;//用枚举定义道具
enum _PROPS {WALL, //墙FLOOR, //地板BOX_DES, //目的地MAN, //小人BOX, //箱子HIT, //命中目标ALL //为什么最后还要定义一个ALL,为了定义下面images数组的长度,这是顶尖项目的经验
};IMAGE images[ALL]; //存放各类道具图片变量//地图1,假设后面还要做几个关卡,那么map1表示第一关
int map1[LINE][COLUMN] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
{ 0, 1, 4, 1, 0, 2, 1, 0, 2, 1, 0, 0 },
{ 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0 },
{ 0, 1, 0, 2, 0, 1, 1, 4, 1, 1, 1, 0 },
{ 0, 1, 1, 1, 0, 3, 1, 1, 1, 4, 1, 0 },
{ 0, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 0 },
{ 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};/*
小人发生移动时,改变地图中游戏的道具line 地图的行下标colum 地图的列下标pros 道具的类型
*/void changeMap(struct _POS* pos, enum _PROPS pros) {map1[pos->x][pos->y] = pros; //更改地图的状态putimage(WEIGHT_BIAS + pos->y * RATIO, HEIGHT_BIAS + pos->x * RATIO, &images[pros]);}/*
实现游戏四个方向的移动
这里有很大的优化空间
*/
//版本1
//void gameControl(DIRECTION direct) {
// if (direct == UP) {//先处理前进方向是地板的情况
// if (man.x - 1 >= 0 && map1[man.x - 1][man.y] == FLOOR) {//防御式编程,判断坐标的合法性
// changeMap(man.x-1, man.y, MAN); //小人的往上走一格
// changeMap(man.x, man.y, FLOOR);//小人原来的位置设置为地板
// man.x = man.x - 1;//调整小人的坐标
// }
// }
// else if (direct == DOWN) {
// if (man.x + 1 < LINE && map1[man.x + 1][man.y] == FLOOR) {
// changeMap(man.x + 1, man.y, MAN); //小人的往下走一格
// changeMap(man.x, man.y, FLOOR);//小人原来的位置设置为地板
// man.x = man.x + 1;//调整小人的坐标
// }
// }
// else if (direct == LEFT) {
// if (man.y - 1 >= 0 && map1[man.x][man.y - 1] == FLOOR) {
// changeMap(man.x, man.y-1, MAN); //小人的往左走一格
// changeMap(man.x, man.y, FLOOR);//小人原来的位置设置为地板
// man.y = man.y - 1;//调整小人的坐标
// }
// }
// else if (direct == RIGHT) {
// if (man.y + 1 < COLUMN && map1[man.x][man.y + 1] == FLOOR) {
// changeMap(man.x, man.y + 1, MAN); //小人的往右走一格
// changeMap(man.x, man.y, FLOOR);//小人原来的位置设置为地板
// man.y = man.y + 1;//调整小人的坐标
// }
// }
//}//版本2,简化代码!!提高代码重用率
void gameControl(DIRECTION direct) {struct _POS next_man = man;struct _POS next_box = man;switch (direct) {case UP:next_man.x--;next_box.x -= 2;break;case DOWN:next_man.x++;next_box.x += 2;break;case LEFT:next_man.y--;next_box.y -= 2;break;case RIGHT:next_man.y++;next_box.y += 2;break;}/*判断条件太长,用宏定义替换来优化*///if (next_man.x >= 0 && next_man.x < LINE &&// next_man.y >= 0 && next_man.y < COLUMN &&// map1[next_man.x][next_man.y] == FLOOR) {//防御式编程,判断坐标的合法性// changeMap(next_man.x, next_man.y, MAN); //小人的往上走一格// changeMap(man.x, man.y, FLOOR);//小人原来的位置设置为地板// man = next_man;//调整小人的坐标//}if (isValid(next_man) && map1[next_man.x][next_man.y] == FLOOR) {//防御式编程,判断坐标的合法性//changeMap(next_man.x, next_man.y, MAN); //小人的往上走一格//changeMap(man.x, man.y, FLOOR);//小人原来的位置设置为地板//结构体传递用指针传递,提高效率,进一步优化changeMap(&next_man, MAN);changeMap(&man, FLOOR);man = next_man;//调整小人的坐标}else if (isValid(next_man) && map1[next_man.x][next_man.y] == BOX) {//第一种情况:箱子前面是地板if (isValid(next_box) && map1[next_box.x][next_box.y] == FLOOR) {changeMap(&next_box, BOX);changeMap(&next_man, MAN);changeMap(&man, FLOOR);man = next_man;}//第二种情况,前面是箱子else if (isValid(next_box) && map1[next_box.x][next_box.y] == BOX_DES) {changeMap(&next_box, HIT);changeMap(&next_man, MAN);changeMap(&man, FLOOR);man = next_man;}//第二种情况,箱子前面是目的地}
}/*
判断游戏是否结束,如果地图中没有箱子目的地,说明说有箱子已经全部移动到指定位置
游戏结束,反之没有结束
*/
bool isGameOver() {for (int i = 0; i < LINE; i++) {for (int j = 0; j < COLUMN; j++) {if (map1[i][j] == BOX_DES) {return false;}}}return true;
}/*
游戏结束场景
*/
void GameOverField(IMAGE* bg) {putimage(0, 0, bg);settextcolor(WHITE);RECT rec = { 0,0,WEIGHT,HEIGHT };settextstyle(100, 0, _T("宋体"));loadimage(NULL, _T("游戏结束背景.jpg"));//加载胜利图片//音乐播放mciSendString(_T("play 游戏结束.mp3"), 0, 0, 0);outtextxy(WEIGHT_BIAS, HEIGHT / 2, _T("恭喜你通关啦"));}
box_man.h:
#pragma once //头文件文件只包含一次#ifndef TEST_H
#define TEST_H
#include<graphics.h>
#include<conio.h> //获取键盘的热键#define WEIGHT 1190 //游戏窗口的宽度
#define HEIGHT 800 //游戏窗口的高度#define LINE 9 //地图的行数
#define COLUMN 12 //地图的列数#define RATIO 61 //小人物、强、箱子等元素的长和宽#define WEIGHT_BIAS 300 //地图离整个画布的横向偏移
#define HEIGHT_BIAS 150 //地图离整个画布的纵向偏移enum _PROPS {WALL, //墙FLOOR, //地板BOX_DES, //目的地MAN, //小人BOX, //箱子HIT, //命中目标ALL //为什么最后还要定义一个ALL,为了定义下面images数组的长度,这是顶尖项目的经验
};extern IMAGE images[ALL]; //存放各类道具图片变量typedef enum _DIRECTION {UP,DOWN,LEFT,RIGHT
}DIRECTION;struct _POS {//很多开源项目结构体名用下划线开头int x;int y;
};
extern struct _POS man;extern int map1[LINE][COLUMN];//函数声明一定要放在最后!!void changeMap(struct _POS* pos, enum _PROPS pros);
void gameControl(DIRECTION direct);
bool isGameOver();
void GameOverField(IMAGE* bg);#endif
如果图形库正常安装,项目属性字符集改为多字节字符集就可以运行了。
运行:(我这里用的其他图片元素做的)
胜利后:
可能大家代码写好但是没有图像资源文件:
大家可以私聊我,一件三连免费送。没有图像资源光有代码运行不起来。
相关文章:

C++学习day--24 推箱子游戏图像化开发
环境要求: 1、VS2015以上 2、成功安装并配置图形库 项目注意事项:代码复制好以后,把下面的字符集改为多字节字符集 第 1 节 项目需求 实现一款推箱子游戏,效果如下图所示 , 具体规则: 1. 箱子只能推动而不能拉动…...

YOLOv8中的After Fuse指的是什么?
Fuse是指模型的一些模块进行融合。常见的就是conv和bn层进行融合,在训练的时候模型是存在conv和bn的,但在推理的过程中,模型在初始化的时候会进行模型fuse,把其中的conv和bn进行融合,通过一些数学转换把bn层融合到conv里面,还有一些例如DBB,RepVGG等等模块支持融合的这些在fuse…...

R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016.6)
文章目录 AbstractIntroduction当前最先进目标检测存在的问题针对上述问题,我们提出... Our approachOverviewBackbone architecturePosition-sensitive score maps & Position-sensitive RoI pooling Related WorkExperimentsConclusion 原文链接 源代码 Abstr…...

Linux服务器部署Spring Boot项目的一些shell命令脚本
1.启动jar包的命令(根据jar包数量创建,并指定相对应的jar包) nohup java -server -Xms64m -Xmx128m -jar 项目jar包的名称.jar --spring.profiles.activeprod > 记录jar包的日志.log 2>&1 &可以写在start.sh文件里(…...

Youtube DNN:Deep Neural Networks for YouTube Recommendations
1.介绍 本文主要解决的三个挑战: 大规模的推荐场景,能够支持分布式训练和提供有效率的服务。不断更新的新物料。稀疏的用户行为,包含大量的噪声。 2.推荐系统 文章包含推荐系统的两阶段模型:召回和排序。 召回网络根据用户的历…...

Python 入门基础知识点有哪些?
Python是一种高级的、解释性的、面向对象的、动态类型语言,它在机器学习、数据分析、Web开发、科学计算等领域都有广泛的应用。下面是Python入门基础知识点的详细介绍。 1、变量和数据类型 在Python中,可以使用变量来存储数据。Python的数据类型包括整…...

【每日一题】补档 CF487B. Strip | 数据结构杂烩 -> 单调队列 | 困难
题目内容 原题链接 给定一个长度为 n n n 的数组,将这个数组进行拆分成若干个连续子数组, 使得每个子数组的最大值减去最小值小于等于 s s s , 且每个子数组的长度大于等于 l e n len len 。 问最少可以拆分成多少个连续子数组࿰…...

向量数据库和普通关系型数据库的区别,LAXCUS支持哪种数据库?
这是一位Laxcus用户在后台的提问,贴出来供大家参考: 1. 向量数据库与传统的关系型数据库主要有以下几个区别: 数据类型:向量数据库专门用于存储和查询向量数据,而传统数据库可以存储各种类型的数据,如文本…...

操作系统 --- 存储器管理
一、简答题 1.存储器管理的基本任务,是为多道程序的并发执行提供良好的存储器环境。请问好的存储器环境”应包含哪几个方面? 答: 2.内存保护是否可以完全由软件实现?为什么? 答:内存保护的主要任务是确保每…...

Python selenium无界面headless
视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium Chrome-headless 模式, Google 针对 Chrome 浏览器 59版 新增加的一种模式,可以让你不打开UI界面的情况下使用 Chrome 浏览器,所以运行效果与 …...

JavaScript 中的负无穷大是什么?
在 JavaScript 中,负无穷大表示为 -Infinity。它是一个特殊的数值,用于表示比任何实数都要小的值。 负无穷大用于表示超出数值范围的情况,例如在进行数学计算时发生了溢出或出现了无法表示的结果。它可以通过将负无穷大赋值给变量或通过某些…...

2023年十大地推和网推拉新app推广接单平台,一手单渠道
做地推最重要的一定是找好项目,找好项目最关键的一定是地推app接任务平台,所以这十大靠谱的地推拉新接单平台,都是我们精心筛选的,2023年从事地推和网推拉新作业。 1:聚量推客 “聚量推客”汇聚了众多市场上有的和没有…...

mybatis-plus的进阶使用
文章目录 自定义xml的sql脚本配置mybaits的全局配置文件mybatis-plus优化,指定select数据库乐观锁mybatis-plus实现数据库乐观锁mybatis-plus实现逻辑删除 自定义xml的sql脚本 这里的使用和mybatis一样 编写mapper.xml文件 <?xml version"1.0" enc…...

centos安装vim编辑器
第一步检查centos的vim编辑器包是否完整 rpm -qa|grep vim //查看Vim编辑器需要安装的四个包是否完整 第二步:一般安装vim编辑器需要一下四个安装包,缺失了之后可对应下载 vim-minimal-7.4.160-2.el7.x86_64vim-common-7.4.160-4.el7.x86_64 v…...

PostgreSQL InvalidMessage Cache 同步机制
文章目录 背景InvalidMessages 基本类型InvalidMessages 数据结构概览共享内存 的 "ring-buffer" 结构Backend 本地的 InvalidMessages管理SharedInvalCatalogMsgSharedInvalCatcacheMsgSharedInvalRelcacheMsgSharedInvalSnapshotMsgSharedInvalSmgrMsgSharedInvalR…...

C#,数值计算——Globals的计算方法与源程序
1 文本格式 using System; using System.Text; namespace Legalsoft.Truffer { public static partial class Globals { //const int FLT_RADIX 2; //const int DBL_MANT_DIG 53; //const int INT_DIGITS 32; //const float FLT_…...

腾讯云香港服务器轻量24元一个月性能测试
腾讯云香港轻量应用服务器优惠价格24元一个月,一年288元,以前是30M峰值带宽,现在是20M峰值带宽,阿腾云atengyun.com分享腾讯云香港轻量应用服务器性能测评,包括香港轻量服务器配置价格表、CPU性能和CN2网络延迟测试&am…...

深度学习之基于YoloV8的行人跌倒目标检测系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、行人跌倒目标检测系统四. 总结 一项目简介 世界老龄化趋势日益严重,现代化的生活习惯又使得大多数老人独居,统计数据表…...

Seata入门系列【16】XA模式入门案例
1 前言 在之前,我们试过了AT、TCC 模式,Seata 还支持XA 模式。 2 XA 协议 XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。Oracle、Informix、DB2和Sybase等…...

高级深入--day44
Scrapy 和 scrapy-redis的区别 Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件)。 pip install scrapy-redis Scrapy-redis提供了下面四种组件&a…...

Apache Doris (四十八): Doris表结构变更-替换表
🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录...

消息认证码--数字签名--证书
6. 消息认证码—>保证数据的完整性 "消息认证码 --- 消息被正确传送了吗?"6.1 什么是消息认证码 Alice 和 Bob 的故事 像以前一样,我们还是从一个Alice和Bob的故事开始讲起。不过,这一次Alice和Bob分别是两家银行,Alice银行通…...

四个制作PPT的小技巧
制作PPT已经很麻烦了,学习一些小技巧可以帮助我们省时省力吧! 技巧一:自动更新日期和时间 当我们给幻灯片添加了页脚并且是时间日期,可以通过设置达到自动更新,这样我们就不需要每次修改的时候都要手动更新日期和时间…...

Echarts饼状图grid设置
饼状图不能设置grid,而是center {type: "pie",radius: ["30%", "70%"],center: ["50%", "25%"], }center 圆心:控制圆的位置 radius 饼图的半径 控制显示尺寸 参考文章 Echarts饼状图设置...

系列三、Spring IOC
一、概述 IOC的中文意思是控制反转,通俗地讲就是把创建对象的控制权交给了Spring去管理,以前是由程序员自己去创建控制对象,现在交由Spring去创建控制。 二、优点 集中管理对象,方便维护,降低耦合度。 三、IOC的底层…...

electron汇总
python3自带了pip pip search已经被禁用,安装pip—— pip install pip-searchpython3.x移除了distutils 管理员权限下运行cmd,运行以下命令 // 修改pip镜像地址 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ // 安装 Set…...

电脑怎么共享屏幕?电脑屏幕共享软件分享!
如何控制某人的电脑屏幕? 有时我们可能需要远程控制某人的计算机屏幕,例如,为我们的客户提供远程支持,远程帮助朋友或家人解决计算机问题,或在家中与同事完成团队合作。那么,电脑怎么共享屏幕ÿ…...

全新一代数字内容体验云平台
随着AIGC能力的提升,企业接入AIGC后将实现数字内容生产的无限供给,如何管理AIGC数字内容将成为话题。 “Baklib是新⼀代企业数字内容体验云平台,包括数字资产及知识库管理、数字应用构建和客户体验,助力企业数字化体验从 IA 扩展…...

目标检测理论知识
目标检测 1.基本概念 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,…...

聚观早报 |蔚来推出婚车服务;长城汽车第三季度财报
【聚观365】10月30日消息 蔚来推出婚车服务 长城汽车第三季度财报 AI汽车机器人极越01上市 谷歌投资初创公司Anthropic 东方财富第三季度营收 蔚来推出婚车服务 据蔚来汽车官方消息,蔚来宣布推出“蔚来用户专享”的婚庆用车定制服务。 据悉,该服务…...