双人贪吃蛇代码分享

一. snake.h

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<stdbool.h>
#include<locale.h>
#include<time.h>
#define Pos_x1 24
#define Pos_y1 5#define Pos_x2 24
#define Pos_y2 15
#define WALL L'□'#define KEY_PRESS(vk) ((GetAsyncKeyState(vk)&1)?1:0)//判断按键是按过还是没按过
//蛇的方向
enum DIRECTION
{UP = 1,DOWN,LEFT,RIGHT
};//蛇的状态
//正常,撞墙,撞到自己,正常退出
enum STATUS
{OK,//正常,继续游戏KILL_BY_WALL,//撞墙KILL_BY_SELF,//撞到自己KILL_BY_OTHER,//撞到别的蛇END_NORMAL//正常退出
};//蛇身的节点类型
typedef struct SnakeNode
{//坐标int x;int y;//指向下一个节点的指针struct SnakeNode* next;
}SnakeNode, * pSnakeNode;//贪吃蛇
typedef struct Snake
{pSnakeNode _pSnake;//指向蛇头的指针pSnakeNode _pFood;//指向食物节点的指针enum DIRECTION _dir;//蛇的方向enum STATUS _status;//游戏的状态int _food_weight;//一个食物的分数int _score;//总成绩int _sleep_time;//休息时间,时间越短,速度越快,时间越长,速度越慢
}Snake, * pSnake;//函数的声明//定位光标位置void SetPos(short x, short y);//双人游戏的初始化
void GameStart2(pSnake snake1,pSnake snake2);//欢迎界面的打印
void Welcome2();//创建地图
void CreateMap();//双人初始化蛇身
void InitSnake2(pSnake ps1, pSnake ps2);//创建食物
void CreateFood2(pSnake ps1,pSnake ps2);//打印帮助信息
void PrintHelpInfo();//查看节点是否是食物
int JubgeNextIsFood(pSnakeNode pn, pSnake ps);//双人游戏运行时的逻辑
void GameRun2(pSnake ps1, pSnake ps2);//游戏结束的处理
void GameEnd2(pSnake ps1, pSnake ps2);//检测蛇是否撞到墙
void KillWall(pSnake ps1,pSnake ps2);//检测蛇是否撞到自己
void KillSelf(pSnake ps1,pSnake ps2);//检测是否撞到别的蛇
void KillOther(pSnake ps1, pSnake ps2);

二. test.c

#include"snake.h"void test()
{int f = 1;srand((unsigned int)time(NULL));SetPos(35, 14);do{system("cls");//创建贪吃蛇Snake  snake1 = { 0 };Snake  snake2 = { 0 };//初始化游戏GameStart2(&snake1, &snake2);//玩游戏GameRun2(&snake1, &snake2);//结束游戏GameEnd2(&snake1,&snake2);SetPos(35, 14);printf("是否再来一局(Y/N):");while (1){if (KEY_PRESS(78)){f = 0;break;}if (KEY_PRESS(89)){break;}}} while (f);
}int main()
{setlocale(LC_ALL, "");test();return 0;
}

三. snake.c

#include"snake.h"
void SetPos(short x, short y)
{//获得标准输出设备的句柄HANDLE houtput = NULL;houtput = GetStdHandle(STD_OUTPUT_HANDLE);//定位光标的位置COORD pos = { x,y };SetConsoleCursorPosition(houtput, pos);//设置指定控制台屏幕缓冲区中光标的位置//参数:1. 控制台屏幕缓冲区的句柄//2. 指定新光标的位置的 COORD结构
}
int JubgeNextIsFood(pSnakeNode pn, pSnake ps)//判断下个节点是否是食物
{if (ps->_pFood->x == pn->x && ps->_pFood->y == pn->y)return 1;elsereturn 0;
}
void EatFood(pSnakeNode pn, pSnake ps,pSnake ps2)
{//头插法ps->_pFood->next = ps->_pSnake;//将食物的下一个变为头ps->_pSnake = ps->_pFood;//将食物定义为头free(pn);//不需要pn记录头的位置了,就销毁pn = NULL;//打印蛇身pSnakeNode cur = ps->_pSnake;SetPos(cur->x, cur->y);wprintf(L"%lc", L'◆');cur = cur->next;while (cur){SetPos(cur->x, cur->y);wprintf(L"%lc", L'●');cur = cur->next;}ps->_score += ps->_food_weight;//重新创建食物CreateFood2(ps,ps2);//因为从thc.h里已经声明了,所以不用再上面声明
}
void NoFood(pSnakeNode pn, pSnake ps)
{pn->next = ps->_pSnake;//下一步的位置之后链接上头结点ps->_pSnake = pn;//将头变为下一步的位置pSnakeNode cur = pn->next, qrev = pn;while (cur->next){cur = cur->next;qrev = qrev->next;}SetPos(cur->x, cur->y);printf("  ");free(cur);cur = NULL;qrev->next = NULL;//打印蛇身cur = ps->_pSnake;SetPos(cur->x, cur->y);wprintf(L"%lc", L'◆');cur = cur->next;while (cur){SetPos(cur->x, cur->y);wprintf(L"%lc", L'●');cur = cur->next;}
}
void EatFood2(pSnakeNode pn, pSnake ps,pSnake ps1)
{//头插法ps->_pFood->next = ps->_pSnake;//将食物的下一个变为头ps->_pSnake = ps->_pFood;//将食物定义为头free(pn);//不需要pn记录头的位置了,就销毁pn = NULL;//打印蛇身pSnakeNode cur = ps->_pSnake;cur = ps->_pSnake;SetPos(cur->x, cur->y);wprintf(L"%lc", L'◇');cur = cur->next;int tmp = 0;while (cur){tmp++;SetPos(cur->x, cur->y);wprintf(L"%lc", L'●');cur = cur->next;}ps->_score += ps->_food_weight;//重新创建食物CreateFood2(ps,ps1);//因为从snake.h里已经声明了,所以不用再上面声明
}
void NoFood2(pSnakeNode pn, pSnake ps)
{pn->next = ps->_pSnake;//下一步的位置之后链接上头结点ps->_pSnake = pn;//将头变为下一步的位置pSnakeNode cur = pn->next, qrev = pn;while (cur->next){cur = cur->next;qrev = qrev->next;}SetPos(cur->x, cur->y);printf("  ");free(cur);cur = NULL;qrev->next = NULL;//打印蛇身cur = ps->_pSnake;SetPos(cur->x, cur->y);wprintf(L"%lc", L'◇');cur = cur->next;int tmp = 0;while (cur){tmp++;SetPos(cur->x, cur->y);wprintf(L"%lc", L'●');cur = cur->next;}
}
void Pause()//暂停函数
{while (1)//无限暂停直到再按一次空格键{Sleep(200);if (KEY_PRESS(VK_SPACE)){break;}}
}
void KillWall(pSnake ps1,pSnake ps2)
{if (ps1->_pSnake->x == 0 || ps1->_pSnake->x == 56 || ps1->_pSnake->y == 0 || ps1->_pSnake->y == 26){ps1->_status = KILL_BY_WALL;}if (ps2->_pSnake->x == 0 || ps2->_pSnake->x == 56 || ps2->_pSnake->y == 0 || ps2->_pSnake->y == 26){ps2->_status = KILL_BY_WALL;}}
void KillSelf(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;break;}cur = cur->next;}
}void KillOther(pSnake ps1,pSnake ps2)
{pSnakeNode cur1 = ps1->_pSnake->next;pSnakeNode cur2 = ps2->_pSnake->next;while (cur1){if (cur1->x == ps2->_pSnake->x && cur1->y == ps2->_pSnake->y){ps2->_status = KILL_BY_OTHER;break;}cur1 = cur1->next;}while (cur2){if (cur2->x == ps1->_pSnake->x && cur2->y == ps1->_pSnake->y){ps1->_status = KILL_BY_OTHER;break;}cur2 = cur2->next;}}void Welcome2()
{SetPos(40, 14);wprintf(L"欢迎来到贪吃蛇小游戏\n");SetPos(42, 20);system("pause");//暂停system("cls");//清空屏幕SetPos(36, 14);wprintf(L"用↑↓←→来操控一号蛇的移动方向\n");SetPos(40, 16);system("pause");//暂停system("cls");SetPos(36, 14);wprintf(L"用W S A D来操控二号蛇的移动方向\n");SetPos(40, 16);system("pause");//暂停system("cls");//清空屏幕SetPos(40, 14);wprintf(L"F7加速,F8减速\n");SetPos(40, 16);system("pause");//暂停system("cls");SetPos(38, 14);wprintf(L"加速能得到更高的分数\n");SetPos(40, 16);system("pause");system("cls");
}//双人模式蛇的移动
void SnakeMove2(pSnake ps1, pSnake ps2)
{SnakeNode* pNextNode1 = (SnakeNode*)malloc(sizeof(SnakeNode));SnakeNode* pNextNode2 = (SnakeNode*)malloc(sizeof(SnakeNode));if (pNextNode1 == NULL||pNextNode2==NULL){perror("SnakeMove()::malloc()");return;}switch (ps1->_dir){case UP:pNextNode1->x = ps1->_pSnake->x;pNextNode1->y = ps1->_pSnake->y - 1;break;case DOWN:pNextNode1->x = ps1->_pSnake->x;pNextNode1->y = ps1->_pSnake->y + 1;break;case RIGHT:pNextNode1->x = ps1->_pSnake->x + 2;pNextNode1->y = ps1->_pSnake->y;break;case LEFT:pNextNode1->x = ps1->_pSnake->x - 2;pNextNode1->y = ps1->_pSnake->y;break;}switch (ps2->_dir){case UP:pNextNode2->x = ps2->_pSnake->x;pNextNode2->y = ps2->_pSnake->y - 1;break;case DOWN:pNextNode2->x = ps2->_pSnake->x;pNextNode2->y = ps2->_pSnake->y + 1;break;case RIGHT:pNextNode2->x = ps2->_pSnake->x + 2;pNextNode2->y = ps2->_pSnake->y;break;case LEFT:pNextNode2->x = ps2->_pSnake->x - 2;pNextNode2->y = ps2->_pSnake->y;break;}if (JubgeNextIsFood(pNextNode1, ps1))//检测一号蛇下一个坐标是否是食物{EatFood(pNextNode1, ps1,ps2);//第一个参数记录头的位置,要在函数里销毁}else{NoFood(pNextNode1, ps1);}if (JubgeNextIsFood(pNextNode2, ps2))//检测二号蛇下一个坐标是否是食物{EatFood2(pNextNode2, ps2,ps1);//第一个参数记录头的位置,要在函数里销毁}else{NoFood2(pNextNode2, ps2);}//撞墙死亡KillWall(ps1,ps2);//撞到自己死亡KillSelf(ps1);KillSelf(ps2);//撞到其它蛇死亡KillOther(ps1,ps2);
}void CreateMap()//创造墙
{//上for (int i = 0; i < 29; i++)wprintf(L"%lc", L'□');//下SetPos(0, 26);for (int i = 0; i < 29; i++)wprintf(L"%lc", L'□');//左for (int i = 1; i <= 25; i++){SetPos(0, i);wprintf(L"%lc", L'□');}//右for (int i = 1; i <= 25; i++){SetPos(56, i);wprintf(L"%lc", L'□');}
}void InitSnake2(pSnake ps1, pSnake ps2)//初始化双人模式蛇
{pSnakeNode cur1 = NULL;pSnakeNode cur2 = NULL;//一号蛇初始化身体for (int i = 0; i < 5; i++){cur1 = (pSnakeNode)malloc(sizeof(SnakeNode));if (cur1 == NULL){perror("InitSnake()::malloc()");return;}cur1->next = NULL;cur1->x = Pos_x1 + 2 * i;cur1->y = Pos_y1;//头插法插入链表if (ps1->_pSnake == NULL)//空链表{ps1->_pSnake = cur1;}else //非空{cur1->next = ps1->_pSnake;ps1->_pSnake = cur1;}}//二号蛇初始化身体for (int i = 0; i < 5; i++){cur2 = (pSnakeNode)malloc(sizeof(SnakeNode));if (cur2 == NULL){perror("InitSnake()::malloc()");return;}cur2->next = NULL;cur2->x = Pos_x2 + 2 * i;cur2->y = Pos_y2;//头插法插入链表if (ps2->_pSnake == NULL)//空链表{ps2->_pSnake = cur2;}else //非空{cur2->next = ps2->_pSnake;ps2->_pSnake = cur2;}}//一号蛇身体打印cur1 = ps1->_pSnake;SetPos(cur1->x, cur1->y);wprintf(L"%lc", L'◆');cur1 = cur1->next;while (cur1){SetPos(cur1->x, cur1->y);wprintf(L"%lc", L'●');cur1 = cur1->next;}//二号蛇身体打印cur2 = ps2->_pSnake;SetPos(cur2->x, cur2->y);wprintf(L"%lc", L'◇');cur2 = cur2->next;while (cur2){SetPos(cur2->x, cur2->y);wprintf(L"%lc", L'●');cur2 = cur2->next;}//设置贪吃蛇1的属性ps1->_dir = RIGHT;//默认向右ps1->_score = 0;//总成绩初始为0ps1->_food_weight = 10;//食物的奖励分数ps1->_sleep_time = 200;//蛇多久动一次,单位是毫秒ps1->_status = OK;//蛇的状态是正常的//设置贪吃蛇2的属性ps2->_dir = RIGHT;//默认向右ps2->_score = 0;//总成绩初始为0ps2->_food_weight = 10;//食物的奖励分数ps2->_sleep_time = 200;//蛇多久动一次,单位是毫秒ps2->_status = OK;//蛇的状态是正常的
}void CreateFood2(pSnake ps1,pSnake ps2)//随机生成食物
{int x = 0;int y = 0;//生成x是2的倍数//x: 2至54//y: 1至25
again:do{x = rand() % 53 + 2;y = rand() % 25 + 1;} while (x % 2 != 0);//x和y的坐标不能和两条蛇的身体坐标冲突pSnakeNode cur1 = ps1->_pSnake;pSnakeNode cur2 = ps2->_pSnake;while (cur1){if (x == cur1->x && y == cur1->y){goto again;//如果食物和1蛇身重叠就返回重新生成食物}cur1 = cur1->next;}while (cur2){if (x == cur2->x && y == cur2->y){goto again;//如果食物和2蛇身重叠就返回重新生成食物}cur2 = cur2->next;}//创建食物的节点pSnakeNode pfood = (pSnakeNode)malloc(sizeof(SnakeNode));if (pfood == NULL){perror("CreateFood()::malloc()");return;}pfood->x = x;pfood->y = y;pfood->next = NULL;SetPos(x, y);//定位食物位置wprintf(L"%lc", L'★');ps1->_pFood = pfood;ps2->_pFood = pfood;
}void PrintHelpInfo()
{SetPos(64, 12);wprintf(L"%ls", L"不能穿墙,不能咬到自己和别人");SetPos(64, 16);wprintf(L"%ls", L"用↑↓←→来控制一号蛇");SetPos(64, 17);wprintf(L"%ls", L"用 W A S D 来控制二号蛇");SetPos(64, 19);wprintf(L"%ls", L"按F7加速,按F8减速");SetPos(64, 20);wprintf(L"%ls", L"按ESC退出游戏,空格暂停游戏");
}//双人模式运行
void GameRun2(pSnake ps1, pSnake ps2)
{//打印帮助信息PrintHelpInfo();do{//打印总分数和食物的分值SetPos(64, 10);printf("一号蛇总分数:%d\n", ps1->_score);//总分数SetPos(64, 11);printf("一号蛇食物的分值:%2d\n", ps1->_food_weight);//食物的分值,%2d防止分数减少后面的0不去除SetPos(64, 13);printf("二号蛇总分数:%d\n", ps2->_score);//总分数SetPos(64, 14);printf("二号蛇食物的分值:%2d\n", ps2->_food_weight);//蛇只能向当前方向的左右转向,不能朝后转向if (KEY_PRESS(VK_UP) && ps1->_dir != DOWN)//{ps1->_dir = UP;}else if (KEY_PRESS(87) && ps2->_dir != DOWN){ps2->_dir = UP;}else if (KEY_PRESS(VK_DOWN) && ps1->_dir != UP){ps1->_dir = DOWN;}else if (KEY_PRESS(83) && ps2->_dir != UP){ps2->_dir = DOWN;}else if (KEY_PRESS(VK_LEFT) && ps1->_dir != RIGHT){ps1->_dir = LEFT;}else if (KEY_PRESS(65) && ps2->_dir != RIGHT){ps2->_dir = LEFT;}else if (KEY_PRESS(VK_RIGHT) && ps1->_dir != LEFT){ps1->_dir = RIGHT;}else if (KEY_PRESS(68) && ps2->_dir != LEFT){ps2->_dir = RIGHT;}else if (KEY_PRESS(VK_SPACE)){Pause();}else if (KEY_PRESS(VK_ESCAPE)){ps1->_status = END_NORMAL;//游戏状态设置为退出ps2->_status = END_NORMAL;//游戏状态设置为退出}else if (KEY_PRESS(VK_F7))//加速{if (ps2->_sleep_time > 80){ps1->_sleep_time -= 30;ps1->_food_weight += 2;//速度增加食物分数增加ps2->_sleep_time -= 30;ps2->_food_weight += 2;//速度增加食物分数增加}}else if (KEY_PRESS(VK_F8))//减速{if (ps2->_sleep_time < 320){ps1->_sleep_time += 30;ps1->_food_weight -= 2;ps2->_sleep_time += 30;ps2->_food_weight -= 2;}}SnakeMove2(ps1, ps2);//蛇的移动Sleep(ps1->_sleep_time);} while (ps1->_status == OK && ps2->_status == OK);}
void GameEnd2(pSnake ps1,pSnake ps2)
{SetPos(60, 5);if (ps1->_status == END_NORMAL)printf("退出游戏\n");else if (ps1->_status != OK && ps2->_status != OK)printf("同归于尽啦\n");else if (ps1->_status == KILL_BY_WALL && ps2->_status == OK)printf("二号蛇胜利^_^\n");else if (ps1->_status == KILL_BY_SELF && ps2->_status == OK)printf("二号蛇胜利^_^\n");else if (ps1->_status == KILL_BY_OTHER && ps2->_status == OK)printf("二号蛇胜利^_^\n");else if (ps2->_status == KILL_BY_WALL && ps1->_status == OK)printf("一号蛇胜利^_^\n");else if (ps2->_status == KILL_BY_SELF && ps1->_status == OK)printf("一号蛇胜利^_^\n");else if (ps2->_status == KILL_BY_OTHER && ps1->_status == OK)printf("一号蛇胜利^_^\n");//释放蛇身的链表pSnakeNode cur1 = ps1->_pSnake;while (cur1){pSnakeNode tmp = cur1;cur1 = cur1->next;free(tmp);tmp = NULL;}pSnakeNode cur2 = ps2->_pSnake;while (cur2){pSnakeNode tmp = cur2;cur2 = cur2->next;free(tmp);tmp = NULL;}}void GameStart2(pSnake ps1, pSnake ps2)
{//0. 设置窗口大小,隐藏光标system("mode con cols=100 lines=30");system("title 贪吃蛇");HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE);//隐藏光标操作 CONSOLE_CURSOR_INFO CursorInfo;GetConsoleCursorInfo(houtput, &CursorInfo);//获取控制台光标状态CursorInfo.bVisible = false;//隐藏控制台光标SetConsoleCursorInfo(houtput, &CursorInfo);//设置控制台光标状态//1. 打印环境界面Welcome2();//2. 绘制地图 CreateMap();//3. 创建蛇InitSnake2(ps1, ps2);//4. 创建食物CreateFood2(ps1,ps2);
}

氵氵氵

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

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

相关文章

大学生电子设计大赛超全资料分享

超全大学生电子设计大赛项目合集免费分享 电赛竞赛资料大全&#xff0c;新增竞赛空间电子设计资料。包含嵌入式硬件和软件开发的学习资料&#xff0c;包括PCB教程&#xff0c;单片机例程&#xff0c; 单片机课程设计毕业设计参考资料、项目设计方案&#xff0c;源码和开发文档…

分布式事务get global lock fail Xid 获取全局锁失败

问题如下&#xff1a; 解决方法&#xff1a;在发生报错的方法上添加本地事务

压缩解压文件工具

一、maven依赖 <dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>2.11.5</version></dependency>二、工具类 package com.summer.toolkit.util;import com.summer.toolkit.excepti…

Day05-03-Nexus仓库

Day05-03-Nexus仓库 05-nexus-仓库1. 概述2. 极速部署指南2.1 下载2.2 部署2.3 配置2.4 连接使用nexus2.4 编译与测试 3. 总结 05-nexus-仓库 1. 概述 背景: maven编译的时候&#xff0c;npm/cnpm编译&#xff0c;需要下载大量的依赖包。这些依赖包在每一次构建的时候都需要使…

React 省市查询组件完整代码

目录 一、地区文件 二、Antd配合使用 三、实现效果 一、地区文件 下载地址&#xff1a;全国省市区数据_JSON格式_SQL格式 export const chinaArea {0: {1: 北京,2: 天津,3: 河北省,4: 山西省,5: 内蒙古自治区,6: 辽宁省,7: 吉林省,8: 黑龙江省,9: 上海,10: 江苏省,11: 浙…

Perl 语言入门学习指南:探索高效脚本编程的奥秘

引言 Perl&#xff0c;全称Practical Extraction and Report Language&#xff0c;是一种功能强大的编程语言&#xff0c;特别擅长于文本处理、报告生成以及系统自动化管理任务。自1987年诞生以来&#xff0c;Perl凭借其灵活性、强大的内置功能库和广泛的社区支持&#xff0c;…

维护和管理LDAP之OpenDJ

目录 基本介绍 服务专有名词 安装 命令行工具 密码管理 重置管理员密码 管理服务器进程 管理索引 如何搜索 管理索引 管理目录数据 测试数据 导出数据 导入数据 LDIF文件数据查看和比较 数据存储-Backends 配置连接 开启 HTTP/HTTPS连接 使用 REST访问 -open…

Spring AOP、Spring MVC工作原理、发展演变、常用注解

Spring AOP 概念 AOP全称为Aspect Oriented Programming&#xff0c;表示面向切面编程。切面指的是将那些与业务无关&#xff0c;但业务模块都需要使用的功能封装起来的技术。 AOP基本术语 **连接点&#xff08;Joinpoint&#xff09;&#xff1a;**连接点就是被拦截到的程序执…

AQWA | 水动力分析 二阶波浪力

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Midjourney对图片细微调整和下载保存

点击v2是对第二图片细微调整。 点击u3对第3张图片进行放大。 保存图片: 对点击u3放大的图片&#xff0c;双击 , 右键保存图片

停车场小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;车主管理&#xff0c;商家管理&#xff0c;停车场信息管理&#xff0c;预约停车管理&#xff0c;商场收费管理&#xff0c;留言板管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;停车场信息…

审核平台前端新老仓库迁移

背景 审核平台接入50业务&#xff0c;提供在线审核及离线质检、新人培训等核心能力&#xff0c;同时提供数据报表、资源追踪、知识库等工具。随着平台的飞速发展&#xff0c;越来越多的新业务正在或即将接入审核平台&#xff0c;日均页面浏览量为百万级别。如今审核平台已是公司…

代码提交错分支了怎么办?

你有么有遇到过正在开发的代码&#xff0c;提交到生产环境的分支去&#xff0c;遇到这种情况怎么办&#xff1f; 问题重现&#xff1a; 这段注释// AAAAAAAAAAA 本来应该写在dev分支的&#xff0c;现在提交并push到master分支了 现在第一步&#xff0c;撤回提交 第二步&…

第1章 认识 Vite

明白了&#xff0c;这里是第1章内容的详细展开版本&#xff1a; 第1章 认识 Vite 1 . 什么是 Vite Vite 是一个由尤雨溪&#xff08;Vue.js 的创始人&#xff09;开发的前端构建工具&#xff0c;旨在提供极快的开发体验。Vite 的名字来源于法语&#xff0c;意为“快速”&…

python绘制一维离散点

在Python中&#xff0c;绘制一维离散点通常意味着我们要在一条直线上标记出几个特定的点。这可以通过多种库来实现&#xff0c;但最常见和强大的库之一是matplotlib。以下是一个详细的代码示例&#xff0c;它展示了如何使用matplotlib库来绘制一维离散点&#xff0c;并且这个示…

C++语言常见错误分析汇总

在一个工程里出现两个main函数时 3.obj : error LNK2005: _main already defined in file1.obj Debug/HELLO.exe : fatal error LNK1169: one or more multiply defined symbols found 这个就是说&#xff0c;你的main函数重定义了。你看看是不是你的工程里面&#xff0c;包…

MySQL的Geometry数据处理之WKB方案

MySQL的Geometry数据处理之WKT方案&#xff1a;https://blog.csdn.net/qq_42402854/article/details/140134357 MySQL的Geometry数据处理之WKT方案中&#xff0c;介绍WTK方案的优点&#xff0c;也感受到它的繁琐和缺陷。比如&#xff1a; 需要借助 ST_GeomFromText和 ST_AsTex…

Spring @Cacheable缓存注解用法说明

注解Cacheable 是 Spring 框架中用于缓存数据的方法或类的注解。通过使用这个注解&#xff0c;你可以避免重复计算和重复获取数据&#xff0c;从而提高应用程序的性能。 基本用法 引入依赖 确保在你的项目中引入了 Spring Cache 相关的依赖。如果你使用的是 Spring Boot&…

中英双语介绍中国的城市:上海市(Shanghai)

中文版 上海市是中国最大的城市之一&#xff0c;也是全球重要的金融、贸易和航运中心。作为一座现代化的国际大都市&#xff0c;上海以其繁华的商业区、丰富的文化遗产和多样化的经济结构而闻名。以下是对上海市的详细介绍&#xff0c;包括其地理位置、人口、经济、教育、文化…

qt结合vs2022安装

进入清华大学开源软件&#xff1a; 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载完成后&#xff0c;双击进行安装&#xff1a; 进入邮箱进行验证&#xff1a; 可能是因为网络问题&#xff0c;无法安装。 重新安装5.12.12版本。 安装后启动失败&#xff0c;重新…