C#【進階】俄羅斯方塊

俄羅斯方塊

文章目錄

      • Test1_場景切換相關
        • BeginScene.cs
        • BegionOrEndScene.cs
        • EndScene.cs
        • Game.cs
        • GameScene.cs
        • ISceneUpdate.cs
      • Test2_繪制對象基類和枚舉信息
        • DrawObject.cs
        • IDraw.cs
        • Position.cs
      • Test3_地圖相關
        • Map.cs
      • Test4_坐標信息類
        • BlockInfo.cs
      • Test5_板磚工人類
        • BlockWorker.cs
      • Test6_輸入模塊
        • InputThread.cs
      • Program.cs

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

Test1_場景切換相關

BeginScene.cs
namespace CSharp俄羅斯方塊
{internal class BeginScene : BegionOrEndScene{public BeginScene(){strTitle = "俄羅斯方塊";strOne = "開始游戲";}public override void EnterJDoSomthing(){if (nowSelIndex == 0){Game.ChangeScene(E_SceneType.Game);}else{Environment.Exit(0);}}}
}
BegionOrEndScene.cs
namespace CSharp俄羅斯方塊
{abstract internal class BegionOrEndScene : ISceneUpdate{protected int nowSelIndex = 0;protected string strTitle;protected string strOne;public abstract void EnterJDoSomthing();public void Update(){Console.ForegroundColor = ConsoleColor.White;Console.SetCursorPosition(Game.w / 2 - strTitle.Length, 5);Console.Write(strTitle);Console.SetCursorPosition(Game.w / 2 - strOne.Length, 8);Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;Console.Write(strOne);Console.SetCursorPosition(Game.w / 2 - 4, 10);Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("結束游戲");switch(Console.ReadKey(true).Key){case ConsoleKey.W:nowSelIndex--;if (nowSelIndex < 0){nowSelIndex = 1;}break;case ConsoleKey.S:nowSelIndex++;if (nowSelIndex > 1){nowSelIndex = 0;}break;case ConsoleKey.J:EnterJDoSomthing();break;}}}
}
EndScene.cs
namespace CSharp俄羅斯方塊
{internal class EndScene : BegionOrEndScene{public EndScene(){strTitle = "結束游戲";strOne = "回到開始界面";}public override void EnterJDoSomthing(){if(nowSelIndex == 0){Game.ChangeScene(E_SceneType.Begin);}else{Environment.Exit(0);}}}
}
Game.cs
namespace CSharp俄羅斯方塊
{enum E_SceneType{Begin,Game,End,}internal class Game{public const int w = 50;public const int h = 35;public static ISceneUpdate nowScene;public Game(){Console.CursorVisible = false;Console.SetWindowSize(w, h);Console.SetBufferSize(w, h);ChangeScene(E_SceneType.Begin);}public void start(){while (true){if (nowScene != null){nowScene.Update();}}}public static  void ChangeScene(E_SceneType type){Console.Clear();switch (type){case E_SceneType.Begin:nowScene = new BeginScene();break;case E_SceneType.Game:nowScene = new GameScene();break;case E_SceneType.End:nowScene = new EndScene();break;}}}}
GameScene.cs
namespace CSharp俄羅斯方塊
{internal class GameScene : ISceneUpdate{Map map;BlockWorker blockWorker;//bool isRunning;//新開線程//Thread inputThread;public GameScene(){map = new Map(this);blockWorker = new BlockWorker();InputThread.Instance.inputEvent += CheckInputThread;//isRunning = true;//inputThread = new Thread(CheckInputThread);設置成后臺線程(生命周期隨主線程)//inputThread.IsBackground = true;開啟線程//inputThread.Start();}public void StopThread(){//isRunning = false;//inputThread = null;//移除輸入事件監聽InputThread.Instance.inputEvent -= CheckInputThread;}private void CheckInputThread(){//while (isRunning)//{//檢測輸入,防止輸入卡程序if (Console.KeyAvailable){//避免影響主線程,在輸入后加鎖lock (blockWorker){switch (Console.ReadKey(true).Key){case ConsoleKey.LeftArrow://判斷變形if (blockWorker.CanChange(E_Change_Type.Left, map))blockWorker.Change(E_Change_Type.Left);break;case ConsoleKey.RightArrow:if (blockWorker.CanChange(E_Change_Type.Right, map))blockWorker.Change(E_Change_Type.Right);break;case ConsoleKey.A:if (blockWorker.CanMoveR_L(E_Change_Type.Left, map))blockWorker.MoveR_L(E_Change_Type.Left);break;case ConsoleKey.D:if (blockWorker.CanMoveR_L(E_Change_Type.Right, map))blockWorker.MoveR_L(E_Change_Type.Right);break;case ConsoleKey.S:if (blockWorker.CanDown(map))blockWorker.AutoMove();break;}}}//}}public void Update(){lock (blockWorker){map.Draw();blockWorker.Draw();if (blockWorker.CanDown(map))blockWorker.AutoMove();}//線程休眠減速Thread.Sleep(100);}}
}
ISceneUpdate.cs
namespace CSharp俄羅斯方塊
{/// <summary>/// 場景更新接口/// </summary>internal interface ISceneUpdate{void Update();}
}

Test2_繪制對象基類和枚舉信息

DrawObject.cs
namespace CSharp俄羅斯方塊
{/// <summary>/// 繪制類型/// </summary>enum E_DrawType{/// <summary>/// 墻壁/// </summary>Wall,/// <summary>/// 正方形方塊/// </summary>Cube,/// <summary>/// 直線/// </summary>Line,/// <summary>/// 坦克/// </summary>Tank,/// <summary>/// 左梯子/// </summary>Left_Ladder,/// <summary>/// 右梯子/// </summary>Right_Ladder,/// <summary>/// 左長梯子/// </summary>Left_Long_ladder,/// <summary>/// 右長梯子/// </summary>Right_Long_ladder,}internal class DrawObject : IDraw{public Position pos;public E_DrawType type;public DrawObject(E_DrawType type){this.type = type;}public DrawObject(E_DrawType type, int x, int y) : this(type){pos = new Position(x, y);}public void Draw(){if (pos.y < 0)return;Console.SetCursorPosition(pos.x, pos.y);switch (type){case E_DrawType.Wall:Console.ForegroundColor = ConsoleColor.Red;break;case E_DrawType.Cube:Console.ForegroundColor = ConsoleColor.Blue;break;case E_DrawType.Line:Console.ForegroundColor = ConsoleColor.Green;break;case E_DrawType.Tank:Console.ForegroundColor = ConsoleColor.Cyan;break;case E_DrawType.Left_Ladder:case E_DrawType.Right_Ladder:Console.ForegroundColor = ConsoleColor.Magenta;break;case E_DrawType.Left_Long_ladder:case E_DrawType.Right_Long_ladder:Console.ForegroundColor = ConsoleColor.Yellow;break;}Console.Write("■");}//擦除public void ClearDraw(){if (pos.y < 0)return;Console.SetCursorPosition(pos.x, pos.y);Console.Write("  ");}/// <summary>/// 附著墻壁方法/// </summary>/// <param name="type"></param>public void ChangeType(E_DrawType type){this.type = type;}}
}
IDraw.cs
namespace CSharp俄羅斯方塊
{internal interface IDraw{void Draw();}
}
Position.cs
namespace CSharp俄羅斯方塊
{internal struct Position{public int x;public int y;public Position(int x, int y){this.x = x;this.y = y;}public static bool operator ==(Position left, Position right){if (left.x == right.x && left.y == right.y) { return true; }return false;}public static bool operator !=(Position left, Position right){if (left.x == right.x && left.y == right.y) { return false; }return true;}public static Position operator +(Position left, Position right){return new Position(left.x + right.x, left.y + right.y);}}}

Test3_地圖相關

Map.cs
namespace CSharp俄羅斯方塊
{internal class Map : IDraw{//固定墻壁private List<DrawObject> walls = new List<DrawObject>();//動態墻壁public List<DrawObject> dynamicWalls = new List<DrawObject>();private GameScene nowGameScene;//為了外部能快速得到地圖邊界//動態墻壁的寬容量,小方塊橫向個數public int w;public int h;//記錄每一行有多少個小方塊的容器,索引就是行號private int[] recordInfo;public Map(GameScene scene){nowGameScene = scene;h = Game.h - 6;recordInfo = new int[h];w = 0;//繪制橫向墻壁for (int i = 0; i < Game.w; i += 2){walls.Add(new DrawObject(E_DrawType.Wall, i, h));w++;}w -= 2;for (int i = 0; i < h; i++){walls.Add(new DrawObject(E_DrawType.Wall, 0, i));walls.Add(new DrawObject(E_DrawType.Wall, Game.w - 2, i));}}public void Draw(){for (int i = 0; i < walls.Count; i++){walls[i].Draw();}for (int i = 0; i < dynamicWalls.Count; i++){dynamicWalls[i].Draw();}}public void ClearDraw(){for (int i = 0; i < dynamicWalls.Count; i++){dynamicWalls[i].ClearDraw();}}public void AddWalls(List<DrawObject> walls){for (int i = 0; i < walls.Count; i++){//掉下來的方塊變成墻壁類型walls[i].ChangeType(E_DrawType.Wall);dynamicWalls.Add(walls[i]);if (walls[i].pos.y<=0){nowGameScene.StopThread();Game.ChangeScene(E_SceneType.End);return;}//進行添加動態墻壁行的計數recordInfo[h - walls[i].pos.y - 1]++;}ClearDraw();CheckClear();Draw();}/// <summary>/// 檢測是否跨層/// </summary>public void CheckClear(){//遍歷時安全移除,添加待移除數組List<DrawObject> delList = new List<DrawObject>();//要選擇記錄行中有多少個方塊的容器//數組判斷這一行是否滿//遍歷數組,檢測數組里面存的數是不是w-2for (int i = 0; i < recordInfo.Length; i++){//如果這行滿了需要移除if (recordInfo[i] == w){//1、這一行的所有方塊移除for (int j = 0; j < dynamicWalls.Count; j++){//通過動態方塊的y計算它在哪一行if (i == h - dynamicWalls[j].pos.y - 1){//待移除添加到記錄列表delList.Add(dynamicWalls[j]);}//2、要這一行之上的所有方塊下移else if (h - dynamicWalls[j].pos.y - 1 > i){dynamicWalls[j].pos.y++;}}//移除待刪小方塊for (int j = 0;j < delList.Count; j++){dynamicWalls.Remove(delList[j]);}//3、記錄小方塊數量的數組從上到下遷移for (int j = i; j < recordInfo.Length-1; j++){recordInfo[j] = recordInfo[j + 1];}//置空最頂層recordInfo[recordInfo.Length - 1] = 0;//利用遞歸,一層一層檢測CheckClear();break;}}}}
}

Test4_坐標信息類

在這里插入圖片描述
在這里插入圖片描述

BlockInfo.cs
namespace CSharp俄羅斯方塊
{internal class BlockInfo{private List<Position[]> list;public BlockInfo(E_DrawType type){list = new List<Position[]>();switch (type){case E_DrawType.Cube:list.Add(new Position[3] { new Position(2, 0), new Position(0, 1), new Position(2, 1) });break;case E_DrawType.Line:list.Add([new Position(0, -1), new Position(0, 1), new Position(0, 2)]);list.Add([new Position(-4, 0), new Position(-2, 0), new Position(2, 0)]);list.Add([new Position(0, -2), new Position(0, -1), new Position(0, 1)]);list.Add([new Position(-2, 0), new Position(2, 0), new Position(4, 0)]);break;case E_DrawType.Tank:list.Add([new Position(-2, 0), new Position(2, 0), new Position(0, 1)]);list.Add([new Position(0, -1), new Position(-2, 0), new Position(0, 1)]);list.Add([new Position(0, -1), new Position(-2, 0), new Position(2, 0)]);list.Add([new Position(0,-1), new Position(2, 0), new Position(0, 1)]);break;case E_DrawType.Left_Ladder:list.Add([new Position(0, -1), new Position(2, 0), new Position(2, 1)]);list.Add([new Position(2, 0), new Position(-2, 1), new Position(0, 1)]);list.Add([new Position(-2, -1), new Position(-2, 0), new Position(0, 1)]);list.Add([new Position(0, -1), new Position(2, -1), new Position(-2, 0)]);break;case E_DrawType.Right_Ladder:list.Add([new Position(0, -1), new Position(-2, 0), new Position(-2, 1)]);list.Add([new Position(-2, -1), new Position(0, -1), new Position(2, 0)]);list.Add([new Position(2, -1), new Position(2, 0), new Position(0, 1)]);list.Add([new Position(-2, 0), new Position(0, 1), new Position(2, 1)]);break;case E_DrawType.Left_Long_ladder:list.Add([new Position(-2, -1), new Position(0, -1), new Position(0, 1)]);list.Add([new Position(2, 1), new Position(-2, 0), new Position(2, 0)]);list.Add([new Position(0, -1), new Position(0, 1), new Position(2, 1)]);list.Add([new Position(-2, 0), new Position(2, 0), new Position(-2, 1)]);break;case E_DrawType.Right_Long_ladder:list.Add([new Position(0, -1), new Position(2, -1), new Position(0, 1)]);list.Add([new Position(-2, 0), new Position(2, 1), new Position(2, 0)]);list.Add([new Position(0, -1), new Position(0, 1), new Position(-2, 1)]);list.Add([new Position(-2, 0), new Position(2, 0), new Position(-2, -1)]);break;default:break;}}public Position[] this[int index]{get{if (index < 0)return list[0];else if (index >= list.Count)return list[list.Count - 1];elsereturn list[index];}}public int Count { get => list.Count; }}
}

Test5_板磚工人類

BlockWorker.cs
namespace CSharp俄羅斯方塊
{enum E_Change_Type{Left,Right,}internal class BlockWorker : IDraw{//方塊們private List<DrawObject> blocks;//用Dictionary方便查找private Dictionary<E_DrawType, BlockInfo> blockInfoDic;//隨機創建的方塊具體形態信息private BlockInfo nowBlockInfo;//當前形態的索引private int nowInfoIndex;public BlockWorker(){blockInfoDic = new Dictionary<E_DrawType, BlockInfo>(){{ E_DrawType.Cube,new BlockInfo(E_DrawType.Cube)},{ E_DrawType.Line,new BlockInfo(E_DrawType.Line)},{ E_DrawType.Tank,new BlockInfo(E_DrawType.Tank)},{ E_DrawType.Left_Ladder,new BlockInfo(E_DrawType.Left_Ladder)},{ E_DrawType.Right_Ladder,new BlockInfo(E_DrawType.Right_Ladder)},{ E_DrawType.Left_Long_ladder,new BlockInfo(E_DrawType.Left_Long_ladder)},{ E_DrawType.Right_Long_ladder,new BlockInfo(E_DrawType.Right_Long_ladder)},};RandomCreatBlock();}public void Draw(){for (int i = 0; i < blocks.Count; i++){blocks[i].Draw();}}/// <summary>/// 隨機創建方塊/// </summary>public void RandomCreatBlock(){Random r = new Random();E_DrawType type = (E_DrawType)r.Next(1, 8);blocks = new List<DrawObject>(){new DrawObject(type),new DrawObject(type),new DrawObject(type),new DrawObject(type),};//定義0,0相對坐標blocks[0].pos = new Position(24, -5);nowBlockInfo = blockInfoDic[type];//隨機當前形態nowInfoIndex = r.Next(0, nowBlockInfo.Count);//取出原點坐標信息Position[] pos = nowBlockInfo[nowInfoIndex];for (int i = 0; i < pos.Length; i++){//通過原點坐標信息繪制四個方塊blocks[i + 1].pos = pos[i] + blocks[0].pos;}}//擦除方法public void ClearDraw(){for (int i = 0; i < blocks.Count; i++){blocks[i].ClearDraw();}}/// <summary>/// 方塊變形/// </summary>/// <param name="type">左,右</param>public void Change(E_Change_Type type){//擦除之前的方塊ClearDraw();switch (type){case E_Change_Type.Left:nowInfoIndex--;if (nowInfoIndex < 0)nowInfoIndex = nowBlockInfo.Count - 1;break;case E_Change_Type.Right:nowInfoIndex++;if (nowInfoIndex >= nowBlockInfo.Count)nowInfoIndex = 0;break;}//得到索引,取出來Position[] pos = nowBlockInfo[nowInfoIndex];for (int i = 0; i < pos.Length; i++){blocks[i + 1].pos = pos[i] + blocks[0].pos;}//擦除之后繪制Draw();}/// <summary>/// 判斷能否變形/// </summary>/// <param name="type">地圖方向</param>/// <param name="map">地圖墻壁</param>/// <returns></returns>public bool CanChange(E_Change_Type type, Map map){//臨時變量用來模擬int nowIndex = nowInfoIndex;switch (type){case E_Change_Type.Left:nowIndex--;if (nowIndex < 0)nowIndex = nowBlockInfo.Count - 1;break;case E_Change_Type.Right:nowIndex++;if (nowIndex >= nowBlockInfo.Count)nowIndex = 0;break;}//臨時索引信息判斷是否和墻壁重合Position[] nowPos = nowBlockInfo[nowIndex];//判斷是否超出地圖邊界Position tempPos;for (int i = 0; i < nowPos.Length; i++){tempPos = blocks[0].pos + nowPos[i];if (tempPos.x < 2 || tempPos.x >= Game.w - 2 || tempPos.y >= map.h){return false;}}//判斷是否和其他方塊重合for (int i = 0; i < nowPos.Length; i++){tempPos = blocks[0].pos + nowPos[i];for (int j = 0; j < map.dynamicWalls.Count; j++){if (tempPos == map.dynamicWalls[j].pos){return false;}}}return true;}/// <summary>/// 方塊左右移動/// </summary>/// <param name="type">左,右</param>public void MoveR_L(E_Change_Type type){//移動之前擦除ClearDraw();//根據傳入的類型,決定左右移動,得到偏移位置Position movePos = new Position(type == E_Change_Type.Left ? -2 : 2, 0);for (int i = 0; i < blocks.Count; i++){blocks[i].pos += movePos;}//移動之后繪制Draw();}/// <summary>/// 判斷能否移動/// </summary>/// <param name="type">左,右移動</param>/// <returns></returns>public bool CanMoveR_L(E_Change_Type type, Map map){Position movePos = new Position(type == E_Change_Type.Left ? -2 : 2, 0);//左右邊界重合,預判斷posPosition pos;for (int i = 0; i < blocks.Count; i++){pos = blocks[i].pos + movePos;if (pos.x < 2 || pos.x >= Game.w - 2)return false;}//動態方塊重合for (int i = 0; i < blocks.Count; i++){pos = blocks[i].pos + movePos;for (int j = 0; j < map.dynamicWalls.Count; j++){if (pos == map.dynamicWalls[j].pos)return false;}}return true;}//方塊自動下落public void AutoMove(){ClearDraw();Position downMove = new Position(0, 1);for (int i = 0; i < blocks.Count; i++){blocks[i].pos += downMove;}Draw();}public bool CanDown(Map map){Position downPos = new Position(0, 1);//預下落位置Position pos;//邊界for (int i = 0; i < blocks.Count; i++){pos = blocks[i].pos + downPos;if (pos.y >= map.h){//碰到地圖,此時變成地圖的一部分map.AddWalls(blocks);//創建新的隨機方塊RandomCreatBlock();return false;}}//動態方塊for (int i = 0; i < blocks.Count; i++){pos = blocks[i].pos + downPos;for (int j = 0; j < map.dynamicWalls.Count; j++){if (pos == map.dynamicWalls[j].pos){//碰到方塊,此時變成地圖的一部分map.AddWalls(blocks);RandomCreatBlock();return false;}}}return true;}}
}

Test6_輸入模塊

InputThread.cs
namespace CSharp俄羅斯方塊
{internal class InputThread{//線程成員變量Thread inputThread;//輸入檢測事件public event Action inputEvent;private static InputThread instance = new InputThread();public static InputThread Instance{get{return instance;}}private InputThread(){ inputThread = new Thread(InputCheck);inputThread.IsBackground = true;inputThread.Start();}private void InputCheck(){while (true){inputEvent?.Invoke();}}}
}

Program.cs

using CSharp俄羅斯方塊;Game game = new Game();
game.start();

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17606.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫中字符串相加需要換行

數據庫中字符串相加需要換行&#xff0c;這個需求在現在項目中很常見&#xff0c;特別是備注內容的追加&#xff0c;因此把Oracle/SQLServer/MySQL這幾種數據庫的使用進行簡單的總結一下 1、本文內容 Oracle中實現字符串相加需要換行SQLServer中實現字符串相加需要換行MySQL中…

VMware的網絡不通?這一篇給你一定的參考.虛擬機網絡配置

如果你的虛擬機莫名其妙ping不通網絡了&#xff0c;可以參考一下我的配置。這不是一篇教程&#xff0c;你可以核對一下自己的bug。 虛擬網絡配置器中&#xff1a; 使用管理員權限更改設置&#xff0c;會跳出來vmnet0 橋接、僅主機和NAT都必須要有 vment0&#xff1a; vmnet1:…

【樂吾樂3D可視化組態編輯器】相機與視角

系統默認的相機為環繞旋轉相機&#xff0c;它可以環繞一個中心點做上下左右的旋轉&#xff0c;來從不同角度觀察場景。當然&#xff0c;您也可以把一些特定角度的信息保存下來&#xff0c;在系統中我們把這個信息稱作視角。通過交互中的切換視角動作&#xff0c;您就可以實現把…

英語新概念2-回譯法-lesson1 和 lesson17

Lesson 1 私人談話A private conversation 翻譯&#xff1a; Last Sunday I went to the theater. My seat was good and the play was interesting, but I can not enjoy it. A young man and a young woman sat behind me and they were talking loudly. I felt angry becau…

2024年電子、電氣與信息科學國際會議(EEIS 2024)

2024年電子、電氣與信息科學國際會議&#xff08;EEIS 2024&#xff09; 2024 International Conference on Electronics, Electrical and Information Science 【重要信息】 大會地點&#xff1a;昆明 大會官網&#xff1a;http://www.iceeis.com 投稿郵箱&#xff1a;iceeis…

振弦式土壓力計:功能優勢與專業應用

振弦式土壓力計&#xff0c;作為一種廣泛應用于土木工程領域的測量儀器&#xff0c;具有多種功能優勢&#xff0c;使得它成為了解被測結構物內部土壓力變化的有效工具。下面我將詳細介紹振弦式土壓力計的功能優勢及其在土木工程中的應用。 點擊輸入圖片描述&#xff08;最多30字…

【運維項目經歷|021】Spark大數據分析平臺建設項目

目錄 項目名稱 項目背景 項目目標 項目成果 我的角色與職責 我主要完成的工作內容 本次項目涉及的技術 本次項目遇到的問題與解決方法 本次項目中可能被面試官問到的問題 問題1&#xff1a;項目周期多久&#xff1f; 問題2&#xff1a;服務器部署架構方式及數量和配置…

FTP協議——Pure-Ftpd安裝(Linux)

1、簡介 Pure-FTPd是一個高效、免費且開源的FTP服務器軟件&#xff0c;廣泛應用于各種Unix/Linux系統。它以其易用性、高安全性和功能豐富而聞名&#xff0c;適用于個人和企業的文件傳輸需求。 2、步驟 環境&#xff1a;Ubuntu 22.04.4 下載地址&#xff1a;Index of /pub/p…

3D Web輕量化平臺HOOPS Web Platform在數字工廠中的應用實例

今天我們來聊聊HOOPS工具對大型數據的處理和可視化管理。這里是一個數字工廠的儀表盤展示&#xff0c;您可以在儀表盤上看到包括工廠的能源消耗、計劃產量等數據信息&#xff0c;以及各種制造機器的生產量。 HOOPS中文網http://techsoft3d.evget.com/ 我們的HOOPS工具&#xf…

鏈表帶環問題的思考

判斷鏈表是否帶環 思路&#xff1a;快慢指針 慢指針走一步&#xff0c;快指針走兩步&#xff0c;當快指針追上慢指針時&#xff0c;代表該鏈表帶環。代碼如下: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ …

百世慧入選第七屆數字中國建設峰會“2024企業數字化轉型典型應用案例”

5月24日-25日&#xff0c;第七屆數字中國建設峰會在福州舉行。本屆峰會是國家數據工作體系優化調整后首次舉辦的數字中國建設峰會&#xff0c;主題為“釋放數據要素價值&#xff0c;發展新質生產力”。 為了全方位展示各領域數字化最新成果&#xff0c;共創數字中國美好未來&a…

大胖子走迷宮,bfs

1.大胖子走迷宮 - 藍橋云課 (lanqiao.cn) from collections import dequen,kmap(int,input().split()) mp[0] for i in range(n):mp.append(0input()) vis[[0 for i in range(n1)] for i in range(n1)] qdeque() q.append((3,3,0)) vis[3][3]1 def f(t):if t<k:return 2eli…

【啟程Golang之旅】掌握Go語言數組基礎概念與實際應用

歡迎來到Golang的世界&#xff01;在當今快節奏的軟件開發領域&#xff0c;選擇一種高效、簡潔的編程語言至關重要。而在這方面&#xff0c;Golang&#xff08;又稱Go&#xff09;無疑是一個備受矚目的選擇。在本文中&#xff0c;帶領您探索Golang的世界&#xff0c;一步步地了…

java入門 springboot上傳文件

一、 pom.xml knife4j和springboot之間存在版本不兼容的問題&#xff0c;需要選對合適的版本 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apach…

雜談|RestFul和http的區別

前言 今天和我一組的小伙伴&#xff0c;在對接一個接口時&#xff0c;客戶將DELETED請求設置了body參數&#xff0c;導致一個功能反復搞了半天&#xff0c;今天就來說下這兩者的區別 1.HTTP概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09;是一種用于從WWW&…

操作系統5_虛擬存儲器

操作系統5_虛擬存儲器 文章目錄 操作系統5_虛擬存儲器1. 虛擬存儲器1.1 虛擬存儲器的引入1.2 虛擬存儲器的概念1.3 虛擬存儲器的特征1.4 虛擬存儲器的實現方法2. 請求分頁存儲管理2.1 請求分頁中的硬件支持2.2 內存分配策略和分配算法2.3 調頁策略2.4 頁面置換算法2.4.1 最佳置…

docker部署相關命令

docker部署相關操作 查看docker基本信息 docker info查看docker中所有鏡像 docker images查看docker中所有容器 docker ps # 已啟動的容器 docker ps -a # 所有容器 docker ps -a -s # 查看所有容器和大小從鏡像創建容器并運行 docker run -it 鏡像名 # 簡單命令 dock…

c++——模板初始識

1.函數模板 我們經常用到Swap函數交換兩個值。由于需要交換的數據的類型不同&#xff0c;我們就需要寫不同參數類型的同名函數&#xff0c;也就是函數重載&#xff1a; 然而這三個函數的邏輯是一樣的&#xff0c;寫這么多有些多此一舉&#xff0c;通過函數模版可以寫一個通用…

LabVIEW機器視覺在自動化生產線中的應用是什么?

LabVIEW機器視覺技術在自動化生產線中有廣泛的應用&#xff0c;主要包括以下幾個方面&#xff1a; 質量控制與檢測&#xff1a; 缺陷檢測&#xff1a;使用機器視覺系統實時檢測產品表面的缺陷&#xff0c;如劃痕、裂紋、污漬等&#xff0c;確保產品質量。尺寸測量&#xff1a;通…

【量算分析工具-水平面積】GeoServer改造Springboot番外系列五

【量算分析工具-概述】GeoServer改造Springboot番外系列三-CSDN博客 【量算分析工具-水平距離】GeoServer改造Springboot番外系列四-CSDN博客 【量算分析工具-水平面積】GeoServer改造Springboot番外系列五-CSDN博客 【量算分析工具-方位角】GeoServer改造Springboot番外系列…