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

c语言->贪吃蛇实战技巧结合EasyX简单实现页面管理(简单实现)

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉

🍎个人主页:再无B~U~G-CSDN博客

1. 游戏背景

贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块,扫雷等游戏位列经典游戏的⾏列。
在编程语⾔的教学中,我们以贪吃蛇为例,从设计到代码实现来提升学⽣的编程能⼒和逻辑能⼒。

2. 游戏效果演⽰ 

屏幕录制

3. 课程⽬标

使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇
实现基本的功能:
贪吃蛇地图绘制
蛇吃⻝物的功能 (上、下、左、右⽅向键控制蛇的动作)
蛇撞墙死亡
蛇撞⾃⾝死亡
计算得分
蛇⾝加速、减速
暂停游戏

4. 课程定位

提⾼⼩⽐特对编程的兴趣
对C语⾔语法做⼀个基本的巩固。
对游戏开发有兴趣的同学做⼀个启发。
项⽬适合:C语⾔学完的同学,有⼀定的代码能⼒,初步接触数据结构中的链表。

5. 技术要点

C语⾔函数、枚举、结构体、动态
内存管理、预处理指令、链表、Win32 API等。
整体的框架:

 

课前准备:

调好项目适应本地化

了解EasyX的坐标体系

6. 控制台程序

6.1 控制台程序

设置如下:

6.1 相关函数的使用

地区设置为"C"时,库函数按正常⽅式执⾏,⼩数点是⼀个点。
当程序运⾏起来后想改变地区,就只能显⽰调⽤setlocale函数。⽤" "作为第2个参数,调⽤setlocale 函数就可以切换到本地模式,这种模式下程序会适应本地环境。⽐如:切换到我们的本地模式后就⽀持宽字符(汉字)的输出等

<locale.h>本地化

全部来自于EasyX简单图形库

6.2pause

6.3 outtextxy

两个一个输出字符,一个输出字符串

案例:

6.4cleardevice

 6.5图片设置

相关用法:

 

 6.6rectangle

6.7setlinecolor设置线条颜色

7. 游戏实现

7.1地图坐标

我们假设实现⼀个棋盘27⾏,58列的棋盘(⾏和列可以根据⾃⼰的情况修改),再围绕地图画出墙,
如下:

7.2 蛇⾝和⻝物 

初始化状态,假设蛇的⻓度是5,
⽐如(24, 5)处开始出现蛇,连续5个节点。注意:蛇的每个节点的x坐标必须是2个倍数,否则可能会出现蛇的⼀个节点有⼀半⼉出现在墙体中,另外⼀般在墙外的现象,坐标不好对⻬。
关于⻝物,就是在墙体内随机⽣成⼀个坐标(x坐标必须是1的15倍数),坐标不能和蛇的⾝体重合

7.3 数据结构设计

游戏运⾏的过程中,蛇每次吃⼀个⻝物,蛇的⾝体就会变⻓⼀节,如果我们使⽤链表存储蛇的信
息,那么蛇的每⼀节其实就是链表的每个节点。每个节点只要记录好蛇⾝节点在地图上的坐标就⾏,所以蛇节点结构如下:
要管理整条贪吃蛇,我们再封装⼀个Snake的结构来维护整条贪吃蛇:

 

蛇的⽅向,可以⼀⼀列举,使⽤枚举 

游戏状态,可以⼀⼀列举,使⽤枚举 

7.4 游戏流程设计

8. 核⼼逻辑实现分析

8.1 游戏主逻辑

8.2 游戏开始前面的准备 

8.2.1 打印欢迎界⾯ 

看看效果:

8.2.2 创建地图

打印地图的关键是要算好坐标,才能在想要的位置打印墙体。
看看效果:

8.2.3 初始化蛇⾝

蛇最开始⻓度为5节,每节对应链表的⼀个节点,蛇⾝的每⼀个节点都有⾃⼰的坐标。
创建5个节点,然后将每个节点存放在链表中进⾏管理。创建完蛇⾝后,将蛇的每⼀节打印在屏幕上。
创建完蛇⾝后随便,初始化蛇的其他属性

蛇的图片是:

 8.2.4 创建第⼀个⻝物

先随机⽣成⻝物的坐标

  1. x坐标必须是15的倍数
  2. ⻝物的坐标不能和蛇⾝每个节点的坐标重复
  3. 创建⻝物节点,打印⻝物

创建⻝物的函数:CreateFood  

8.3 游戏运⾏过程

游戏运⾏期间,右侧打印帮助信息,提⽰玩家
根据游戏状态检查游戏是否继续,如果是状态是OK,游戏继续,否则游戏结束。
如果游戏继续,就是检测按键情况,确定蛇下⼀步的⽅向,或者是否加速减速,是否暂停或者退出游戏。
确定了蛇的⽅向和速度,蛇就可以移动了。

8.3.1 KEY_PRESS

检测按键状态,我们封装了⼀个宏

# define KEY_PRESS(VK) ((GetAsyncKeyState(VK)&0x1) ? 1 : 0)

8.3.2 PrintHelpInfo 打印规则信息

 

8.3.3 蛇⾝移动

先创建下⼀个节点,根据移动⽅向和蛇头的坐标,蛇移动到下⼀个位置的坐标。
确定了下⼀个位置后,看下⼀个位置是否是⻝物(NextIsFood),是⻝物就做吃⻝物处理
(EatFood),如果不是⻝物则做前进⼀步的处理(NoFood)。
蛇⾝移动后,判断此次移动是否会造成撞墙(KillByWall)或者撞上⾃⼰蛇⾝(KillBySelf),从⽽影响游戏的状态。
8.3.3.1 NextIsFood  

8.3.3.2 EatFood

8.3.3.3 NoFood 
将下⼀个节点头插⼊蛇的⾝体,并将之前蛇⾝最后⼀个节点打印为空格,放弃掉蛇⾝的最后⼀个节点
8.3.3.4 KillByWall

8.3.3.5 KillBySelf

8.4 游戏结束

戏状态不再是OK(游戏继续)的时候,要告知游戏结束的原因,并且释放蛇⾝节点。

9. 参考代码

完整代码实现,分3个⽂件实现

test.cpp

#include"snake.h"void test()
{//修改适配本地中文环境setlocale(LC_ALL, "");bool c = false;char str[4] = " ";do{Snake snake = { 0 };GameStart(&snake);//游戏开始前的初始化GameRun(&snake);//玩游戏的过程GameEnd(&snake);//善后的工作outtextxy(350, 500, "再来一局吗?(Yes/No):");scanf("%s", str);c = Determine(str);} while (c);
}
int main()
{//修改适配本地中文环境setlocale(LC_ALL, "");test();return 0;
}

snake.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<windows.h>
#include<stdbool.h>
#include <graphics.h>		
#include <conio.h>#define KEY_PRESS(VK)  ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 )//蛇默认的起始坐标
#define POS_X 300
#define POS_Y 200
//背景单位
#define SIZE_X 15
#define SIZE_Y 20//游戏的状态
enum GAME_STATUS
{OK = 1,//正常运行ESC, //按了ESC键退出,正常退出KILL_BY_WALL,//撞墙KILL_BY_SELF //撞到自身
};typedef struct snake {int x;int y;struct snake* next;
}SnakeNode, * pSnakeNode;//结构体指针重命名//蛇行走的方向
enum DIRECTION
{UP = 1,DOWN,LEFT,RIGHT//向右
};//贪吃蛇应该有的属性
typedef struct Snake
{pSnakeNode pSnake;//维护整条蛇的指针,是指向蛇头pSnakeNode pFood;//指向食物的指针int Score;//当前累积的分数int FoodWeight;//一个食物的分数int SleepTime;//蛇休眠的时间,休眠的时间越短,蛇的速度越快,休眠的时间越长,蛇的速度越慢enum GAME_STATUS status;//游戏当前的状态enum DIRECTION dir;//蛇当前走的方向//...
}Snake, * pSnake;//游戏前的初始化
void GameStart(pSnake p);//打印欢迎信息
void WelcomeToGame();//绘制地图
void CreateMap();//初始化蛇
void InitSnake(pSnake ps);//打印图片
void picture(int x, int y);//创建食物
void CreateFood(pSnake ps);//玩游戏的过程
void GameRun(pSnake ps);//打印帮助(规则)信息
void PrintHelpInfo();//当前分数情况
void Score(pSnake ps);//游戏要暂停
void pause();//蛇走一步
void SnakeMove(pSnake ps);//下一个坐标是不是食物
bool NextIsFood(pSnake ps, pSnakeNode pNext);//是食物就吃掉
void EatFood(pSnake ps, pSnakeNode pNext);//不是食物就正常一步
void NotEatFood(pSnake ps, pSnakeNode pNext);//检测撞墙
void KillByWall(pSnake ps);//检测撞到自己
void KillBySelf(pSnake ps);//结束游戏后的工作
void GameEnd(pSnake ps);//判断是否再来一局
bool Determine(char str[]);

snake.cpp

#include"snake.h"void GameStart(pSnake ps) {//设置控制台信息,窗口大小,窗口名initgraph(1300, 720, EX_SHOWCONSOLE);//打印欢迎信息WelcomeToGame();//绘制地图CreateMap();//初始化蛇InitSnake(ps);//创建食物CreateFood(ps);
}//打印欢迎信息
void WelcomeToGame() {//欢迎信息system("title 贪吃蛇");outtextxy(500, 350, "欢迎来到贪吃蛇小游戏");outtextxy(600, 400, "随意点击屏幕继续. . .");//随意点击屏幕system("pause");//清空屏幕,换画面cleardevice();//功能介绍信息outtextxy(400, 350, "1.用 ↑   ↓   ←   → 来控制蛇的移动,F3是加速,F4是减速");outtextxy(400, 370, "2.加速能得到更高的分数");outtextxy(600, 400, "随意点击屏幕继续. . .");//打印尾巴信息system("pause");//清空桌面cleardevice();}
//绘制地图
void CreateMap() {IMAGE img1;//玩游戏背景图loadimage(&img1, "picture.jpg\\picture.jpg", 900, 700, true);//从0,开始画图putimage(0, 0, &img1);//画线矩形setlinecolor(GREEN);//rectangle(0, 0, 900, 699);//rectangle(3, 3, 897, 697);//上int i = 0;for (i = 0; i <= 900; i += 15){rectangle(i, 0, i + 13, 13);}//下for (i = 0; i <= 900; i += 15){rectangle(i, 700, i + 13, 700 + 13);}//左for (i = 20; i < 700; i += 20){rectangle(0, i , 0 + 13, i + 17);}//右for (i = 1; i <  700; i += 20){rectangle(900, i, 900 + 13, i + 17);}}//初始化蛇
void InitSnake(pSnake ps) {//创建5个节点pSnakeNode cur = NULL;for (int i = 0; i < 5; i++) {cur = (pSnakeNode)malloc(sizeof(SnakeNode));if (cur == NULL) {perror("malloc fail!");return;}cur->x = POS_X + i * 15;cur->y = POS_Y;cur->next = NULL;if (ps->pSnake == NULL) {ps->pSnake = cur;}else {cur->next = ps->pSnake;ps->pSnake = cur;}}//打印蛇的位置cur = ps->pSnake;while (cur) {picture(cur->x, cur->y);cur = cur->next;}//初始化贪吃蛇其他属性ps->dir = RIGHT;//向右ps->pFood = NULL;ps->Score = 0;ps->FoodWeight = 10;ps->SleepTime = 200;ps->status = OK;
}
//打印蛇身
void picture(int x, int y) {IMAGE img1;loadimage(&img1, "picture.jpg\\picture2.jpg", SIZE_X, SIZE_Y, true);putimage(x, y, &img1);
}//创建食物
void CreateFood(pSnake ps) {pSnakeNode pNext = (pSnakeNode)malloc(sizeof(SnakeNode));if (pNext == NULL) {perror("pNext malloc fail!");return;}int x = 0;int y = 0;
circulate:do {//避免出现在(0,0)x = rand() % 871 + 15 ;y = rand() % 681 + 20;} while (x % 15 != 0 || y % 20 != 0);pSnakeNode cur = ps->pSnake;while (cur) {if (cur->x == x && cur->y == y) {goto circulate;}cur = cur->next;}pNext->x = x;pNext->y = y;pNext->next = NULL;//维护食物ps->pFood = pNext;//打印食物IMAGE img3;loadimage(&img3, "picture.jpg\\R-C (1).jpg", 15, 20, true);putimage(x, y, &img3);}
//玩游戏的过程
void GameRun(pSnake ps) {//打印帮助(规则)信息PrintHelpInfo();do {//当前分数情况Score(ps);//向上if (KEY_PRESS(VK_UP) && ps->dir != DOWN) {ps->dir = UP;}//向下else if (KEY_PRESS(VK_DOWN) && ps->dir != UP) {ps->dir = DOWN;}//向左else if (KEY_PRESS(VK_LEFT) && ps->dir != RIGHT) {ps->dir = LEFT;}//向右else if (KEY_PRESS(VK_RIGHT) && ps->dir != LEFT) {ps->dir = RIGHT;}//暂停else if (KEY_PRESS(VK_SPACE)) {//游戏要暂停pause();}//加速else if (KEY_PRESS(VK_F3)) {if (ps->FoodWeight < 16) {ps->FoodWeight += 2;ps->SleepTime -= 50;}}//减速else if (KEY_PRESS(VK_F4)) {if (ps->FoodWeight > 4) {ps->FoodWeight -= 2;ps->SleepTime += 50;}}//退出游戏else if (KEY_PRESS(VK_ESCAPE)) {ps->status = ESC;}//走一步SnakeMove(ps);//休眠Sleep(ps->SleepTime);} while (ps->status == OK);}//打印帮助(规则)信息
void PrintHelpInfo() {//规则setlinecolor(MAGENTA);rectangle(918, 50, 1250, 180);outtextxy(930, 60, "1.不能穿墙,不能咬到自己");outtextxy(930, 80, "2.用 ↑.↓.←.→ 来控制蛇的移动");outtextxy(930, 100, "3.F3是加速,F4是减速");outtextxy(930, 120, "4.一个食物基础分10分");outtextxy(930, 140, "5.加速一次加2分,最大加6分");outtextxy(930, 160, "6.减速一次减2分,最大减6分");}
//当前分数情况
void Score(pSnake ps) {char num1[10];char num2[10];sprintf(num1, "%d", ps->Score);sprintf(num2, "%d", ps->FoodWeight);outtextxy(930, 300, "当前总积分:");outtextxy(1020, 300, num1);outtextxy(930, 340, "当前一个食物积分:");outtextxy(1065, 340, num2);
}
//游戏要暂停
void pause() {while (true) {if (KEY_PRESS(VK_SPACE)) {break;}Sleep(200);}
}
//蛇走一步
void SnakeMove(pSnake ps) {//生成下一个走过的节点pSnakeNode pNext = (pSnakeNode)malloc(sizeof(SnakeNode));if (pNext == NULL) {perror("malloc tail");return;}pNext->next = NULL;//向上if (ps->dir == UP) {pNext->x = ps->pSnake->x;pNext->y = ps->pSnake->y - 20;}//向下else if (ps->dir == DOWN) {pNext->x = ps->pSnake->x;pNext->y = ps->pSnake->y + 20;}//向右else if (ps->dir == LEFT) {pNext->x = ps->pSnake->x - 15;pNext->y = ps->pSnake->y;}//向左else if (ps->dir == RIGHT) {pNext->x = ps->pSnake->x + 15;pNext->y = ps->pSnake->y;}//下一个坐标处是否是食物if (NextIsFood(ps, pNext)){//是食物就吃掉EatFood(ps, pNext);}else{//不是食物就正常一步NotEatFood(ps, pNext);}//检测撞墙KillByWall(ps);//检测撞到自己KillBySelf(ps);
}
//判断下一个坐标是不是食物
bool NextIsFood(pSnake ps, pSnakeNode pNext) {if (ps->pFood->x == pNext->x && ps->pFood->y == pNext->y) {return true;}else {return false;}
}//是食物就吃掉
void EatFood(pSnake ps, pSnakeNode pNext) {//头插pNext->next = ps->pSnake;ps->pSnake = pNext;//打印蛇pSnakeNode cur = ps->pSnake;while (cur) {picture(cur->x, cur->y);Scur = cur->next;}//改变分数ps->Score += ps->FoodWeight;//释放旧的食物free(ps->pFood);//重新生成食物CreateFood(ps);
}
//不是食物就正常一步
void NotEatFood(pSnake ps, pSnakeNode pNext) {//头插pNext->next = ps->pSnake;ps->pSnake = pNext;pSnakeNode cur = ps->pSnake;while (cur->next->next) {picture(cur->x, cur->y);cur = cur->next;}//把尾巴打印成背景图片	IMAGE img4;loadimage(&img4, "picture.jpg\\picture4.jpg", SIZE_X, SIZE_Y, true);putimage(cur->next->x, cur->next->y, &img4);//释放尾部free(cur->next);cur->next = NULL;
}
//检测撞墙
void KillByWall(pSnake ps) {if (ps->pSnake->x == 885 ||ps->pSnake->y == 680 ||ps->pSnake->x == 15 ||ps->pSnake->y == 20){ps->status = KILL_BY_WALL;return;}
}
//检测撞到自己
void KillBySelf(pSnake ps) {pSnakeNode cur = ps->pSnake->next;while (cur) {if (cur->x == ps->pSnake->x && cur->y == ps->pSnake->y){ps->status = KILL_BY_SELF;return;}cur = cur->next;}
}
//结束游戏后的工作
void GameEnd(pSnake ps)
{switch (ps->status){case ESC:outtextxy(330, 300, "主动退出游戏,正常退出\n");break;case KILL_BY_WALL:outtextxy(330, 300, "很遗憾,撞墙了,游戏结束\n");break;case KILL_BY_SELF:outtextxy(330, 300, "很遗憾,咬到自己了,游戏结束\n");break;}//释放贪吃蛇的链表资源pSnakeNode cur = ps->pSnake;pSnakeNode del = NULL;while (cur){del = cur;cur = cur->next;free(del);}//把最后打印的食物打印成背景图片IMAGE img4;loadimage(&img4, "picture.jpg\\picture4.jpg", SIZE_X, SIZE_Y, true);putimage(ps->pFood->x, ps->pFood->y, &img4);free(ps->pFood);ps = NULL;
}//判断是否再来一局
bool Determine(char str[]) {char arr[4] = "Yes";int ret = strcmp(str, arr);if (ret == 0) {return true;}else {return false;}
}

好啦今天的分享就到这里了,感谢观看。

相关文章:

c语言->贪吃蛇实战技巧结合EasyX简单实现页面管理(简单实现)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 1. 游戏背景 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯⽅…...

C语言-详解内存函数

文章目录 1.memcpy使用和模拟实现1.1 memcpy函数的使用规则1.2 memcpy函数的使用1.2 模拟实现memcpy函数 2.memmove 函数的使用和模拟实现2.1 memmove 函数使用规则2.2 memmove函数的使用2.3 模拟实现memmove函数2.3.1 从后往前移2.3.2 从前往后移 2.4 算法实现2.4.1 从前往后移…...

【核心完整复现】基于目标级联法的微网群多主体分布式优化调度

1 主要内容 之前发布了华电学报的复现程序《基于目标级联法的微网群多主体分布式优化调度》&#xff0c;具体链接为【防骗版】基于目标级联法的微网群多主体分布式优化调度&#xff0c;虽然对模型及结果进行了复现&#xff0c;但是部分模型细节和参数并没有完全实现&#xff0…...

Mac下安装NVM,NVM安装Node(附带NPM)

1、理解NVM、node、NPM 什么是NVM&#xff1f; NVM: Node.js Version Manager&#xff0c;用来管理 node 的版本。 什么是 Node.js? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js使用了一个事件驱动、非阻塞式I/O的模型&#xff08; Node.js的特性&…...

java之变量的作用域

在java中&#xff0c;变量需要像其他编程语言中先定义&#xff0c;再使用。但并不是定义好就能用。需要对变量定义一个作用范围才能使用&#xff0c;这个作用范围称为作用域。 在java程序中&#xff0c;变量会定义在一个花括号内&#xff0c;花括号内的区域就是作用域。 比如…...

CentOS 7软件安装全攻略:YUM命令详解与实战

在CentOS 7中&#xff0c;软件安装主要依赖于其强大的包管理器——YUM&#xff08;Yellowdog Updater Modified&#xff09;。YUM可以自动解决软件包之间的依赖关系&#xff0c;使得软件的安装、更新和卸载变得简单而高效。本文将详细介绍CentOS 7中软件安装的相关命令、选项和…...

达梦关键字(如:XML,EXCHANGE,DOMAIN,link等)配置忽略

背景&#xff1a;在使用达梦数据库时&#xff0c;查询SQL中涉及XML,EXCHANGE,DOMAIN,link字段&#xff0c;在达梦中是关键字&#xff0c;SQL报关键词不能使用的错误。 解决办法&#xff1a; 配置达梦安装文件E:\MyJava\dmdbms\data\DAMENG\dm.ini 忽略这些关键词&#xff0c;…...

2024/4/11 直流电机调速/PWM

一、直流电机简介和PWM原理 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转 直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&#xff08;转子&…...

贝乐虎儿歌v6.8.0解锁高级版亲子学习儿歌

软件介绍 贝乐虎儿歌免费版app&#xff0c;出自乐擎网络的创意工坊&#xff0c;专为孩子们雕琢了一系列富含创意的动画儿歌内容。这款app通过贝乐虎兄弟的可爱形象&#xff0c;让孩子们在愉快的观看中接触到各种儿歌和故事。不仅如此&#xff0c;app还巧妙地将古诗、英语等学习…...

计算机网络技术-RIP、0SPF和BGP协议的工作原理和应用

目录 RIP (Routing Information Protocolv&#xff09;路由信息协议OSPF(Open Shortest Path First) 开放式最短路径优先BGP( Border Gateway Protocol)边界网关协议 RIP (Routing Information Protocolv&#xff09;路由信息协议 RIP协议 是 TCP/IP环境中开发的第一个路由选择…...

机器学习——自动驾驶

本章我们主要学习以下内容: 阅读自动驾驶论文采集数据根据论文搭建自动驾驶神经网络训练模型在仿真环境中进行自动驾驶 论文介绍 本文参考自2016年英伟达发表的论文《End to End Learning for Self-Driving Cars》 📎end2end.pdf...

Android 14 vold 分析(2)VolumeManager 和 NetlinkManger

3. VolumeManager::Instance() 和 VolumeManager::start() system/vold/VolumeManager.cpp 3.1 Instance()没啥好说的 非常简单 112 VolumeManager* VolumeManager::Instance() {113 if (!sInstance) sInstance new VolumeManager();114 return sInst…...

《黑马点评》Redis高并发项目实战笔记(上)P1~P45

P1 Redis企业实战课程介绍 P2 短信登录 导入黑马点评项目 首先在数据库连接下新建一个数据库hmdp&#xff0c;然后右键hmdp下的表&#xff0c;选择运行SQL文件&#xff0c;然后指定运行文件hmdp.sql即可&#xff08;建议MySQL的版本在5.7及以上&#xff09;&#xff1a; 下面这…...

pytorch车牌识别

目录 使用pytorch库中CNN模型进行图像识别收集数据集定义CNN模型卷积层池化层全连接层 CNN模型代码使用模型 使用pytorch库中CNN模型进行图像识别 收集数据集 可以去找开源的数据集或者自己手做一个 最终整合成 类别分类的图片文件 定义CNN模型 卷积层 功能&#xff1a;提…...

【C++入门】内联函数、auto与基于范围的for循环

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…...

服务器停用,备份服务文件。

文章目录 引言I 文件备份1.1 数据库文件/证书1.2 redis1.3 nacosII JAVA流水线备份2.1 java构建2.2 镜像构建2.3 docker 部署2.4 子模块构建2.5 Dockerfile_prodIII VUE项目流水线备份3.1 Node.js 构建3.2 Dockerfile_prod...

基于Python的深度学习的中文情感分析系统(V2.0),附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

使用Postman发送跨域请求实验

使用Postman发送跨域请求 1 跨域是什么&#xff1f;2 何为同源呢?3 跨域请求是如何被检测到的&#xff1f;4 Postman跨域请求测试4.1 后端准备4.2 测试用例4.2.1 后端未配置跨域请求(1) 前端不跨域&#xff08;2&#xff09;前端跨域 4.2.2 后端配置跨域信息&#xff08;1&…...

4、jvm-垃圾收集算法与垃圾收集器

垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比如…...

[Excel]如何限制儲存格輸入格式? 以“字首為英文字母大寫,其餘為數字,共15碼“為範例

[Excel]如何限制儲存格輸入格式 需求: 當一個excel表格需要由多位使用者來輸入資料時&#xff0c;難免會出現資料輸入錯誤問題&#xff0c;尤其是料號&#xff0c;品號或是訂單號的長類型編碼。若是問題屬於輸入錯誤"資料"但格式未錯誤&#xff0c;則可能需要讓exce…...

错题记录-华为海思

华为 海思数字芯片 参考 &#xff1a;FPGA开发/数字IC笔试系列(5) 华为海思IC笔试解析 FPGA开发/数字IC笔试系列(6) 华为海思IC笔试解析 SystemVerilog Function与Task的区别 $readmemh与$readmemb这两个系统任务是用来从指定文件中读取数据到寄存器数组或者RAM、ROM中。除了…...

rspack 使用构建vue3脚手架

基于 Rust 的高性能 Web 构建工具。rspack 主要适配 webpack 生态&#xff0c;对于绝大多数 webpack 工具库都是支持的。 启动速度快&#xff1b;增量热更新快。兼容 webpack 生态&#xff1b;内置了 ts、jsx、css、css modules 等开箱即用。生产优化&#xff0c;tree shaking…...

maven之pom中的build标签

1、build标签分类 1.1、全局配置&#xff08;project build&#xff09; 针对整个项目的所有情况都有效。 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"htt…...

Cesium.js--》探秘Cesium背后的3D模型魔力—加载纽约模型

今天简单实现一个Cesium.js的小Demo&#xff0c;加强自己对Cesium知识的掌握与学习&#xff0c;先简单对这个开源库进行一个简单的介绍吧&#xff01; Cesium 是一个开源的地理空间可视化引擎&#xff0c;用于创建基于 Web 的三维地球应用程序。它允许开发人员在网页上呈现高度…...

.NET i18n 多语言支持与国际化

环境 WIN10 VS2022 .NET8 1.&#x1f44b;创建项目 2.&#x1f440;创建Resources Controllers HomeController.en.resx HomeController.fr.resx HomeController.zh.resx 3.&#x1f331;Program.cs添加国际化支持 // 添加国际化支持 builder.Services.AddLocalization(…...

基于Pytorch实现图像分类——基于jupyter

分类任务 网络基本构建与训练方法&#xff0c;常用函数解torch.nn.functional模块nn.Module模块 MNIST数据集下载 from pathlib import Path import requestsDATA_PATH Path("data") PATH DATA_PATH / "mnist"PATH.mkdir(parentsTrue, exist_okTrue)U…...

如何将CSDN的文章以PDF文件形式保存到本地

1.F12 打开开发者工具窗口 2.console下输入命令 (function(){$("#side").remove();$("#comment_title, #comment_list, #comment_bar, #comment_form, .announce, #ad_cen, #ad_bot").remove();$(".nav_top_2011, #header, #navigator").remove…...

面试经典150题——删除有序数组中的重复项

面试经典150题 day3 题目来源我的题解方法一 双指针 题目来源 力扣每日一题&#xff1b;题序&#xff1a;26 我的题解 方法一 双指针 使用两个指针分别指向相同元素的左右边界&#xff0c;再利用一个count记录最终需要的数组长度。 时间复杂度&#xff1a;O(n) 空间复杂度&a…...

Unity3D知识点精华浓缩

一、细节 1、类与组件的关系 2、Time.deltaTime的含义 3、怎么表示一帧的移动距离 4、Update和LateUpdate的区别和适用场景 5、找游戏对象的方式&#xff08;别的对象 / 当前对象的子对象&#xff09; 6、组件1调用组件2中方法的方式 7、在面板中获取外部数据的方法 8、序列化属…...

HTML的文档说明

1.告诉浏览器当前网页的版本 2.写法&#xff1a; &#xff01;以前的写法&#xff1a;要依据网页的HTML的版本去确定&#xff0c;紫萼发油很多很多。 具体的写法可以参考&#xff1a;W3C官网的文档说明 &#xff01;新写法&#xff1a;W3C都推荐用h5的写法 <DOCTYPE ht…...

建筑培训网成绩查询/南宁seo服务公司

SharePoint 2010 BI新特性制作丰富多样的图表 在SharePoint 2010中&#xff0c;新增加了一个非常好用的图表Web Part&#xff0c;我们可以通过它来制作丰富多样的图表&#xff0c;叫做Chart Web Part&#xff0c;这部分的SDK也是小弟所写&#xff0c;与其他的web part不同的是&…...

基于wordpress学校系统/自建网站平台

一直把视图理解为一个select语句而已&#xff0c;视图一般就是用于查询&#xff0c;不会通过视图来更新表或视图本身的数据&#xff0c;所以视图根本不需要什么主键。今天自己建了一个视图view_test:drop view if existsview_testcreate viewview_testasselecta.c1,a.c2,b.c1,b…...

怎样找回网站域名密码/seo优化顾问

sudo apt-get update sudo apt-get install mysql-server mysql-client //密码&#xff1a;mmchong sudo netstat -tap|grep mysql //检查mysql的端口是否listenmysql -u root -p //启动&#xff0c;提示输入密码转载于:https://www.cnblogs.com/amelie-tingting/p/6125646.ht…...

滁州做网站优化/百度投放广告收费标准

在本文中&#xff0c;我们会研究一些用于数据科学任务的 Python 库&#xff0c;而不是常见的比如 panda、scikit-learn 和 matplotlib 等的库。尽管像 panda 和 scikit-learn 这样的库&#xff0c;是在机器学习任务中经常出现的&#xff0c;但是了解这个领域中的其它 Python 产…...

wordpress模版做网站/百度百科词条

Word 2013中新功能不少&#xff0c;当然也不能忘记老功能&#xff0c;今天我们要介绍的是带圈字符的输入&#xff0c;不会的朋友赶快擦亮眼睛&#xff0c;跟着小编学习一下&#xff01;①启动Word2013&#xff0c;单击开始--字体选项卡里面的带圈字符按钮。②弹出带圈字符界面&…...

网站建设与制作实训报告/全球搜索

本文的主要讲述的是在PHP中调用MySQL数据库的基本操作代码以及解释&#xff0c;具有一定的参考价值&#xff0c;有需要的朋友一定要好好看看&#xff01;PHP-MySQL基本操作<?php // 1.防止页面中文乱码header("content-type:text/html;charsetutf-8");// 链接数据…...