C++学习路线(二十)

项目

模块划分

        推箱子游戏

                地图初始化        热键控制        推箱子控制        游戏结束

地图初始化

        坐标系(650,650)

地图表示:

        使用二维数组

        游戏道具展示(墙 箱子 箱子目的地 小人 地板)

        判断游戏结果

        控制小人前进

道具表示:

        墙:0 , 地板:1 箱子目的地:2 小人:3 箱子:4  箱子命中目标 5

初始化整张题图 和  道具

#include <iostream>
#include <graphics.h>
#include <windows.h>
using namespace std;#define SCREEN_WIDTH 960 // 屏幕宽度
#define SCREEN_HEIGHT 768 // 屏幕高度
#define RATIO 61 // 图片缩放比例
#define LINE 9 // 行
#define COL 12 // 列
#define START_X 100 // 起始坐标X
#define START_Y 150 // 起始坐标Y
IMAGE images[6]; // 图片数组
int map[LINE][COL] = { // 地图数组{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}
};
void init_graphs() { // 初始化图形IMAGE bg_img;initgraph(SCREEN_WIDTH, SCREEN_HEIGHT);loadimage(&bg_img, _T("E:\\c++file\\推箱子游戏资源\\blackground.bmp"), SCREEN_WIDTH, SCREEN_HEIGHT, true);putimage(0, 0, &bg_img);
}
void init_images() { // 初始化图片loadimage(&images[0], _T("E:\\c++file\\推箱子游戏资源\\wall.bmp"), RATIO, RATIO, true);loadimage(&images[1], _T("E:\\c++file\\推箱子游戏资源\\floor.bmp"), RATIO, RATIO, true);loadimage(&images[2], _T("E:\\c++file\\推箱子游戏资源\\des.bmp"), RATIO, RATIO, true);loadimage(&images[3], _T("E:\\c++file\\推箱子游戏资源\\man.bmp"), RATIO, RATIO, true);loadimage(&images[4], _T("E:\\c++file\\推箱子游戏资源\\box.bmp"), RATIO, RATIO, true);loadimage(&images[5], _T("E:\\c++file\\推箱子游戏资源\\box.bmp"), RATIO, RATIO, true);// 地图绘制for (int i = 0; i < LINE; i++)for (int j = 0; j < COL; j++)putimage(START_X + j * RATIO, START_Y + i * RATIO, &images[map[i][j]]);// 这里需要解释下 为什么 START_X + j * RATIO, START_Y + i * RATIO// 这两个值是根据地图数组的大小计算出来的,因为地图数组的大小是12行9列,每个格子的大小是61*61,所以// 起始坐标X是100,起始坐标Y是150,然后加上i行j列的坐标乘以61,就得到了每个格子的坐标。
}
int main() {init_graphs();init_images();system("pause");return 0;
}

热键控制

#include <iostream>
#include <graphics.h>
#include <windows.h>
#include <conio.h>
using namespace std;#define SCREEN_WIDTH 960 // 屏幕宽度
#define SCREEN_HEIGHT 768 // 屏幕高度
#define RATIO 61 // 图片缩放比例
#define LINE 9 // 行
#define COL 12 // 列
#define START_X 100 // 起始坐标X
#define START_Y 150 // 起始坐标Y
#define KEY_UP 'w'
#define KEY_DOWN 's'
#define KEY_LEFT 'a'
#define KEY_RIGHT 'd'
#define KEY_QUIT 'q'IMAGE images[6]; // 图片数组
int map[LINE][COL] = { // 地图数组{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}
};void init_graphs() { // 初始化图形IMAGE bg_img;initgraph(SCREEN_WIDTH, SCREEN_HEIGHT);loadimage(&bg_img, _T("E:\\c++file\\推箱子游戏资源\\blackground.bmp"), SCREEN_WIDTH, SCREEN_HEIGHT, true);putimage(0, 0, &bg_img);
}
void init_images() { // 初始化图片loadimage(&images[0], _T("E:\\c++file\\推箱子游戏资源\\wall_right.bmp"), RATIO, RATIO, true);loadimage(&images[1], _T("E:\\c++file\\推箱子游戏资源\\floor.bmp"), RATIO, RATIO, true);loadimage(&images[2], _T("E:\\c++file\\推箱子游戏资源\\des.bmp"), RATIO, RATIO, true);loadimage(&images[3], _T("E:\\c++file\\推箱子游戏资源\\man.bmp"), RATIO, RATIO, true);loadimage(&images[4], _T("E:\\c++file\\推箱子游戏资源\\box.bmp"), RATIO, RATIO, true);loadimage(&images[5], _T("E:\\c++file\\推箱子游戏资源\\box.bmp"), RATIO, RATIO, true);// 地图绘制for (int i = 0; i < LINE; i++)for (int j = 0; j < COL; j++)putimage(START_X + j * RATIO, START_Y + i * RATIO, &images[map[i][j]]);//竖着进行排列
}
int main() {//init_graphs();//init_images();bool quit = false;do {if (_kbhit()) {char key = _getch();if (key == KEY_UP) {// 向上移动cout << "向上移动" << endl;}else if (key == KEY_DOWN) {// 向下移动cout << "向下移动" << endl;}else if (key == KEY_LEFT) {// 向左移动cout << "向左移动" << endl;}else if (key == KEY_RIGHT) {// 向右移动cout << "向右移动" << endl;}else if (key == KEY_QUIT) {// 退出游戏quit = true;cout << "退出游戏" << endl;}}} while (quit == false);system("pause");return 0;
}

推箱子控制

初级版本(可以上下左右动):

#include <iostream>
#include <graphics.h>
#include <windows.h>
#include <conio.h>
using namespace std;#define SCREEN_WIDTH 960 // 屏幕宽度
#define SCREEN_HEIGHT 768 // 屏幕高度
#define RATIO 61 // 图片缩放比例
#define LINE 9 // 行
#define COL 12 // 列
#define START_X 100 // 起始坐标X
#define START_Y 150 // 起始坐标Y
#define KEY_UP 'w'
#define KEY_DOWN 's'
#define KEY_LEFT 'a'
#define KEY_RIGHT 'd'
#define KEY_QUIT 'q'IMAGE images[6]; // 图片数组
int map[LINE][COL] = { // 地图数组{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}
};enum _DIRECTION {UP,DOWN,LEFT,RIGHT
};enum _PROPS {WALLS,FLOORS,BOX_DES,MAN,BOX,HIT,ALL
};struct _POS {int x;int y;
};struct _POS man; // 玩家位置void init_graphs() { // 初始化图形IMAGE bg_img;initgraph(SCREEN_WIDTH, SCREEN_HEIGHT);loadimage(&bg_img, _T("E:\\c++file\\推箱子游戏资源\\blackground.bmp"), SCREEN_WIDTH, SCREEN_HEIGHT, true);putimage(0, 0, &bg_img);
}
void init_images() { // 初始化图片loadimage(&images[WALLS], _T("E:\\c++file\\推箱子游戏资源\\wall_right.bmp"), RATIO, RATIO, true);loadimage(&images[FLOORS], _T("E:\\c++file\\推箱子游戏资源\\floor.bmp"), RATIO, RATIO, true);loadimage(&images[BOX_DES], _T("E:\\c++file\\推箱子游戏资源\\des.bmp"), RATIO, RATIO, true);loadimage(&images[MAN], _T("E:\\c++file\\推箱子游戏资源\\man.bmp"), RATIO, RATIO, true);loadimage(&images[BOX], _T("E:\\c++file\\推箱子游戏资源\\box.bmp"), RATIO, RATIO, true);loadimage(&images[HIT], _T("E:\\c++file\\推箱子游戏资源\\box.bmp"), RATIO, RATIO, true);// 地图绘制for (int i = 0; i < LINE; i++)for (int j = 0; j < COL; j++) {if (map[i][j] == MAN) {man.x = i;man.y = j;}putimage(START_X + j * RATIO, START_Y + i * RATIO, &images[map[i][j]]);}//竖着进行排列
}void changeMap(int line, int columns, enum _PROPS props) {map[line][columns] = props;putimage(START_X + columns * RATIO, START_Y + line * RATIO, &images[props]);
}void gameControl(enum _DIRECTION direction) {struct _POS nowPos = man;struct _POS nextPos = man;switch (direction) {case UP:nowPos.x = nowPos.x - 1;nextPos.x = nextPos.x - 2;break;case DOWN:nowPos.x = nowPos.x + 1;nextPos.x = nextPos.x + 2;break;case LEFT:nowPos.y = nowPos.y - 1;nextPos.y = nextPos.y - 2;break;case RIGHT:nowPos.y = nowPos.y + 1;nextPos.y = nextPos.y + 2;break;}if (direction == UP) {if ((man.x - 1) > 0 && map[man.x - 1][man.y] == FLOORS) {changeMap(man.x - 1, man.y, MAN);changeMap(man.x, man.y, FLOORS);man.x--;}}else if (direction == DOWN) {if ((man.x + 1) < LINE && map[man.x + 1][man.y] == FLOORS) {changeMap(man.x + 1, man.y, MAN);changeMap(man.x, man.y, FLOORS);man.x++;}}else if (direction == LEFT) {if ((man.y - 1) > 0 && map[man.x][man.y - 1] == FLOORS) {changeMap(man.x, man.y - 1, MAN);changeMap(man.x, man.y, FLOORS);man.y--;}}else {if ((man.y + 1) < COL && map[man.x][man.y + 1] == FLOORS) {changeMap(man.x, man.y + 1, MAN);changeMap(man.x, man.y, FLOORS);man.y++;}}
}
int main() {init_graphs();init_images();bool quit = false;do {if (_kbhit()) {char key = _getch();if (key == KEY_UP) {gameControl(UP);}else if (key == KEY_DOWN) {gameControl(DOWN);}else if (key == KEY_LEFT) {gameControl(LEFT);}else if (key == KEY_RIGHT) {gameControl(RIGHT);}else if (key == KEY_QUIT) {quit = true;cout << "退出游戏" << endl;}}} while (quit == false);system("pause");return 0;
}

最终版

#include <iostream>
#include <graphics.h>
#include <windows.h>
#include <conio.h>
using namespace std;#define SCREEN_WIDTH 960 // 屏幕宽度
#define SCREEN_HEIGHT 768 // 屏幕高度
#define RATIO 61 // 图片缩放比例
#define LINE 9 // 行
#define COL 12 // 列
#define START_X 100 // 起始坐标X
#define START_Y 150 // 起始坐标Y
#define KEY_UP 'w'
#define KEY_DOWN 's'
#define KEY_LEFT 'a'
#define KEY_RIGHT 'd'
#define KEY_QUIT 'q'IMAGE images[6]; // 图片数组
int map[LINE][COL] = { // 地图数组{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}
};enum _DIRECTION {UP,DOWN,LEFT,RIGHT
};enum _PROPS {WALLS,FLOORS,BOX_DES,MAN,BOX,HIT,ALL
};struct _POS {int x;int y;
};struct _POS man; // 玩家位置void init_graphs() { // 初始化图形IMAGE bg_img;initgraph(SCREEN_WIDTH, SCREEN_HEIGHT);loadimage(&bg_img, _T("E:\\c++file\\推箱子游戏资源\\blackground.bmp"), SCREEN_WIDTH, SCREEN_HEIGHT, true);putimage(0, 0, &bg_img);
}
void init_images() { // 初始化图片loadimage(&images[WALLS], _T("E:\\c++file\\推箱子游戏资源\\wall_right.bmp"), RATIO, RATIO, true);loadimage(&images[FLOORS], _T("E:\\c++file\\推箱子游戏资源\\floor.bmp"), RATIO, RATIO, true);loadimage(&images[BOX_DES], _T("E:\\c++file\\推箱子游戏资源\\des.bmp"), RATIO, RATIO, true);loadimage(&images[MAN], _T("E:\\c++file\\推箱子游戏资源\\man.bmp"), RATIO, RATIO, true);loadimage(&images[BOX], _T("E:\\c++file\\推箱子游戏资源\\box.bmp"), RATIO, RATIO, true);loadimage(&images[HIT], _T("E:\\c++file\\推箱子游戏资源\\box.bmp"), RATIO, RATIO, true);// 地图绘制for (int i = 0; i < LINE; i++)for (int j = 0; j < COL; j++) {if (map[i][j] == MAN) {man.x = i;man.y = j;}putimage(START_X + j * RATIO, START_Y + i * RATIO, &images[map[i][j]]);}//竖着进行排列
}void changeMap(int line, int columns, enum _PROPS props) {map[line][columns] = props;putimage(START_X + columns * RATIO, START_Y + line * RATIO, &images[props]);
}void changeMap(struct _POS pos , enum _PROPS props){map[pos.x][pos.y] = props;putimage(START_X + pos.y * RATIO, START_Y + pos.x * RATIO, &images[props]);
}bool isValid(struct _POS pos) {if (pos.x >= 0 && pos.x < LINE && pos.y >= 0 && pos.y < COL)return true;return false;
}bool isOver() {for (int i = 0; i < LINE; i++)for (int j = 0; j < COL; j++)if (map[i][j] == BOX_DES) return false;return true;
}void gameControl(enum _DIRECTION direction) {struct _POS nextPos = man;struct _POS nextnextPos = man;switch (direction) {case UP:nextPos.x--;nextnextPos.x-=2;break;case DOWN:nextPos.x++;nextnextPos.x+=2;break;case LEFT:nextPos.y-=1;nextnextPos.y-=2;break;case RIGHT:nextPos.y+=1;nextnextPos.y+=2;break;}if (isValid(nextPos) && map[nextPos.x][nextPos.y] == FLOORS) {changeMap(nextPos, MAN);changeMap(man, FLOORS);man = nextPos;}else if (isValid(nextnextPos) && map[nextPos.x][nextPos.y] == BOX) {if (map[nextnextPos.x][nextnextPos.y] == FLOORS) {changeMap(nextnextPos, BOX);changeMap(nextPos, MAN);changeMap(man, FLOORS);man = nextPos;}else if (map[nextnextPos.x][nextnextPos.y] == BOX_DES) {changeMap(nextnextPos, HIT);changeMap(nextPos, MAN);changeMap(man, FLOORS);man = nextPos;}}
}void gameOverScene() {IMAGE bg_img;initgraph(SCREEN_WIDTH, SCREEN_HEIGHT);loadimage(&bg_img, _T("E:\\c++file\\推箱子游戏资源\\blackground.bmp"), SCREEN_WIDTH, SCREEN_HEIGHT, true);putimage(0, 0, &bg_img);settextstyle(20, 0, _T("Arial"));RECT rect = { 0,0,SCREEN_WIDTH,SCREEN_HEIGHT };drawtext(_T("游戏结束"), &rect, DT_CENTER | DT_VCENTER);
}int main() {init_graphs();init_images();bool quit = false;do {if (isOver()) {quit = true;gameOverScene();}if (_kbhit()) {char key = _getch();if (key == KEY_UP) {gameControl(UP);}else if (key == KEY_DOWN) {gameControl(DOWN);}else if (key == KEY_LEFT) {gameControl(LEFT);}else if (key == KEY_RIGHT) {gameControl(RIGHT);}else if (key == KEY_QUIT) {quit = true;cout << "退出游戏" << endl;}}} while (quit == false);system("pause");return 0;
}

加了增加地图的功能

#include <iostream>
#include <graphics.h>
#include <windows.h>
#include <conio.h>
#include <fstream>
using namespace std;#define SCREEN_WIDTH 960 // 屏幕宽度
#define SCREEN_HEIGHT 768 // 屏幕高度
#define RATIO 61 // 图片缩放比例
#define LINE 9 // 行
#define COL 12 // 列
#define START_X 100 // 起始坐标X
#define START_Y 150 // 起始坐标Y
#define KEY_UP 'w'
#define KEY_DOWN 's'
#define KEY_LEFT 'a'
#define KEY_RIGHT 'd'
#define KEY_QUIT 'q'IMAGE images[6]; // 图片数组
int map[LINE][COL]; // 地图数组
string mapPath[] = {"E:\\c++file\\推箱子游戏资源\\推箱子地图1.txt" , "E:\\c++file\\推箱子游戏资源\\推箱子地图2.txt"  , "E:\\c++file\\推箱子游戏资源\\推箱子地图3.txt" };
int pathIndex = 0; // 地图索引
int pathLen = 3; // 地图总数
enum _DIRECTION {UP,DOWN,LEFT,RIGHT
};enum _PROPS {WALLS,FLOORS,BOX_DES,MAN,BOX,HIT,ALL
};struct _POS {int x;int y;
};struct _POS man; // 玩家位置void init_graphs() { // 初始化图形IMAGE bg_img;initgraph(SCREEN_WIDTH, SCREEN_HEIGHT);loadimage(&bg_img, _T("E:\\c++file\\推箱子游戏资源\\blackground.bmp"), SCREEN_WIDTH, SCREEN_HEIGHT, true);putimage(0, 0, &bg_img);
}
void init_images() { // 初始化图片loadimage(&images[WALLS], _T("E:\\c++file\\推箱子游戏资源\\wall_right.bmp"), RATIO, RATIO, true);loadimage(&images[FLOORS], _T("E:\\c++file\\推箱子游戏资源\\floor.bmp"), RATIO, RATIO, true);loadimage(&images[BOX_DES], _T("E:\\c++file\\推箱子游戏资源\\des.bmp"), RATIO, RATIO, true);loadimage(&images[MAN], _T("E:\\c++file\\推箱子游戏资源\\girl.jpg"), RATIO, RATIO, true);loadimage(&images[BOX], _T("E:\\c++file\\推箱子游戏资源\\box.bmp"), RATIO, RATIO, true);loadimage(&images[HIT], _T("E:\\c++file\\推箱子游戏资源\\box.bmp"), RATIO, RATIO, true);// 地图绘制for (int i = 0; i < LINE; i++)for (int j = 0; j < COL; j++) {if (map[i][j] == MAN) {man.x = i;man.y = j;}putimage(START_X + j * RATIO, START_Y + i * RATIO, &images[map[i][j]]);}//竖着进行排列
}void changeMap(int line, int columns, enum _PROPS props) {map[line][columns] = props;putimage(START_X + columns * RATIO, START_Y + line * RATIO, &images[props]);
}void changeMap(struct _POS pos , enum _PROPS props){map[pos.x][pos.y] = props;putimage(START_X + pos.y * RATIO, START_Y + pos.x * RATIO, &images[props]);
}bool isValid(struct _POS pos) {if (pos.x >= 0 && pos.x < LINE && pos.y >= 0 && pos.y < COL)return true;return false;
}bool isOver() {for (int i = 0; i < LINE; i++)for (int j = 0; j < COL; j++)if (map[i][j] == BOX_DES) return false;return true;
}void gameControl(enum _DIRECTION direction) {struct _POS nextPos = man;struct _POS nextnextPos = man;switch (direction) {case UP:nextPos.x--;nextnextPos.x-=2;break;case DOWN:nextPos.x++;nextnextPos.x+=2;break;case LEFT:nextPos.y-=1;nextnextPos.y-=2;break;case RIGHT:nextPos.y+=1;nextnextPos.y+=2;break;}if (isValid(nextPos) && map[nextPos.x][nextPos.y] == FLOORS) {changeMap(nextPos, MAN);changeMap(man, FLOORS);man = nextPos;}else if (isValid(nextnextPos) && map[nextPos.x][nextPos.y] == BOX) {if (map[nextnextPos.x][nextnextPos.y] == FLOORS) {changeMap(nextnextPos, BOX);changeMap(nextPos, MAN);changeMap(man, FLOORS);man = nextPos;}else if (map[nextnextPos.x][nextnextPos.y] == BOX_DES) {changeMap(nextnextPos, HIT);changeMap(nextPos, MAN);changeMap(man, FLOORS);man = nextPos;}}
}void gameOverScene() {IMAGE bg_img;initgraph(SCREEN_WIDTH, SCREEN_HEIGHT);loadimage(&bg_img, _T("E:\\c++file\\推箱子游戏资源\\blackground.bmp"), SCREEN_WIDTH, SCREEN_HEIGHT, true);putimage(0, 0, &bg_img);settextstyle(20, 0, _T("Arial"));RECT rect = { 0,0,SCREEN_WIDTH,SCREEN_HEIGHT };drawtext(_T("游戏结束"), &rect, DT_CENTER | DT_VCENTER);
}void loadMap() {ifstream inFile(mapPath[pathIndex]);if (!inFile.is_open()) {cout << "地图文件打开失败" << endl;exit(0);}for (int i = 0; i < LINE; i++) {for (int j = 0; j < COL; j++) {inFile >> map[i][j];}}inFile.close();pathIndex++;init_graphs();init_images();
}int main() {loadMap();bool quit = false;do {if (isOver()) {if (pathIndex == pathLen) {quit = true;gameOverScene();}else {loadMap();}}if (_kbhit()) {char key = _getch();if (key == KEY_UP) {gameControl(UP);}else if (key == KEY_DOWN) {gameControl(DOWN);}else if (key == KEY_LEFT) {gameControl(LEFT);}else if (key == KEY_RIGHT) {gameControl(RIGHT);}else if (key == KEY_QUIT) {quit = true;cout << "退出游戏" << endl;}}} while (quit == false);system("pause");return 0;
}

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

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

相关文章

java基于SpringBoot+Vue+uniapp微信小程序的自助点餐系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

【H∞鲁棒控制】状态反馈、输出反馈、混合灵敏度H∞控制器设计

最近在学H∞鲁棒控制&#xff0c;因为后面项目中可能要用到此控制方法&#xff0c;所以提前进行了学习&#xff0c;刚开始接触感觉看不太懂&#xff0c;涉及的数学专业知识较深&#xff0c;而且网上资料也比较零星且局限&#xff0c;摸爬了好几天才搞懂了点&#xff0c;现自己总…

「Java服务」快速接入SkyWalking方法指南

一、背景 背景&#xff1a;Apache SkyWalking 是一个开源的分布式应用性能监控&#xff08;APM&#xff09;系统&#xff0c;主要用于监控微服务、云原生和容器化应用的性能。接入SkyWalking可以排查以智能投放服务为主的服务响应问题 技术架构 SkyWalking 的核心架构包括以…

银河麒麟V10系统+Windows10双系统启动顺序正确修改方法

***正确可行方法***&#xff0c;测试OK且稳定&#xff1b; 银河麒麟桌面操作系统V10是一款适配国产软硬件平台并深入优化和创新的新一代图形化桌面操作系统&#xff0c;同源支持国内外主流处理器架构&#xff0c;并不断使能GPU、桥片、网卡等各种新硬件&#xff0c;提供更优的软…

vue3学习之插槽slot

关于slot web组件内部的占位符&#xff0c;可以使用自己的标记填充这个占位符 &#xff0c;具名插槽就是在slot标签上添加name属性&#xff08;https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/slot&#xff09; vue3官方文档&#xff1a;https://cn.vuejs.org/gui…

深入解析Java 22:专栏介绍

深入解析Java 22&#xff1a;专栏介绍 Java&#xff0c;作为一种广泛使用的编程语言&#xff0c;一直以来都在不断地发展和改进。2024年3月19日&#xff0c;Java 22的GA版本正式发布&#xff0c;带来了众多令人瞩目的新特性和性能优化。本专栏将深入解析Java 22&#xff0c;带…

AD9680(adc直采芯片)使用说明

写这篇文章之前我是没有使用过AD9680的芯片&#xff0c;但是使用过GMS011芯片&#xff08;是国内24S&#xff09;下的公司出来的芯片&#xff0c;寄存器和管脚全对标。 在这里我就大概说一下芯片的说用方法 一、硬件设计 该芯片支持双通道射频直采 支持协议JESD204B 14位 采样…

leetcode二叉树(五)-二叉树层序遍历

题目 102.二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7…

【网络篇】计算机网络——网络层详述(笔记)

目录 一、网络层 1. 网络传输流程简述 2. 转发和路由选择 3. 控制平面&#xff1a;SDN 方法 二、路由器工作原理 1. 概述 &#xff08;1&#xff09;输入端口 &#xff08;2&#xff09;交换结构 &#xff08;3&#xff09;输出端口 &#xff08;4&#xff09;路由选…

CAS详谈---无锁的锁机制

假设有多个线程想要操作同一个资源对象&#xff0c;我们首先想到的是使用互斥锁&#xff0c;但是互斥锁是悲观的。 悲观&#xff0c;即操作系统会悲观的认为如果不严格同步线程调用&#xff0c;那么一定会产生异常&#xff0c;所以互斥锁会将资源锁定&#xff0c;只供一个线程…

【动手学深度学习】7.5 批量规范化(个人向笔记)

训练深层神经网络是十分困难的&#xff0c;特别是在较短的时间内使它们收敛更加棘手。而本节的批量规范化&#xff08;batch normalization&#xff09; 可以持续加速深层网络的收敛速度结合下节会介绍道德残差块&#xff0c;批量规范化使得研究人员能够训练100层以上的网络 1.…

nbsaas vue3管理后台框架

nbsaas vue3管理后台框架 一、项目概述 Nbsaas Admin Vue 是一个基于 Vue.js 3.0 构建的轻量级后台管理系统&#xff0c;结合了现代前端技术栈的最佳实践&#xff0c;旨在帮助开发者快速构建具有高可扩展性和良好用户体验的后台管理系统。该项目拥有简洁的 UI 设计&#xff0…

Hikyuu教程 | 滚动回测与滚动寻优系统

前面介绍了如何使用 hikyuu 进行策略回测参数优化&#xff0c;同时也提到了这种简单的参数优化本质其实是对历史数据的过拟合&#xff0c;通常并不具备直接使用的意义。那么有什么办法来减缓这种过拟合影响&#xff0c;让参数优化发挥实际的作用呢&#xff1f;答案是——使用滚…

源码编译方式安装htppd软件

一.源码编译安装httpd软件 1.安装阿帕奇的依赖&#xff0c;安装apr软件&#xff0c;阿帕奇正常运行的环境这个环境就是apr。 2.安装apr-util软件&#xff0c;主要提供针对apr环境的管理工具&#xff0c; 3.安装阿帕奇软件即httpd软件。 如上图所示&#xff0c;就是三个软件的…

E38.【C语言】练习:数据结构时间复杂度的计算

目录 1.二分法的时间复杂度 解: 2.求阶乘的时间复杂度 解: 3.递归实现斐波那契数,求时间复杂度 解: 4.时间复杂度的排名 备注:有关时间复杂度的讲解参见80.【C语言】数据结构之时间复杂度 1.二分法的时间复杂度 (代码来自E7.【C语言】练习&#xff1a;在一个有序数组中…

CentOS 7 yum失效的解决办法

文章目录 一、CentOS 7停止维护导致yum失效的解决办法解决方案 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、CentOS 7停止维护导致yum失效的解决办法 020 年&#xff0c;CentOS 项目与红帽联合宣布将全部投资转向 CentOS Stream&#xff0c;这是…

SpringBoot项目热部署-devtools

DevTools 会使用两个类加载器&#xff08;一个用于加载不变的类&#xff0c;一个用于加载可能会变化的类&#xff09;&#xff0c;每次重启只重新加载管理变化的类的加载器&#xff0c;因此会快很多 1.导入依赖 <dependency> <groupId>org.springframework.boot&l…

HCIE-Datacom题库_01_防火墙【18道题】

一、单选题 1.相比较于路由器、交接机&#xff0c;防火墙转发独有的模块为? 交换网板 MPU LPU SPU 解析&#xff1a; SFU&#xff08;Switch Fabric Unit&#xff09;&#xff1a;交换网板&#xff0c;负责整个系统的数据平面数据平面提供高速无阻塞数据通道&#xff0…

关于SOCKS协议的常见误区有哪些?

代理协议在设备与代理服务器之间的数据交换中起到了关键作用。在这方面&#xff0c;SOCKS代理协议是常见的选择之一&#xff0c;被广泛应用于下载、传输和上传网络数据的场景。然而&#xff0c;关于SOCKS代理协议存在一些常见的误解&#xff0c;让我们来逐一了解。 一、使用SO…