【unity之IMGUI实践】单例模式管理数据存储【二】

news/2024/5/15 7:54:19

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unityUI专题篇
在这里插入图片描述


单例模式管理面板对象


文章目录

    • 单例模式管理面板对象
    • 🎶前言
    • 🎶(==A==)常用关键API
    • 🎶(==B==)需求分析
    • 🎶(==C==)逻辑封装——游戏音乐数据存储
      • 😶‍🌫️:步骤实现
        • 实现音乐数据的同步更新——最终代码
    • 🎶(==D==)逻辑封装——游戏排行榜数据存储
      • 😶‍🌫️:**步骤实现**
        • 总UML图
    • 🎶(==E==)逻辑封装——音乐数据管理类
      • 😶‍🌫️步骤:
      • 结论:
    • 👌结论:


🎶前言


🅰️


🎶(A常用关键API


在这里插入图片描述
在这里插入图片描述


🎶(B需求分析


在这里插入图片描述


🎶(C逻辑封装——游戏音乐数据存储


在这里插入图片描述
在这里插入图片描述


😶‍🌫️:步骤实现

1.首先将音乐数据封装在类中,不采用单例模式
2. 而后封装一个游戏数据类为单例模式:功能:利用Playerfabs进行数据存储音乐数据
3.读取存盘中的数据更新游戏数据


1.首先将音乐数据封装在类中,不采用单例模式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   音乐相关数据存储类      
//___________功能:    记录音乐相关的数据 
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class MusicData 
{//记录音乐,音效的开关状态和拖动条public bool  musicSwitch;public bool  soundSwitch;public float musicRoll;public float soundRoll;public bool isFirst;
}

2. 而后封装一个游戏数据类为单例模式:功能:利用Playerfabs进行数据存储音乐数据

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据类   
//___________功能:    记录游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------public class GameData         
{static private GameData dataContorl = new GameData ();static public  GameData DataContorl => dataContorl ;public MusicData musicData ;private GameData(){musicData = new MusicData();musicData = PlayerfabsClass.Chats.GetDataMess(typeof(MusicData), "Music") as MusicData ;if ( !musicData.isFirst ) //如果是第一次进入游戏{musicData.musicSwitch = true;musicData.soundSwitch = true;musicData.musicRoll = 0.5f;musicData.soundRoll = 0.5f;PlayerfabsClass.Chats.SaveDataMess(musicData, "Music");   //设置为自定义的默认值后进行存储             }}}

3.读取存盘中的数据更新游戏数据

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  设置面板功能
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class SetPlane : BeginFather<SetPlane>
{//将功能控件拖拽对应的成员变量中public Button closeButt;public Slider sliderMusic;public Slider sliderSound;public ToggleM toggleMusic;public ToggleM toggleSound;private float toggle1;private float toggle2;private void Start(){//按钮中事件的添加closeButt.triggerEvent += () => {this.gameObject.SetActive(false);BeginPlane.SingleInstance.Show();};//滑条中事件的添加sliderMusic.triggerEvent += (value) =>{};sliderSound.triggerEvent += (value) =>{};//多选框中事件的添加toggleMusic.triggerEvent += (value) =>{};toggleSound .triggerEvent += (value) =>{};this.Hidden();}private void MusicDataUpdate(){MusicData data = GameData.DataContorl.musicData;sliderMusic.NowValue = data.musicRoll;sliderSound.NowValue = data.soundRoll;toggleMusic.IsSwitch = data.musicSwitch;toggleSound.IsSwitch = data.soundSwitch;}public override void Show(){base.Show();  //保留父类的封装逻辑MusicDataUpdate();}
}

实现音乐数据的同步更新——最终代码


目的: 将游戏游戏数据保存至硬盘,下次开启游戏实现数据同步

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据类   
//___________功能:    记录游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------public class GameData         
{static private GameData dataContorl = new GameData ();static public  GameData DataContorl => dataContorl ;public MusicData musicData ;private GameData(){musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData ;if ( !musicData.isFirst ) //如果是第一次进入游戏(表示注册表中第一次存该类型数据时){musicData.isFirst = true;musicData.musicSwitch = true;musicData.soundSwitch = true;musicData.musicRoll = 1f;musicData.soundRoll = 1f;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");                }}//音乐开关数据的更新存储public void ChangeMusicS( bool value){musicData.musicSwitch = value;PlayerPrefsDataMgr.Instance.SaveData(musicData,"Music");}//音效开关数据的更新存储public void ChangeSoundS(bool value){musicData.soundSwitch  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音乐滑条数据的更新存储public void ChangeMusicR(float value){musicData.musicRoll  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音效滑条数据的更新存储public void ChangeSoundR(float value){musicData.soundRoll  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  设置面板功能
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class SetPlane : BeginFather<SetPlane>
{//将功能控件拖拽对应的成员变量中public Button closeButt;public Slider sliderMusic;public Slider sliderSound;public ToggleM toggleMusic;public ToggleM toggleSound;private float toggle1;private float toggle2;private MusicData musicData;private void Start(){//按钮中事件的添加closeButt.triggerEvent += () => {Hidden();BeginPlane.SingleInstance.Show();};//多选框中事件的添加toggleMusic.triggerEvent += (value) => GameData.DataContorl.ChangeMusicS(value);toggleSound.triggerEvent += (value) => GameData.DataContorl.ChangeSoundS(value);//滑条中事件的添加sliderMusic.triggerEvent += (value) => GameData.DataContorl.ChangeMusicR(value);sliderSound.triggerEvent += (value) => GameData.DataContorl.ChangeSoundR(value);Hidden();}private void MusicDataUpdate() //将已存盘的数据读取后更新{MusicData data = GameData.DataContorl.musicData;toggleMusic.IsSwitch = data.musicSwitch;toggleSound.IsSwitch = data.soundSwitch;sliderMusic.NowValue = data.musicRoll;sliderSound.NowValue = data.soundRoll;}public override void Show(){base.Show();        //保留父类的封装逻辑MusicDataUpdate();  //在展示时更新}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 开始面板类
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class BeginPlane : BeginFather<BeginPlane>
{// 获取开始面板中的各个按钮控件public Button but1;public Button but2;public Button but3;public Button but4;private void Start(){but1.triggerEvent += () => { SceneManager.LoadScene("Start"); };                 //点击“开始游戏”but2.triggerEvent += () => { Hidden(); SetPlane.SingleInstance.Show();   };      //点击“游戏设置”but3.triggerEvent += () => { Application.Quit(); };                              //点击“退出游戏”but4.triggerEvent += () => { Hidden();  };                                       //点击“排行榜”}}

🎶(D逻辑封装——游戏排行榜数据存储


界面设计

在这里插入图片描述

  • 效果演示:在这里插入图片描述

😶‍🌫️:步骤实现

  • 1.封装排行榜数据类(无参构造做new ,有参构造做一键赋值)

  • 2.以数据管理类为载体进行更新API封装——只存储排行榜中的数据到盘(注册表)中

  • 3.封装排行榜面板类进行实时显示


在这里插入图片描述-----在这里插入图片描述

封装排行榜数据类(无参构造做new ,有参构造做一键赋值)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:   
//___________功能: 排行榜数据的载体    
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class RankData
{ public string name;public int score;public int time;public RankData() //用来new{}public RankData(string name, int score, int time ) //用来一键赋值{this.name = name ;this.score = score ;this.time = time;}
}

在这里插入图片描述 ----------------------在这里插入图片描述
以数据管理类为载体进行更新API封装

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据管理类   
//___________功能:    记录和更新游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------public class GameData         
{static private GameData dataContorl = new GameData ();static public  GameData DataContorl => dataContorl ;public MusicData musicData ;public List<RankData> rankTopData;//固定承载前六名的数据信息private GameData(){//初始化读取音乐数据musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData ;//初始化读取排行榜数据rankTopData = PlayerPrefsDataMgr.Instance.LoadData(typeof(List<RankData>), "Rank") as List<RankData>;if ( !musicData.isFirst ) //如果是第一次进入游戏(表示注册表中第一次存该类型数据时){musicData.isFirst = true;musicData.musicSwitch = true;musicData.soundSwitch = true;musicData.musicRoll = 1f;musicData.soundRoll = 1f;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");                }}       //------------------------排行榜数据的更新封装-------------------------------//在排行榜中添加数据public void SaveRankData(string name, int score, int time){rankTopData.Add(new RankData(name, score, time));Debug.Log(rankTopData);rankTopData.Sort((a, b) => { return a.score > b.score ? -1 : 1; }); //添加排序规则//但list大于6时for (int i = rankTopData.Count - 1 ; i > 5; i--){rankTopData.RemoveAt(i); //删除}PlayerPrefsDataMgr.Instance.SaveData(rankTopData, "Rank" );}//------------------------音乐数据的更新封装------------------------------//音乐开关数据的更新存储public void ChangeMusicS( bool value){musicData.musicSwitch = value;PlayerPrefsDataMgr.Instance.SaveData(musicData,"Music");}//音效开关数据的更新存储public void ChangeSoundS(bool value){musicData.soundSwitch  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音乐滑条数据的更新存储public void ChangeMusicR(float value){musicData.musicRoll  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音效滑条数据的更新存储public void ChangeSoundR(float value){musicData.soundRoll  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}
}

在这里插入图片描述-----------在这里插入图片描述
3.封装排行榜面板类进行实时显示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------------
//—————————————————————————————————————
//___________脚本名:  排行榜面板
//___________功能:   掌控排行榜面板相关控件
//___________创建者: 秩沅_______________
//_____________________________________
//-------------------------------------public class RankPlane : BeginFather<RankPlane >
{public Button closeButton;//采用列表的方式进行排行数据的暂时存储private List<Label> RK_Name = new List<Label>();private List<Label> RK_Score = new List<Label>();private List<Label> RK_Time = new List<Label>();private void Start(){//通过API获取排行榜中的标签for (int i = 1; i <= 6; i++){        RK_Name.Add(this.transform.Find("RKName/player" + i ).GetComponent<Label>());RK_Score.Add(this.transform.Find("RKScore/Score" + i ).GetComponent<Label>());RK_Time.Add(this.transform.Find("RKTime/time" + i ).GetComponent<Label>());       } //为按钮中的事件添加方法closeButton .triggerEvent += ()=>{Hidden(); BeginPlane.SingleInstance.Show();};Hidden();    }public override void Show(){base.Show();ShowRankData();}public void ShowRankData()  //读盘排行榜数据并显示{GameData.DataContorl .SaveRankData("nibb", 100, 342);List<RankData> data = GameData.DataContorl.rankTopData;for (int i = 0; i < data.Count; i++){string showTime = "";int hour, min, second;print(data[i].name);RK_Name[i].ContorlContent.text = data[i].name;RK_Score[i].ContorlContent.text = data[i].score.ToString();RK_Time[i].ContorlContent.text = "";//时间格式转化hour = data[i].time / 3600;min = data[i].time / 60 % 60;second = data[i].time % 60;showTime = $"{hour}小时{min}分钟{second}秒";RK_Time[i].ContorlContent.text = showTime;}}
}

总UML图

在这里插入图片描述


在这里插入图片描述


🎶(E逻辑封装——音乐数据管理类


😶‍🌫️步骤:

  • 1.封装音乐数据管理类——单例
  • 2.在游戏数据管理类中,更新音乐数据更新方法

封装音乐数据类

在这里插入图片描述在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  更新音乐
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class MusicContol : MonoBehaviour
{static private MusicContol singleMusicContol;static public MusicContol SingleMusicContol => singleMusicContol;private  AudioSource beginAudio;private MusicData nowMusicData;void Awake(){singleMusicContol = this;//达到一运行游戏就有音乐的效果beginAudio = GetComponent<AudioSource>();      //从盘中读取nowMusicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData;beginAudio.enabled = nowMusicData.musicSwitch;beginAudio.volume = nowMusicData.musicRoll;}//----将其变成外界可调用的方法------ public void ChangeMusicSwitch(bool value) //改变音乐开关{beginAudio.enabled = value;}public void ChangeMusicRoll(float  value) //改变音乐大小{beginAudio.volume  = value;}public void ChangeSoundSwitch(bool value) //改变音效开关{}public void ChangeSoundRoll(float  value) //改变音效大小{}
}

游戏数据管理类,也需要更新——在方法中更新逻辑

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据管理类   
//___________功能:    记录和更新游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------public class GameData         
{static private GameData dataContorl = new GameData ();static public  GameData DataContorl => dataContorl ;public MusicData musicData ;public List<RankData> rankTopData;//固定承载前六名的数据信息private GameData(){//初始化读取音乐数据musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData ;//初始化读取排行榜数据rankTopData = PlayerPrefsDataMgr.Instance.LoadData(typeof(List<RankData>), "Rank") as List<RankData>;if ( !musicData.isFirst ) //如果是第一次进入游戏(表示注册表中第一次存该类型数据时){musicData.isFirst = true;musicData.musicSwitch = true;musicData.soundSwitch = true;musicData.musicRoll = 1f;musicData.soundRoll = 1f;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");                }}       //【------------------------排行榜数据的更新封装----------------------------------】//在排行榜中添加数据public void SaveRankData(string name, int score, int time){rankTopData.Add(new RankData(name, score, time));Debug.Log(rankTopData);rankTopData.Sort((a, b) => { return a.score > b.score ? -1 : 1; }); //添加排序规则//但list大于6时for (int i = rankTopData.Count - 1 ; i > 5; i--){rankTopData.RemoveAt(i); //删除}PlayerPrefsDataMgr.Instance.SaveData(rankTopData, "Rank" );}//【------------------------音乐数据的更新(存盘)封装----------------------------------】//音乐开关数据的更新存储public void ChangeMusicS( bool value){musicData.musicSwitch = value;MusicContol.SingleMusicContol.ChangeMusicSwitch(value);  //实时改变音乐大小_下同PlayerPrefsDataMgr.Instance.SaveData(musicData,"Music"); //实时进行音乐数据存盘_下同}//音效开关数据的更新存储public void ChangeSoundS(bool value){musicData.soundSwitch  = value;MusicContol.SingleMusicContol.ChangeSoundSwitch(value);PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音乐滑条数据的更新存储public void ChangeMusicR(float value){musicData.musicRoll  = value;MusicContol.SingleMusicContol.ChangeMusicRoll(value);PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音效滑条数据的更新存储public void ChangeSoundR(float value){musicData.soundRoll  = value;MusicContol.SingleMusicContol.ChangeSoundRoll(value);PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}}

过程中的错误——优化思维

在这里插入图片描述
进行优化__________==>

在这里插入图片描述

结论:


👌结论:

  • 1.进行模块化处理,数据管理就是数据管理,面板显示就是面板显示,各司其职,员工不得乱工作
  • 2.抽象行为,分配行为,你就是掌控者
  • 3.如果某个行为/操作,不仅限于一个对象,要将其封装成外界可以调用的API
    (例如修改主界面音频时,自己直接获取,却没想到将其封装成外界调用的方法)

相关文章


⭐【2023unity游戏制作-mango的冒险】-6.关卡设计

⭐【2023unity游戏制作-mango的冒险】-5.攻击系统的简单实现

⭐【2023unity游戏制作-mango的冒险】-4.场景二的镜头和法球特效跟随

⭐【2023unity游戏制作-mango的冒险】-3.基础动作和动画API实现

⭐【2023unity游戏制作-mango的冒险】-2.始画面API制作

⭐【2023unity游戏制作-mango的冒险】-1.场景搭建

⭐“狂飙”游戏制作—游戏分类图鉴(网易游学)

⭐本站最全-unity常用API大全(万字详解),不信你不收藏



你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


http://www.mrgr.cn/p/04355326

相关文章

自动化运维工具—Ansible概述

Ansible是什么&#xff1f; Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部署、…

无涯教程-jQuery - Dropable移动函数

Drop-able 功能可与JqueryUI中的交互一起使用。此功能可在任何DOM元素上启用可放置功能。 Drop able - 语法 $( "#droppable" ).droppable(); Drop able - 示例 以下是一个简单的示例&#xff0c;显示了drop-able的用法- <html><head><title>…

爬虫小白-如何调试列表页链接与详情链接不一样并三种方式js逆向解决AES-ECB

目录 一、网站分析二、定位监听三、熟悉AES-ECB四、调试分析五、node运行js六、Python执行js 一、网站分析 三年前的案例&#xff0c;我的原始文章网站 &#xff0c;如图我们直接点击标题进入到详情页&#xff0c;链接会发生跳转&#xff0c;且与我们在详情看到的链接&#xf…

左神算法之中级提升班(8)

目录 【案例1】 【题目描述】 【思路解析】 【代码实现】 【案例2】 【题目描述】 【思路解析】 【代码实现】 【案例3】 【题目描述】 【思路解析】 【案例4】 【题目描述】 【思路解析】 【代码实现】 【案例5】 【题目描述】 【子序列概念】 【思路解析1 经典…

[NLP]LLaMA与LLamMA2解读

摘要 Meta最近提出了LLaMA(开放和高效的基础语言模型)模型参数包括从7B到65B等多个版本。最值得注意的是&#xff0c;LLaMA-13B的性能优于GPT-3&#xff0c;而体积却小了10倍以上&#xff0c;LLaMA-65B与Chinchilla-70B和PaLM-540B具有竞争性。 一、引言 一般而言&#xff0…

020 - STM32学习笔记 - Fatfs文件系统(二) - 移植与测试

020 - STM32学习笔记 - Fatfs文件系统&#xff08;二&#xff09; - 移植与测试 上节学习了FatFs文件系统的相关知识&#xff0c;这节内容继续学习在STM32上如何移植FatFs文件系统&#xff0c;并且实现文件的创建、读、写与删除等功能。各位看官觉得还行的话点点赞&#xff0c…

Python时间处理:探索time模块

日常工作中&#xff0c;经常涉及到一些时间的转换操作&#xff0c;比如某些业务针对时间的操作要转成不同的时区&#xff0c;有的要转换格式入库&#xff0c;有的需要跟时间对比等等&#xff0c;接下来我们一起来看一下python里面是怎么去处理时间的。 time模块简单介绍 Python…

几百本常用计算机开发语言电子书链接

GitHub - XiangLinPro/IT_book: 本项目收藏这些年来看过或者听过的一些不错的常用的上千本书籍&#xff0c;没准你想找的书就在这里呢&#xff0c;包含了互联网行业大多数书籍和面试经验题目等等。有人工智能系列&#xff08;常用深度学习框架TensorFlow、pytorch、keras。NLP、…

[STL]详解list模拟实现

[STL]list模拟实现 文章目录 [STL]list模拟实现1. 整体结构总览2. 成员变量解析3. 默认成员函数构造函数1迭代器区间构造函数拷贝构造函数赋值运算符重载析构函数 4. 迭代器及相关函数迭代器整体结构总览迭代器的模拟实现begin函数和end函数begin函数和end函数const版本 5. 数据…

心法利器[93] | 谈校招:技术面

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会&#xff0c;与大家一起成长。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 2022年新一版的文章合集已经发布&#xff0c;累计已经60w字了&#xff0c;获取方式看这里&…

eda、gnm、anm究竟是个啥?

安装prody pip install prody -i https://pypi.tuna.tsinghua.edu.cn/simpleeda、anm、gnm eda(essential dynamics analysis) 另一个名字PCA(Principal Component Analysis) 或 NMA(Normal Mode Analysis)。 eda分析可以帮助人们理解生物大分子基本的运动模式和构象变化。…

【Linux】自动化构建工具-make/Makefile详解

前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01;本章主要内容面向接触过Linux的老铁&#xff0c;主要内容含 欢迎订阅 YY 滴Linux专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 订阅专栏阅读&#xff1a;YY的《…

Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么

目录 Chat GPT是什么 初学者怎么使用Chat GPT 使用Chat GPT需要注意什么 一些简单的prompt示例 Chat GPT是什么 Chat GPT是由OpenAI开发的一种大型语言模型&#xff0c;它基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;架构。GPT是一种基于深度学习的…

模电基础知识学习笔记

文章目录&#xff1a; 一&#xff1a;基本元器件介绍 1.二极管 1.1 普通二极管特性测试 1.2 稳压二极管测试 1.3 整流二极管 1.4 开关二极管 2.电容 3.三极管(电流控制) 3.1 介绍 3.2 类型&#xff08;PNP、NPN&#xff09; 3.3 三种工作状态:放大状态、截止状态…

《JeecgBoot系列》JeecgBoot(ant-design-vue)实现筛选框:支持下拉搜索+下拉多选+表字典(支持条件查询)功能

JeecgBoot(ant-design-vue)实现筛选框&#xff1a;支持下拉搜索下拉多选表字典(支持条件查询)功能 JSearchMultiSelectTag.vue源文件 一、需求介绍 在使用JeectBoot(ant-design-vue)设计表单时&#xff0c;需要实现下拉搜索下拉多选表字典(支持条件查询)。 但是系统目前有两…

Vue3 Vite electron 开发桌面程序

Electron是一个跨平台的桌面应用程序开发框架&#xff0c;它允许开发人员使用Web技术&#xff08;如HTML、CSS和JavaScript&#xff09;构建桌面应用程序&#xff0c;这些应用程序可以在Windows、macOS和Linux等操作系统上运行。 Electron的核心是Chromium浏览器内核和Node.js…

机器学习实战:Python基于EM期望最大化进行参数估计(十五)

文章目录 1. 前言1.1 EM的介绍1.2 EM的应用场景 2. 高斯混合模型估计2.1 导入函数2.2 创建数据2.3 初始化2.4 Expectation Step2.5 Maximization step2.6 循环迭代可视化 3. 多维情况4. 讨论 1. 前言 1.1 EM的介绍 &#xff08;Expectation-Maximization&#xff0c;EM&#…

程序设计 算法基础

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境

知识点&#xff1a;简单了解K210芯片 2018年9月6日,嘉楠科技推出自主设计研发的全球首款基于RISC-V的量产商用边缘智能计算芯片勘智K210。该芯片依托于完全自主研发的AI神经网络加速器KPU,具备自主IP、视听兼具与可编程能力三大特点,能够充分适配多个业务场景的需求。作为嘉楠科…