【Unity项目】登录界面

2023-11-10

数据库

登录时验证用户名和密码,使用MySQL数据库管理数据,类中的主要方法也都是使用SQL语句完成。类中还提供两个接口, 一个通过username获取UserInfo ,一个是直接获取到排行榜。
数据库连接类

using System;
using MySql.Data.MySqlClient;
using UnityEngine;


public class MySqlAccess
{
    //连接类对象
    public  MySqlConnection mySqlConnection;
    //IP地址
    private static string host;
    //端口号
    private static string port;
    //用户名
    private static string username;
    //密码
    private static string password;
    //数据库名称
    private static string databaseName;
    public MySqlAccess(string _host,string _port, string _username, string _password, string _databaseName)
    {
        host = _host;
        port = _port;
        username = _username;
        password = _password;
        databaseName = _databaseName;
        OpenSql();
    }
    private void OpenSql()
    {
        try {
            string mySqlString = string.Format("datasource={0};port={1};database={2};user={3};pwd={4};"
                , host, port, databaseName, username, password);
            //Debug.Log(mySqlString);
            mySqlConnection = new MySqlConnection(mySqlString);
            mySqlConnection.Open();
        } catch (Exception e) {
            throw new Exception("服务器连接失败,请重新检查MySql服务是否打开。" + e.Message);
        }
    }
}

数据库管理类

using System;
using System.Collections.Generic;
using Frame.Utility;
using Game.bean;
using Game.Interface;
using MySql.Data.MySqlClient;
using UnityEngine;
using EventType = Frame.Utility.EventType;

namespace Game
{
    public class DataBaseManager : SingleTonMonoAuto<DataBaseManager>, IDataBaseManager
    {
        private MySqlAccess mySqlAccess;
        private string _connectionStr;
        private MySqlConnection _connection;
        private MySqlCommand  _command;
        Dictionary<string, UserInfo> _dictionary = new Dictionary<string, UserInfo>();
        private UserInfo _userCache;
        //宿舍的ip
        //private string host = "172.20.177.212";
        //课室的
        private string host = "10.9.72.192";

        private void OnEnable()
        {
            EventCenter.Instance.AddListener(EventType.ResetLogin,ResetLogin);
        }

        public void AddMoneyAndHonor(string name,int money,int honor)
        {
            if (_dictionary.ContainsKey(name))
            {
                UserInfo userInfo = _dictionary[name];
                userInfo.money += money;
                userInfo.honor += honor;
                SaveInfo(userInfo);
            }
        }
        
        /// <summary>
        /// 保存UserInfo数据
        /// </summary>
        /// <param name="userinfo"></param>
        public void SaveInfo(UserInfo userinfo)
        {
            int userId = userinfo.id;
            int money = userinfo.money;
            int honor = userinfo.honor;
            string heroList = userinfo.ownedHero;
            if ( !_dictionary.ContainsKey(userinfo.username))
            {
                //把用户数据存入字典
                _dictionary.Add(userinfo.username, userinfo);
            }
            UpdateUserInfo(userId, money, honor, heroList);
        }
        /// <summary>
        /// 修改用户信息
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <param name="money"></param>
        /// <param name="honor"></param>
        /// <param name="ownedHero"></param>
        private void  UpdateUserInfo(int @ID,int @money,int @honor,string @ownedHero)
        {
            _command.CommandText = "Update CustomerInfo Set money=\'"
                                   +money+"\', honor=\'"+honor+"\', ownedHero=\'"
                                   +ownedHero+"\' where ID="+ID;
            int i = _command.ExecuteNonQuery();
            Debug.Log("产生影响"+ i);
        }
        
        private DataBaseManager()
        {
            //Debug.Log("DataBaseManager实例化");
            InitDataBase();
        }

        //初始化数据库
        private void InitDataBase()
        {
            mySqlAccess = new MySqlAccess(host,"3306","root","123456","dbcustomerinfo");
            _connection = mySqlAccess.mySqlConnection;
            _command = _connection.CreateCommand();
            SaveInDic();
            
        }

        private void SaveInDic()
        {
            _command.CommandText = "Select * From CustomerInfo";
            MySqlDataReader _reader = _command.ExecuteReader();
            //将数据传入字典
            while (_reader.Read())
            {
                object id = _reader.GetValue(0);
                object username = _reader.GetValue(1);
                object password = _reader.GetValue(2);
                object money = _reader.GetValue(3);
                object honor = _reader.GetValue(4);
                object ownedHero = _reader.GetValue(5);
                object isLogined = _reader.GetValue(6);
                if (!_dictionary.ContainsKey((string) username))
                {
                    _dictionary.Add((string) username,
                        new UserInfo(Convert.ToInt32(id), (string) username, (string) password, Convert.ToInt32(money),
                            Convert.ToInt32(honor), (string) ownedHero ,Convert.ToInt32(isLogined)));
                }
            }
            _reader.Close();
        }
        /// <summary>
        /// 通过用户名获取UserInfo
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        public UserInfo GetUserInfo(string name, string pwd)
        {
            _command.CommandText = "Select * From CustomerInfo where username = " + "'" + name + "'";
            if (_command.ExecuteScalar() == null)
            {
                Debug.Log("用户名不存在");
                //用户名不存在
                return null;
            }
            else //用户名存在
            {
                //判断是否与密码匹配
                UserInfo _user;
                _dictionary.TryGetValue(name, out _user);
                if (_user != null && !CheckIsLogined(name))
                {
                    bool pwdIsSame = _user.password == pwd ? true : false;
                    if (pwdIsSame)
                    {
                        Debug.Log("登陆成功");
                        _user.isLogined = 1;
                        _command.CommandText = "UPDATE customerinfo SET islogined = 1 WHERE username = " +"'" + name + "'";
                        _command.ExecuteNonQuery();
                        _userCache = _user;
                        return _user;
                    }
                    else
                    {
                        Debug.Log("账户名或密码错误");
                        return null;
                    }
                }
            }
            return null;
        }

        private bool CheckIsLogined(string username)
        {
            _command.CommandText = "SELECT islogined from customerinfo WHERE username =" + "'" + username + "'";
            object obj = _command.ExecuteScalar();
            bool isLogined = Convert.ToInt32(obj) == 1 ? true : false;
            return isLogined;
        }
        
      
        /// <summary>
        /// 获取排行榜
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        public List<UserInfo> GetRankList(int num)
        {
            if (num > _dictionary.Count)
            { 
                Debug.LogError("查询范围超出!");
                return null;
            }
            List<UserInfo> rankList = new List<UserInfo>();
            //排序的SQL语句
            _command.CommandText = "Select * from CustomerInfo ORDER BY honor DESC , money DESC limit " + num;
            MySqlDataReader _reader = _command.ExecuteReader();
            while (_reader.Read())
            {
                UserInfo _userInfo;
                _dictionary.TryGetValue((string) _reader.GetValue(1), out _userInfo);
                rankList.Add(_userInfo);
            }
            _reader.Close();
            return rankList;
        }

        private void OnApplicationQuit()
        {
            //Debug.Log("关闭数据库连接");
            if (mySqlAccess.mySqlConnection!=null)
            {
                EventCenter.Instance.RemoveListener(EventType.ResetLogin,ResetLogin);
                if(_userCache!=null){
                    _userCache.isLogined = 0; 
                    _command.CommandText = "UPDATE customerinfo SET islogined = 0 WHERE username = " +"'" + _userCache.username + "'";
                    _command.ExecuteNonQuery();
                }
                mySqlAccess.mySqlConnection.Close();
            }
        }

        /// <summary>
        /// 一键还原所有登录
        /// </summary>
        public void ResetLogin()
        {
            _command.CommandText = "Update customerInfo Set islogined = 0";
            _command.ExecuteNonQuery();
            print("已还原所有登录");
        }
    }
}

登录页面

using System;
using DG.Tweening;
using Frame.UI;
using Frame.Utility;
using Game;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using EventType = Frame.Utility.EventType;

public class LoginModule : UIModuleBase
{
    private InputField inputName;
    private InputField inputPsw;
    private EventSystem _system;
    private bool isSelectUsername; //选框用户名
    private Image FocusLigthUsername;
    private Image FocusLigthPassword;
    private Text txtMention; //密码错误提示

    //可选对象
    Selectable cur = null;

    private void Start()
    {
        _system = EventSystem.current;
        txtMention = FW("txtMention#").Text;
        inputName = FW("Field-UserName#").InputField;
        inputPsw = FW("Field-UserPassword#").InputField;
        FW("LoginButton#").Button.onClick.AddListener(() =>
        {
            Debug.Log("点击了登录按钮 name=" + inputName.text + " psw=" + inputPsw.text);
            //调用UIEvent的事件
            UIEvent.LoginClick(inputName.text, inputPsw.text);
        });    
    }

    
    public void PlayMentionAnime()
    {

        Debug.Log("PlayMentionAnime");
        Tweener _tweener = txtMention.DOFade(1, 0.6f);
        
        _tweener.SetDelay(0);
        _tweener.SetEase(Ease.Linear);
        _tweener.SetAutoKill(true);
        _tweener.SetLoops(0);
    }


    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Tab))
        {
            Selectable next = null;
            cur = _system.currentSelectedGameObject.GetComponent<Selectable>();
            print("name=" + cur.name);
            if (cur.name == "Field-UserName#")
            {
                isSelectUsername = true;
                next = cur.FindSelectableOnDown();
            }
            else
            {
                isSelectUsername = false;
                next = cur.FindSelectableOnUp();
            }

            _system.SetSelectedGameObject(next.gameObject, new BaseEventData(_system));
        }

        if (Input.GetKeyDown(KeyCode.Return))
        {
            UIEvent.LoginClick(inputName.text, inputPsw.text);
        }
        if (Input.GetKeyDown(KeyCode.B))
        {
            //一键清空登录状态
            EventCenter.Instance.Call(EventType.ResetLogin);
        }
    }
}

登录成功界面

using System;
using System.ComponentModel.Design;
using Frame.UI;
using Game;
using Game.bean;
using Photon.Pun;
using UnityEngine;
using UnityEngine.Tilemaps;
using UnityEngine.UI;
using Object = System.Object;

public class LoginSucPanel : UIModuleBase
{
   private Button BtnCheck;
   private Text LoginMsg;
   protected override void Awake()
   {
      base.Awake();
      BtnCheck = FW("BtnCheck#").Button;
      LoginMsg = FW("txtLoginMsg#").Text;
      
      BtnCheck.onClick.AddListener(() =>
      {
         UIEvent.ToMain();
      });
    }

   
   public void Init()
   {
      LoginMsg.text = "亲爱的"+"\n" +  PhotonNetwork.NickName +"\n"+ "欢迎进入游戏!";
   }

   public override void OnSpawn(Object obj)
   {
      base.OnSpawn(obj);
      //设置photon昵称
      PhotonNetwork.NickName =  (string)obj;
      Init();
   }

   private void Update()
   {
      if (Input.GetKeyDown(KeyCode.Return))
      {
         UIEvent.ToMain();
      }
   }
}

游戏控制类

using Game;
using Game.bean;
using Game.Interface;
using Photon.Pun;

//游戏控制类。负责所有游戏逻辑总控制
//单例,待实现
public class GameController: SingleTonObj<GameController>
{
    private MainPageInfo _mainPageInfoCache;
    private GameController(){}
    
    //具体的游戏逻辑控制,按功能分
    
    //UI控制
    private IUIController _uiController;
    //登录管理
    private ILoginManager _loginManager;
    //玩家数据
    private PlayerInfo _playerInfo;
    //地图
    private IMapManager _mapManager;
    //网络框架
    private IPhotonWrapper _photonWrapper;

    private bool init = false;

    /// <summary>
    /// 初始化
    /// </summary>
    public void Init()
    {
        if (init)
        {
            return;
        }

        init = true;
        InitObj();
        BindUIEvent();
    }

    /// <summary>
    /// 初始化各个逻辑对象的具体类
    /// </summary>
    private void InitObj()
    {
        _uiController=new UIController();
        //_loginManager=new LoginManager();
        _loginManager = new FakeLoginManager();
        _mapManager= new TestMapManager();
        _photonWrapper=new TestPhotonWrapper();
        _playerInfo=new PlayerInfo();
    }

    private void BindUIEvent()
    {
        UIEvent.LoginClick += Login;
        UIEvent.ToMain += ToMain;
        UIEvent.StoreClick += Store;
        UIEvent.SettingClick += Setting;
        UIEvent.MapClick += MapDetail;
        UIEvent.LobbyClick += Lobby;
        UIEvent.QuickStartClick += QuickStart;
        UIEvent.HeroChange += HeroChange;
        UIEvent.GameStart += GameStart;
    }

    private void ToMain()
    {
        _uiController.ShowMain(_mainPageInfoCache);
    }

    private void GameStart(MapInfo mapInfo)
    {
        //游戏开始,根据地图配置,跳到各自的场景
    }

    private void QuickStart()
    {
        _photonWrapper.RandomJoin((result) =>
        {
            if (result)
            {
                _uiController.ShowRoomInfo();
            }
            else
            {
                _photonWrapper.CreateRoom();
            }
        });
    }

    private void Lobby()
    {
        _uiController.ShowLobby();
    }

    private void MapDetail(MapInfo obj)
    {
        _uiController.ShowMapDetail();
    }

    private void Setting()
    {
        _uiController.ShowSetting();
    }

    private void Store()
    {
        _uiController.ShowStore();
    }

    private void HeroChange(HeroInfo heroInfo)
    {
        _playerInfo.chooseHero = heroInfo;
    }

    private void Login(string name, string pwd)
    {
        _loginManager.Login(name,pwd, (loginResult) =>
        {
            if (loginResult.suc)
            {
                _mainPageInfoCache = new MainPageInfo();
                _mainPageInfoCache.userInfo = loginResult.userInfo;
                
                PlayerInfo.Instance.Init();
                PlayerInfo.Instance._userInfo = loginResult.userInfo;
                _mainPageInfoCache.maps = _mapManager.GetAllMap();
                _uiController.ShowLoginSuc(_mainPageInfoCache.userInfo.username);
            }
            else
            {
                _uiController.ShowLoginError();
            }
        });
    }

    /// <summary>
    /// 游戏入口,游戏启动的时候调用
    /// </summary>
    public void Entrance()
    {
        if (PlayerInfo.Instance._userInfo != null)
        {
            _mainPageInfoCache = new MainPageInfo();
            _mainPageInfoCache.userInfo = PlayerInfo.Instance._userInfo;
            _mainPageInfoCache.maps = _mapManager.GetAllMap();
            _uiController.ShowMain(_mainPageInfoCache);
        }else{
            _uiController.ShowLogin();
            PhotonNetwork.ConnectUsingSettings();
            PhotonNetwork.AutomaticallySyncScene = true;
        }
    }
}

登录类实例

using System;
using Game.bean;
using Game.Interface;
using Mono.Data.Sqlite;
using UnityEngine;


namespace Game
{
    /// <summary>
    /// 登录实现实例
    /// </summary>
    public class LoginManager:ILoginManager
    {
        private IDataBaseManager _dataBaseManager;
        public LoginManager()
        {
            _dataBaseManager = DataBaseManager.Instance;
        }
        public void Login(string name, string pwd, Action<LoginResult> callBack)
        {
            LoginResult result =new LoginResult();
            //查数据库
            UserInfo userInfo = _dataBaseManager.GetUserInfo(name, pwd);
            //查到了
            bool check = userInfo!=null;
            //且状态为未登录
            if(check){
                result.suc = true;
                result.userInfo = userInfo;
                callBack(result);
            }else{
                //没查到 或者账号已登录
                result.suc = false;
                callBack(result);
            }
        }

    }
}

登录结果类

namespace Game.bean
{
    /// <summary>
    /// 登录的结果
    /// </summary>
    public class LoginResult
    {
        public bool suc;
        public UserInfo userInfo;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Unity项目】登录界面 的相关文章

  • wazuh 原理分析之Syscollector 系统信息收集工作流程

    wazuh是从ossec hids衍生过来的 部分架构设计有所不同 多进程多线程模式 本机的进程之间通过Unix domain socket 进行通信的 今天简单介绍一下数据搜集的相关功能的实现 Linux系统 注意由于篇幅所限 在函数中我
  • Facebook全球6小时宕机原因已查明:一条指令所致,内部工程师所为

    博雯 发自 凹非寺量子位 报道 公众号 QbitAI Facebook全球宕机6小时的原因 是公司内部工程师的一条错误指令 最近 Facebook官方针对这次大规模宕机的原因做了回应 这一新闻已经出现在了微博热榜 而在回复中 官方也 针对各
  • httprunner使用总结

    背景 在准备做接口自动化的过程中 了解到httprunner是一种简洁 不会代码的人也可以快速上手的框架 维护人员只需要编写并维护json或yaml文件 即可实现自动化测试 在结合httprunnerV2 X中文使用文档 应用于自己的项目中
  • WSDL实例解析

    WSDL的主要文档元素 WSDL文档可以分为两部分 顶部分由抽象定义组成 而底部分则由具体描述组成 抽象部分以独立于平台和语言的方式定义SOAP消息 它们并不包含任何随 机器或语言而变的元素 这就定义了一系列服务 截然不同的应用都可以实现
  • 类的默认成员函数2 --- 析构函数

    析构函数 1 概念 前面通过构造函数的学习 我们知道一个对象时怎么来的 那一个对象又是怎么没呢的 析构函数 与构造函数功能相反 析构函数不是完成对象的销毁 局部对象销毁工作是由编译器完成的 而对象在销毁时会自动调用析构函数 完成类的一些资源
  • RK3368 RK3128编译问题总结

    1 build build machine rk3288 kernel make rk3288 tb 8846 img scripts kconfig conf silentoldconfig Kconfig C build build m
  • 【1】python二级——操作题

    目录 基本操作题 题目一 题目二 题目三 简单应用 题目四 题目五 综合应用 题目六 问题1 问题2 总结 基本操作题 题目一 考生文件夹下存在一个文件PY102 py请写代码替换横线 实现以下功能 使用calendar模块 从键盘输入年份
  • 微信报错:“code“:“40001“

    微信通知报错 code 40001 code 40001 message invalid credential access token is invalid or not latest rid 6285b05b 6dc11ee1 4a77
  • 解决:class invalid for deserialization序列化的问题(真实有效)

    数据库连接失败 在数据库连接失败 经常会有蛮多一系列的问题导致的原因 这个时候一定要多去尝试一下各种方法 并且做好自己的梳理 一 例如我在SpringBoot项目中使用了阿里的数据库连接池Driud 有次在启动的时候 会报这样的错 Caus
  • Spring AOP面向切面编程:理解篇(一看就明白)

    一直想着怎么去通俗的讲解AOP 看了一篇文章受到了启发 https blog csdn net qukaiwei article details 50367761 下面我加入自己的理解 咱们来说说AOP 一 到底什么是AOP 面向切面编程
  • conda install R语言报错问题血泪解决

    今天在安装conda之后 想安装r语言环境 却遇到如下报错 真的超级郁闷 conda install r Collecting package metadata current repodata json failed CondaHTTPE
  • LeetCode 2488. 统计中位数为K的子数组

    题目描述 给你一个长度为 n 的数组 nums 该数组由从 1 到 n 的 不同 整数组成 另给你一个正整数 k 统计并返回 nums 中的 中位数 等于 k 的非空子数组的数目 注意 数组的中位数是按 递增 顺序排列后位于 中间 的那个元
  • sqli - labs -Less - 7 ~ 8

    输入id 1显示正常 输入id 1 报错 这里我们无法从错误信息中找到我们需要的东西 就要用到盲注了 lt 这里的盲注指的是布尔盲注 gt 所谓盲注就是我们去猜测数据库的长度等等 再结合语句去验证从而得到我们想要的信息 我们依然是用burp
  • 在HTML5中有什么可以替代iFrame

    最佳解决方法 通常有4种方法可以将HTML嵌入到网页中 iframe的内容完全位于当前页面不同的上下文中 虽然这是一个很棒的功能 而且是不同浏览器版本之间兼容最好的 但是它也带来了额外的问题 将frame大小跟网页内容设置一致比较麻烦 AJ
  • C语言代码覆盖率测试工具-OpenCppCoverage介绍

    代码覆盖率测试工具名称 OpenCppCoverage 简介 OpenCppCoverage是2014年推出的Windows平台下开源的C 代码覆盖率工具 类似于Linux下gcc内嵌的gcov工具 它不需要在编译时插桩 只需要有编译生成的
  • 17.进程同步与死锁——信号量临界区保护

    1 温故知新 通过对信号量的访问和修改 让进程有序推进 问题 empty值必须是正确的 如果empty错了 就不能有序推进了 2 共同修改信号量引出的问题 生产者 Producer item P empty 生产者先判断 缓存区个数 emp
  • 富文本图片怎么上传_django上传图片到七牛云-富文本编辑器上传图片到七牛云...

    django创建项目 默认是保存资源到本地的 但是由于会占用太多的存储空间 对日后管理和升级不太友善 所以一般会把静态资源保存在第三方存储库里 这里 我们就是用到了七牛云 云存储 安装七牛云所需要的包 pip install django
  • 教你在M1芯片的imac一体机上安装PS2021 附教程和方法适用于所有Mac

    提示 文章转载自互联网 文章目录 前言 一 正确安装流程 二 注意事项 总结 前言 苹果在21年4月发布了搭载M1芯片的一体机产品 imac 2021 惊艳的机生设计和超薄的厚度实在是太香了 关键是性价比还算不错 详细大部分购买Imac的用
  • 4. 定时器(TIM)(定时器计数)

    1 TIM简介 TIM Timer 定时器 定时器可以对输入的时钟进行计数 并在计数值达到设定值时触发中断 16位计数器 预分频器 自动重装寄存器的时基单元 在72MHz计数时钟下可以实现最大59 65s 1 72 2 16 2 16 2
  • 多服务器分布式系统架构,集中式架构与分布式架构,你了解多少?

    原标题 集中式架构与分布式架构 你了解多少 什么是集中式 集中式架构就是将项目集中存储在中央服务器中 在工作的时候 大家只要自己电脑上操作 从同一个地方下载最新版本 然后开始工作 做完的工作再提交给中央服务器保存 这种方式需要联网 典型的例

随机推荐

  • 翻译:Apache Linkis Graduated to Apache Top-Level Project(Apache Linkis 升级为顶级项目)

    Apache Linkis是一个计算中间件 作为上层应用和底层引擎之间的一层 如Apache Spark Apache Hive和Apache Flink 它在2021年作为一个Apache孵化器项目开始 并在2023年1月升级为顶级项目
  • Spring Boot

    前言 什么是Spring Boot 为什么要学Spring Boot Spring 的诞 是为了简化Java 程序的开发的 Spring Boot 的诞 是为了简化Spring 程序开发 的 Spring就像汽车 相比以前人只能其自行车走路
  • CGAL 使用Voronoi协方差估计点云的法线

    目录 一 算法原理 1 主要函数 二 代码实现 一 算法原理 1 主要函数 头文件 include
  • IO多路复用之select、poll、epoll

    五种网络I O模型 如果使用多进程 多线程模式的话 创建进程和创建线程需要时间开销 在编写服务器客户端程序时 如果服务器性能不行而客户端太多时这种代价很大 试想如果有一种方法能够同时监听按键设备 串口设备和网络socket的事件 可读 可写
  • 【Python零基础入门篇 · 11】:类型转换和深浅拷贝,可变对象和不可变对象、pass语句

    文章目录 int float str repr eval的类型转换 list str tuple三者的类型相互转换 深浅拷贝 浅拷贝 数据半共享 深拷贝 数据完全不共享 可变对象和不可变对象 可变对象 不可变对象 pass语句 int fl
  • HDMI和DP线的等级和速度

    转自 4K 144Hz到底需要多少带宽
  • Unity3D的GetComponent<>()

    GetComponent 是Unity游戏引擎中的一个函数 用于获取游戏对象上附加的组件 在Unity中 游戏对象可以添加各种不同的组件来实现不同的功能 比如 Transform组件用于控制游戏对象的位置 旋转和缩放 Renderer组件用
  • C++实验: 运算符重载

    C 实验 运算符重载 1 实验目的 1 进一步了解运算符重载的概念与使用方法 2 掌握几种常用的运算符重载方法 3 了解转换构造函数的使用方法 4 了解在Visual C 6 0环境下进行运算符重载要注意的问题 2 实验内容 1 声明一个复
  • NET Core 3.0 AutoFac替换内置DI的新姿势

    NET Core 3 0 和 以往版本不同 替换AutoFac服务的方式有了一定的变化 在尝试着升级项目的时候出现了一些问题 原来在NET Core 2 1时候 AutoFac返回一个 IServiceProvider 参数注入到Confi
  • 剖析top命令显示的VIRT RES SHR值

    http yalung929 blog 163 com blog static 203898225201212981731971 http www fuzhijie me p 741 引 言 top命令作为Linux下最常用的性能分析工具之
  • 自然语言处理基础

    以下所有内容来自 自然语言处理 基于预训练模型的方法 1 文本的表示 利用计算机对自然语言进行处理 首先要解决语言在计算机内部的存储和计算问题 使用字符串表示计算文本的语义信息的时候 往往使用基于规则的方法 如 判断一个句子编译还是褒义 规
  • ninja: error: ‘system/bt/EventLogTags.logtags‘, needed by ‘out/target/common/obj/all-event-log-tags.

    项目场景 编译环境 ubuntu18 04 软件版本 全志SDK 安卓版本8 1 0 linux 4 9 0 问题描述 编译SDK时遇到这个问题 97 43 44 glob device Android bp ninja error sys
  • (HTML5)第一章

    HTML5秘籍 第一部分适合浏览器升级时参考 参考网址 H5API https github com Modernizr Modernizr wiki HTML5 Cross browser Polyfills 书本案例 http www
  • vue el-input表单验证禁止输入空格

    element ui 中自带的表单必填项校验输入空格时 依然能逃过验证 required true还是可以通过 需要再 在v model 加上 trim 来禁止输入空格字符 加上之后则不能输入空格
  • 唐老师讲运算放大器(第五讲)——运放的应用

    一 常见运放的应用 二 运放用于电源降压 图示的D1为2 5V稳压管 若VIN 12V 那么运放的同相输入端为2 5V 又虚短可知 反向输入端的电压也为2 5V 那么Rfb2和Rfb1中间节点的电压为2 5V 此时 有运算放大器的性质可知
  • 知识蒸馏 (一) 综述

    一 综述 Knowledge Distillation A Survey 2021 IJCV Knowledge Distillation and Student Teacher Learning for Visual Intelligen
  • 《C和指针》笔记29:数组名和指针

    看下面的代码 int b 10 b 4 的类型是整型 但b的类型又是什么 它所表示的又是什么 一个合乎逻辑的答案是它表示整个数组 但事实并非如此 在C中 在几乎所有使用数组名的表达式中 数组名的值是一个指针常量 也就是数组第1个元素的地址
  • 斐波那契数列求和--C语言

    include
  • 服务器net0显示linkdown,某局点S10500交换机设备接口up/down的trap中没显示端口号信息...

    某客户使用我司S10500系列交换机 在使用过程中 用户配置了SNMP网管服务器 同时将设备的告警信息发送给网管服务器 在使用过程中发现 部分设备的接口变化的告警信息中没有具体接口号相关信息 只有接口索引值 如下为客户现场S10500交换机
  • 【Unity项目】登录界面

    数据库 登录时验证用户名和密码 使用MySQL数据库管理数据 类中的主要方法也都是使用SQL语句完成 类中还提供两个接口 一个通过username获取UserInfo 一个是直接获取到排行榜 数据库连接类 using System usin