雙人貪吃蛇代碼分享

一. 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.pswp.cn/web/40681.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40681.shtml
英文地址,請注明出處:http://en.pswp.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;重新…