c语言->贪吃蛇实战技巧结合EasyX简单实现页面管理(简单实现)
✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉
🍎个人主页:再无B~U~G-CSDN博客
1. 游戏背景
2. 游戏效果演⽰
屏幕录制
3. 课程⽬标
4. 课程定位
5. 技术要点

课前准备:
调好项目适应本地化

了解EasyX的坐标体系

6. 控制台程序
6.1 控制台程序


设置如下:

6.1 相关函数的使用
<locale.h>本地化
全部来自于EasyX简单图形库
6.2pause

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


案例:

6.4cleardevice

6.5图片设置


相关用法:




6.6rectangle

6.7setlinecolor设置线条颜色

7. 游戏实现
7.1地图坐标
7.2 蛇⾝和⻝物
7.3 数据结构设计

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

7.4 游戏流程设计

8. 核⼼逻辑实现分析
8.1 游戏主逻辑

8.2 游戏开始前面的准备

8.2.1 打印欢迎界⾯

看看效果:


8.2.2 创建地图
8.2.3 初始化蛇⾝

蛇的图片是:

8.2.4 创建第⼀个⻝物
先随机⽣成⻝物的坐标
- x坐标必须是15的倍数
- ⻝物的坐标不能和蛇⾝每个节点的坐标重复
- 创建⻝物节点,打印⻝物
创建⻝物的函数:CreateFood

8.3 游戏运⾏过程
8.3.1 KEY_PRESS
检测按键状态,我们封装了⼀个宏
# define KEY_PRESS(VK) ((GetAsyncKeyState(VK)&0x1) ? 1 : 0)
8.3.2 PrintHelpInfo 打印规则信息


8.3.3 蛇⾝移动
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. 参考代码
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简单实现页面管理(简单实现)
✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 1. 游戏背景 贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅…...
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 主要内容 之前发布了华电学报的复现程序《基于目标级联法的微网群多主体分布式优化调度》,具体链接为【防骗版】基于目标级联法的微网群多主体分布式优化调度,虽然对模型及结果进行了复现,但是部分模型细节和参数并没有完全实现࿰…...
Mac下安装NVM,NVM安装Node(附带NPM)
1、理解NVM、node、NPM 什么是NVM? NVM: Node.js Version Manager,用来管理 node 的版本。 什么是 Node.js? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js使用了一个事件驱动、非阻塞式I/O的模型( Node.js的特性&…...
java之变量的作用域
在java中,变量需要像其他编程语言中先定义,再使用。但并不是定义好就能用。需要对变量定义一个作用范围才能使用,这个作用范围称为作用域。 在java程序中,变量会定义在一个花括号内,花括号内的区域就是作用域。 比如…...
CentOS 7软件安装全攻略:YUM命令详解与实战
在CentOS 7中,软件安装主要依赖于其强大的包管理器——YUM(Yellowdog Updater Modified)。YUM可以自动解决软件包之间的依赖关系,使得软件的安装、更新和卸载变得简单而高效。本文将详细介绍CentOS 7中软件安装的相关命令、选项和…...
达梦关键字(如:XML,EXCHANGE,DOMAIN,link等)配置忽略
背景:在使用达梦数据库时,查询SQL中涉及XML,EXCHANGE,DOMAIN,link字段,在达梦中是关键字,SQL报关键词不能使用的错误。 解决办法: 配置达梦安装文件E:\MyJava\dmdbms\data\DAMENG\dm.ini 忽略这些关键词,…...
2024/4/11 直流电机调速/PWM
一、直流电机简介和PWM原理 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子&…...
贝乐虎儿歌v6.8.0解锁高级版亲子学习儿歌
软件介绍 贝乐虎儿歌免费版app,出自乐擎网络的创意工坊,专为孩子们雕琢了一系列富含创意的动画儿歌内容。这款app通过贝乐虎兄弟的可爱形象,让孩子们在愉快的观看中接触到各种儿歌和故事。不仅如此,app还巧妙地将古诗、英语等学习…...
计算机网络技术-RIP、0SPF和BGP协议的工作原理和应用
目录 RIP (Routing Information Protocolv)路由信息协议OSPF(Open Shortest Path First) 开放式最短路径优先BGP( Border Gateway Protocol)边界网关协议 RIP (Routing Information Protocolv)路由信息协议 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,然后右键hmdp下的表,选择运行SQL文件,然后指定运行文件hmdp.sql即可(建议MySQL的版本在5.7及以上): 下面这…...
pytorch车牌识别
目录 使用pytorch库中CNN模型进行图像识别收集数据集定义CNN模型卷积层池化层全连接层 CNN模型代码使用模型 使用pytorch库中CNN模型进行图像识别 收集数据集 可以去找开源的数据集或者自己手做一个 最终整合成 类别分类的图片文件 定义CNN模型 卷积层 功能:提…...
【C++入门】内联函数、auto与基于范围的for循环
💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#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),附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
使用Postman发送跨域请求实验
使用Postman发送跨域请求 1 跨域是什么?2 何为同源呢?3 跨域请求是如何被检测到的?4 Postman跨域请求测试4.1 后端准备4.2 测试用例4.2.1 后端未配置跨域请求(1) 前端不跨域(2)前端跨域 4.2.2 后端配置跨域信息(1&…...
4、jvm-垃圾收集算法与垃圾收集器
垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比如…...
[Excel]如何限制儲存格輸入格式? 以“字首為英文字母大寫,其餘為數字,共15碼“為範例
[Excel]如何限制儲存格輸入格式 需求: 當一個excel表格需要由多位使用者來輸入資料時,難免會出現資料輸入錯誤問題,尤其是料號,品號或是訂單號的長類型編碼。若是問題屬於輸入錯誤"資料"但格式未錯誤,則可能需要讓exce…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...


