数据结构篇:单链表
本程序以类似应用程序的对话框形式进行单链表的操作。希望对大家的学习有所帮助。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881...
数据结构篇:二叉树
二叉树的创建,递归遍历及其他基础知识 二叉树的相关概念 结点的度。结点所拥有的子树的个数称为该结点的度。例如右图B结点度数为2 叶结点。度为0的结点称为叶结点,或者称为终端结点。例如右图的F,D,C结点 分枝结点。度不为0的结点称为分支结点,或者称为非终端结点。一棵树的结点除叶结点外,其余的都是分支结点。例如右图的A,B,E,左图的A,B 结点的层数。规定树的根结点的层数为1,其余结点的层数等于它的双亲结点的层数加1。例如右图的F结点层数为4 树的深度(高度)。树中所有结点的最大层数称为树的深度。例如右图深度为4 树的度。树中各结点度的最大值称为该树的度。一般情况下,二叉树的度都为2 先给出结构 12345 struct BiTree { char data; BiTree *lchild,*rchild;}; 二叉树的创建 只能用先序法创建,单独的中序或后序都无法进行创建,原因和解决办法我会在以后博客进行完成 12345678910111213141516171819202122232425 BiTree * Tree :: PreCrea...
C#篇:剖析c#中的异步方法
本文翻译自 https://blogs.msdn.microsoft.com/seteplia/2017/11/30/dissecting-the-async-methods-in-c/ 前言 c#语言对于开发人员的工作效率非常好,我很高兴最近的努力使它更适合于高性能应用程序。 下面是一个例子:C#5引入了“async”方法。从用户的角度来看,该特性非常有用,因为它有助于将几个基于任务的操作组合成一个操作。但是这种抽象是有代价的。任务是引用类型,在创建它们的任何地方都会导致堆分配,即使在“async”方法同步完成的情况下也是如此。使用C#7,异步方法可以返回类似于任务的类型,比如ValueTask,以减少堆分配的数量,或者在某些场景中完全避免它们。 为了理解所有这些是如何实现的,我们需要深入了解异步方法是如何实现的。 历史回顾 但首先,让我们回顾一下历史。 类Task和Task<T>是在.Net 4.0中引入的,在我看来,在.Net中的异步和并行编程领域发生了巨大的思想转变。与以前的异步模式(如.Net 1.0中的BeginXXX/EndXXX模式,也称为“异步编程模...
关于ISharedComponent的一切
前言 ECS中的ISharedComponent是一个非常重要的概念,但是理解起来却不是这么容易,前阵子找到一篇讲ISharedComponent的文章,感觉例子举的很好,讲的也很透彻,故翻译出来分享给大家。 本文翻译自:https://gametorrahod.com/everything-about-isharedcomponentdata/ 正文 这是ECS最容易被误解的功能之一。当您不知道它是如何设计的时候,通常会出现诸如“如何在工作中获取SCD数据?我不能?那有什么卵用!”这样的问题。因此,让我们开始了解它是如何工作的。 数据共享并不那么ECS 众所周知,ECS会紧密排布entity数据成为chunk。同样,高性能C#(HPC#)的限制是得确保您没有通往外界的任何“门户”。static无法使用。禁用别名。分析器无法通过公有字段引入job的引用类型。它也不会让您将指针潜入IComponentData其中。另外,存储器必须是线性的。 “共享”的概念听起来根本不像ECS。在ECS中,可以从chunk中获取任何用来工作的数据。您不会在任何地方跳转,这就是“默认情况下的性能”的来...
ET篇:个人笔记汇总
ET系列教程视频 B站视频教程 ETBook学习笔记 ETBook笔记汇总 FairyGUI学习笔记 ET使用FairyGUI开发的完整工作流 基于FGUI的小地图制作 ET 5.0学习笔记 运行master master项目结构梳理 master客户端初始化流程 master服务端初始化流程 master消息机制 ET 6.0学习笔记 ET 6.0学习笔记 ET6.0接入ILRuntime ET 7.0学习笔记 ET7+FariyGUI+huatuo+luban+yooasset接入教程 ET 斗地主学习笔记 运行斗地主 斗地主的资源工作流 ET 其他笔记 ETTask和ETVoid相关知识 ET中那些千万不能踩的坑 ET&&FGUI接入xasset流程
ET篇:斗地主的资源工作流
有了master的学习经验,斗地主的学习将不会太多精细化,更多细节大家可以自行查看,本系列文章旨在帮助大家理解整个开发流程 资源划分策略 先来到Asset下的Bundles文件夹,这里是游戏内用到的所有的资源,都被打成ab包,正式发布时将会删除,从资源服务器下载文件 Independent Code 包含热更新模块的dll文件 Config 包含客户端的配置文件(连接配置,所用到的玩家,敌人等数据结构) UI Landlords/Altas 包含游戏内用到的所有图集 Landlords/Content 玩家正式开局游戏内的个人信息 Landlords/HandCard 玩家手牌UI Landlords/LandlordsEnd 游戏结束界面 Landlords/Interaction 玩家的正式游戏内操作界面(出牌,不要,抢地主,不抢等) Landlords/LandlordsLobby 游戏大厅 Landlords/LandlordsLogin 登录界面 Landlords/LandlordsRoom 正式游戏界面UI Landlor...
ET篇:运行斗地主Demo
环境准备: 下载斗地主Demo https://github.com/Viagi/LandlordsCore.git 准备2017.4.0版本的Unity https://unity3d.com/cn/get-unity/download/archive 下载并配置MongoDB以及Studio 3T MongoDB地址:****https://www.mongodb.com/download-center/community 选择Custom 我是在D盘新建了MongoDB文件夹来作为安装目录 这个可视化工具看个人喜好,我这里没有安装 找到电脑上的cmd.exe 复制一份到MongoDB安装目录的bin文件夹下面 打开刚刚复制的cmd.exe 执行以下命令(_dbpath后面的路径为你的MongoDB安装路径下的的data文件夹路径) 1mongod -dbpath D:\MongoDB\data 然后他可能会这样 打开浏览器,输入** http://localhost:27017/如果显示如下信息,表示连接成功** Studio 3T的下载 https://...
ET篇:ETVoid和void,ETTask和Task的区别与使用时机
在学习ET的过程中,我们经常看到ETVoid和ETTask的身影 比如 1234567891011121314151617181920/// <summary>/// 异步加载assetbundle/// </summary>/// <param name="assetBundleName"></param>/// <returns></returns>public async ETTask LoadBundleAsync(string assetBundleName){ assetBundleName = assetBundleName.ToLower(); string[] dependencies = AssetBundleHelper.GetSortedDependencies(assetBundleName); // Log.Debug($"-----------dep load {assetBundleName} dep...
ET篇:基于FGUI的小地图制作
前言 小地图开发对于我们来说是再常见不过的需求了,单用Unity中的UGUI来说倒也方便,但是用FGUI又如何呢? 正式开始 FGUI资源的搭建 注意小地图图片要用装载器来包装,不然他将会是不可触摸的,小地图宽高我们设置为200,大地图我们设置大小为100 然后导出到Unity FGUI坐标系统 http://www.fairygui.com/guide/unity/transform.html 小地图到大地图的坐标映射 落实到代码就是 12345678910111213141516 public override void Start(FUI5V5Map self) {//为小地图图片添加点击事件 self.SmallMapSprite.onRightClick.Add(this.AnyEventHandler); } void AnyEventHandler(EventContext context) { //Log.Info("点击了小地图"); ...
ET篇:master客户端初始化流程的介绍
要学习一个Demo,不能漫无目的的乱看,看到哪是哪,要有条理,我习惯于从程序入口开始 进入Init场景 发现貌似只有一个Init脚本发挥着作用 那我们就进入Init脚本 这个便是入口了,他调用了StartAsync()函数,至于为什么后面加上Coroutine()(Coroutine是个空函数,并没有什么具体的作用) 熊猫大大说是为了防止这种情况(好吧。。。) ** 接下来我一步一步的解读Init函数里面的语句** 12 //把所有的异步回调都放到主线程执行SynchronizationContext.SetSynchronizationContext(OneThreadSynchronizationContext.Instance); 这个如果不理解的,应该去看看我前面的ETBook笔记 1234 //使当前游戏物体不会被销毁DontDestroyOnLoad(gameObject);//添加ETModel.dll,并解析维护当中的特性Game.EventSystem.Add(DLLType.Model, typeof(Init).Assembly); 第一句没什么好说的...