没有合适的资源?快使用搜索试试~ 我知道了~
视觉信息学5(2021)20Asyncflow:游戏人工智能可视化编程工具胡志鹏a,b,刘伟,范昌杰b,郑启伟b,吴伟b,刘白ba中国浙江大学计算机科学与技术学院b网易公司, 中国杭州ar t i cl e i nf o文章历史记录:收到2021年2021年11月4日收到修订版2021年11月4日接受2021年11月19日网上发售保留字:可视化编程流程图游戏人工智能a b st ra ct可视化编程工具广泛应用于游戏行业,以帮助游戏设计师开发游戏人工智能(游戏AI)和游戏玩法。然而,测试多个游戏引擎是一个耗时的操作,这降低了开发效率。为了给游戏设计者提供一个异步平台,本文介绍了一个开源的可视化编程解决方案Asyncflow。它包括一个用于游戏逻辑解释的流程图生成器和一个集成了基于事件驱动架构的异步机制的运行时框架。Asyncflow支持多种编程语言,可以轻松地嵌入到各种游戏引擎中,以运行游戏设计师创建的流程图版权所有©2021作者。由爱思唯尔公司出版我代表浙江大学和浙江大学出版社有限公司这是一个在CC BY-NC-ND许可证下的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。1. 介绍游戏AI是游戏中非玩家角色(NPC)的智能行为大多数游戏使用游戏设计师编写的基于规则的AI。在游戏产业的发展过程中,出 现 了 多 种 基 于 规 则 的 游 戏 AI 编 程 架 构 , 如 有 限 状 态 机(Wagner,2006)、层次状态机(Girault et al. ,1999)和行为树(Sekhavat,2017)已经被开发人员提出来处理复杂的游戏AI规则。与此同时,已经开发了许多可视化编程工具,以帮助具有有限编程技能的游戏设计者通过图形用户界面创建基于规则的游戏AI和游戏玩法(玩家与游戏之间的交互规则)。几秒钟或更长时间,就像从一个地方走到另一个地方。游戏引擎通常使用一个主循环来逐帧驱动游戏逻辑,持续性动作的执行将被分割到每一帧。可视化编程工具需要简化这种操作,这样游戏设计者就不需要关注实现细节。Behaviac提供了一个特殊的动作节点,状态为运行状态,用于执行持续性动作。在每一帧中,动作节点将执行整体动作的一部分,并被设置为运行状态,然后其他游戏逻辑可以在同一帧中执行。在每一帧中,Behaviac会检查这些动作节点是否已经完成运行,这是一种基于轮询的方法。此外,事件驱动的方法也可以实现这些操作节点,并且效率更高。但是没有一个可视化编程工具使用事件驱动的但是,现有工具生成的代码只能用于各自引擎开发的游戏项目。为方法目前。在本文中,我们提出了异步流,3基于流程图的VI-例如,Unity Visual Scripting1仅为游戏设计,gine团结。Behaviac2是一个支持C++和C#语言的全平台解决方案,但大多数游戏服务器使用Lua等脚本语言。因此,支持更多编程语言的全平台可视化编程工具可视化编程工具用于将游戏动作组合成游戏AI。大多数游戏动作都是持续性的,通讯作者:网易公司,中国杭州电子邮件地址:zphu@corp.netease.com(Z.Hu),fanchangjie@corp.netease.com(C.Fan),hzzhengqiwei@corp.netease.com(Q. Zheng),wuwei02@corp.netease.com(W.Wu),hzliubai@corp.netease.com(B.Liu).一种交互式的编程解决方案,可以支持交互式的设计,很好地签署和检查游戏AI和游戏性的执行情况。Asyncflow集成了一个通用的运行时框架,流程图中的各个节点都是兼容的。特别是,事件节点允许游戏AI中的异步逻辑,以避免持续性游戏动作的阻塞总之,本文的贡献包括以下几点:我们开发Asyncflow,一个支持可视化编程的界面,用于通过流程图制作器开发游戏AI和游戏。我们提出了一个运行时框架来管理游戏AI的操作,它打破了游戏AI代码在特定引擎上的限制。1 https://unity.com/cn/products/unity-visual-scripting。2 https://github.com/Tencent/behaviac网站。3详见https://github.com/fuxi-asyncflow/asyncflow/。https://doi.org/10.1016/j.visinf.2021.11.0012468- 502 X/©2021作者。由爱思唯尔公司出版代表浙江大学和浙江大学出版社。公司这是一个在CC BY-NC-ND许可证下的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表视觉信息学期刊主页:www.elsevier.com/locate/visinf··Z. Hu,C.范角,澳-地Zheng等人视觉信息学5(2021)2021我们使用基于事件驱动架构的运行时框架,使流程图的节点异步执行。2. 相关工作2.1. 流程图应用与交互式构建流程图被广泛用于描述神经网络(Kahng et al. ,2017)和解释事件序列(Gotz和Stavropoulos,2014)。TensorFlow GraphVisualizer(Wongsupha-sawatet al. ,2018)生成聚类图来总结神经网络中的数据流。紧凑的流表示支持用户以交互方式探索复杂的模型结构。类似地,EventThread(Guo et al. ,2017)通过对事件序列进行聚类来提取事件流,从中可以观察到演化模式为了支持流程图应用,相关研究人员和开发人员将重点放在交互式流程图构建上。微软开源软件Graphviz(Ellson et al. ,2001)通过读取DOT格式的文件来自动绘制流程图。需要在DOT文件中定义流程图中节点的样式。Graphviz绘制的流程图会自动布局。通常情况下,它可以提供良好的布局结果,但如果绘制效果与预期的不一样,则进行调整是非常麻烦的。在网易的低代码平台青州5号中,可以基于业务流程模型和符号2.0,用标准化的流程图模型绘制企业的业务流程,快速定制企业资源规划(ERP)应用。近年来,一些公司已经开始构建运行构造流程图的平台例如,微软的Power Automate(Pearson et al. ,2020)将流程图中的节点对应于操作或服务。2.2. 可视化编程可视化程序设计最早应用于程序设计教学。Charntaweekhun和Wangsiripitak(2006)发现,大多数学生更愿意接受流程图作为编程的载体,而不是直接编写代码。 因此,他们实现了一个将流程图转换为可执行代码的系统。代码中的逻辑判断和顺序用流程图直观地表示出来。RAPTOR(Carlisleet al. ,2004年)是一个专为学生设计的编程环境。通过绘制统一建模语言的流程图和类图,学生可以使用RAPTOR实现可视化程序设计。Yuan等人(2008)在程序设计教学中,对电子白板上的流程图草图进行了识别,并最终将其转化为标准的C语言程序。麻省理工学院的公共项目Scratch(Resnick etal. ,2009)可以被应用于构建像积木一样的程序。为了从结构解释和实时编程等功能中受益,在其他场景中使用可视化编程为了方便数据争论,Wrex(Drosos et al. ,2020)在手动编程期间为用户提供了可视化示例。结果验证可以从直观的数据表示中受益。此外,并置源代码和相应的输出可以帮助代码评估(Wood et al. ,2018年)。Vis-a-Vis(Bolte和Bruckner,2020)可以在编码过程中跟踪输出演变4 https://www.microsoft.com/en-us/microsoft-365/visio/flowchart-software网站。5 https://sf.163.com/product/lcap网站。优化.用户可以通过比较代码修改前后的输出来确定是否需要修改。游戏开发人员也迫切需要通过可视化编程来执行一些可视化编程工具通过用于游戏AI设计的可视化图形元素来创建和表达复杂的AI逻辑。通过对状态进行分类和分层,层次状态机可以清晰地表示游戏AI中大量状态此外,行为树通过树结构管理当状态较复杂时,行为树比传统的有限状态机更有利于维护角色的行为。修枝(Shoulson et al. ,2011)支持通过参数规范灵活生成行为树。虚幻引擎4提供了一个可视化的编程工具蓝图,6这是广泛的用于游戏开发项目。它可以实现所有以前需要用C++编写的功能。类似工具广泛应用于其他行业。例如,aflak(Boussejraet al. ,2019)是一个天文数据的可视化编程工具。3. 流程图制作者为了帮助游戏设计师轻松地将他们的想法转换为可执行代码,我们提供了一个基于流程图的流程图制作器(如图所示)。①的人。它所使用的概念模型与游戏AI开发中的概念模型非常一致,从而大大降低了游戏AI开发的难度通过特殊的事件节点和定时器节点,以事件驱动的方式实现进程的异步操作,避免了游戏中的阻塞现象,Asyncflow也因此得名。我们的流程图中的节点分为四种类型的节点,即,正常节点,事件节点,定时器节点和控制节点。这些节点及其之间的线路的详细信息如下所示。3.1. 通常节点普通节点是Asyncflow流程图中使用最广泛的节点(如图2所示)。 2)的情况。它们的内容是一段代码表达式,可以起到两个作用。首先,它执行几个计算操作来确定随后运行的子节点(见图a)。 2)的情况。其次,它作为一个接口来控制游戏对象的行为(见图c)。2)的情况。游戏对象通常是指游戏中的一些特定对象或元素,如角色,武器和环境对象。正常节点的操作是独立的。如果一个节点中的这些变量的声明(见图2中的b)和使用(见图2中的d)仅限于当前流程图。节点中表达式的语法类似于Lua, 但是流程图制作者执行严格的类型检查,并最终生成Asyncflow支持的编程语言的函数代码。3.2. 线有向线用于指示节点操作的顺序以及阐明节点的操作条件。三种类型的线由红色、绿色和蓝色区分。流程图中的普通节点在运行后返回布尔结果。如果结果为True,则运行由绿线连接的节点;否则,6 https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/蓝图/.·Z. Hu,C.范角,澳-地Zheng等人视觉信息学5(2021)2022Fig. 1. 流程图制作器的界面。主区域用于绘制流程图。左侧用于显示Asyncflow提供的节点类型,左下角列出了可以在流程图制作器中使用的游戏类型。底部是输出栏,用于显示输出信息。 右侧用于显示和编辑节点的一些数据信息图二. 正常节点的示例。(a)游戏函数调用。(b)变量的声明。(c)游戏对象的行为(d)变量的使用将运行由红线连接的节点;无论结果如何,由蓝线连接的节点将继续运行。数量连接到每个节点和从每个节点连接的线路的数量没有限制。 如果一个节点有多个后继节点,那么满足条件的节点将从左到右运行。这个过程发生在游戏框架内。因此,从宏观的角度来看,这些节点可以被视为并发执行。3.3. 事件节点事件节点是流程图提供的特殊节点。事件节点用于实现游戏中的持续性动作基于轮询的解决方案是在游戏的每一帧中检查游戏对象的状态(参见图3中的a),然后在满足条件时执行后续代码。在Asyncflow中,在流程图中使用事件节点可以清楚地实现这些要求(参见图b)。3)。当流程图运行到某个事件节点时,该节点进入等待状态,然后继续运行其他正常节点。一旦指定的游戏对象生成相应类型的事件,事件节点就被激活,然后向下运行,这比每帧中的许多检查和判断更有效。Asyncflow中的事件类型可以由用户自由定义,每个事件包括一个名称和任意数量的参数。这些参数可用于传输某些状态图三. 基于轮询的(a)和基于事件的(b)事件节点解决方案之间的比较。事件发生时的信息,并且它们可以在事件节点的后续节点中获得和使用3.4. Timer节点定时器节点只需要设置一个参数,即定时器的等待时间。与事件节点类似,当定时器节点被执行时,它进入等待状态。只有当等待时间过去后,它才重新激活并继续运行后续节点。当定时器节点和事件节点运行时,它们切换到其他正常节点继续运行。直到他们的运行结束,Asyncflow将返回并运行他们的后续节点。这种行为与异步编程的概念非常相似。因此,它在Asyncflow中被称为异步节点,并通过不同的颜色与正常节点区分开来。3.5. 控制节点Asyncflow还提供了几个更改流程图运行流的节点控制节点可以进一步分为:StopNode可用于取消处于等待状态的异步节点。·Z. Hu,C.范角,澳-地Zheng等人视觉信息学5(2021)2023WaitAll节点在其所有父节点运行后继续运行。WaitAny如果至少有一个父节点正在运行,则节点将继续运行;如果有多个父节点正在运行,则只运行一次。这些节点使流程图的流程更加灵活,并允许更容易地实现复杂的游戏逻辑。3.6. 布局通常,在绘制流程图时,通过拖动组件手动放置节点的位置当流程图包 含许多节点时, 这种手 动操作将是费力 的。基于Sugiyama方法(Sugiyama et al. ,1981)通常为了美观要求从左到右排列节点,导致对修改的低鲁棒性。Asyncflow采用全局手动布局和局部自动布局相结合的方式解决布局困难。用户可以将多个节点组合成一个组,并且可以将其中的节点设置为自动布局。用户可以灵活调整组和其他节点的位置4. Asyncflow运行时Asyncflow被设计为独立于游戏引擎。因此,它可以用于不同引擎开发的游戏。这一目标是通过C++编写的运行时框架实现的,并导出到Lua,Python或C#。Asyncflow还提供生成器来将流程图转换为上述编程语言。它们可以由嵌入在游戏引擎中的相应运行时执行。因此,流程图可以迁移到不同的游戏开发不同的引擎。 例如,流程图为个人电脑(PC)游戏正义在线7de-由自定义游戏引擎提供,可用于由Unity引擎开发的移动版本。大大提高了游戏开发的效率。Asyncflow以非侵入性的方式控制游戏对象,无需修改游戏对象的代码。Asyncflow运行时提供了Agent、Chart、ChartData等类,Agent是Asyncflow中游戏对象的代理。流程图将被转换为Chart实例,并附加到Agent对象以控制其行为。所有这些都是由经理管理(如图所示)。4),其中包含以下模块:AgentManager管理Agent和游戏对象之间的关系。代理包括事件节点、它们等待的计时器和它们加载的图表EventManager管理事件队列和游戏中的所有事件信息。ChartDataManager管理ChartData,它是通过解析制作者制作的流程图获得的信息。• TimerManager调度所有Agent的计时器。• Executor管理运行流程图的执行。4.1. 代理和AgentManager当每个游戏对象在Asyncflow运行时中注册时,生成相应的Agent游戏开发者在对游戏对象进行流程图相关操作时,并不修改游戏对象,所有操作都在Agent上进行,实现了流程图与游戏的解耦。7 https://n.163.com网站。见图4。 Asyncflow Manager的框架。4.2. Chart、ChartData和ChartDataManager运 行 时 读 取 流 程 图 后 , ChartData- Manager 生 成 相 应 的ChartData.在将流程图附加到游戏对象时,通过流程图的名称获取ChartData,然后创建并添加Chart发送到与游戏对象对应的Agent。在Asyncflow中,多个流程图可以安装在游戏对象上,并且这些流程图共同控制游戏对象的行为。将多个对象附加到同一流程图也是可能的。因此,他们将有相同的行为。4.3. Timer和TimerManagerAsyncflow运行时维护了一个定时器系统,每当执行该定时器节点时,都会将该定时器节点添加到TimerManager中。代理的图表可以包含多个计时器。TimerManager中的时间并不使用真实世界的时钟,而是由游戏提前。这样,当TimerManager的进度快于实时变化时,它可以加快操作速度。这种设计对于游戏测试非常有用。4.4. 事件、事件队列和EventManagerAsyncflow运行时框架采用基于事件的异步模式来管理节点的操作所有事件信息和处理都由EventManager管理。当事件节点运行时,它将被添加到它的代理对应于事件。当一个事件在游戏中发生时,它被放置在事件队列中。在每个帧中,EventManager将当前事件队列中的事件通知给相应的Agent。事件队列中维护两个事件队列。一个是当前正在处理的事件,另一个是保存和处理中新生成的事件这些事件将在下一帧中处理。这种设置可以避免在事件处理过程中不断产生新事件而导致运行时无限循环,从而导致游戏冻结。·····Z. Hu,C.范角,澳-地Zheng等人视觉信息学5(2021)2024表1四种可视化编程工具的使用比较工具↓\性能→支持的引擎支持的语言异步节点Asyncflow跨平台Lua,C#,Python语言Blueprints Unreal C++预览Behaviac跨平台C++,C#编程行为设计器Unity C#图五、运 行 时 框架 的 节点运行流程。4.5. 执行人流程图节点的执行在Executor中完成,运行框架如图所示。五、游戏对象的Agent注册后,整个流程由事件驱动。计时器管理器在每一帧中引发滴答事件,游戏对象触发流程图中的游戏事件。这些事件将被添加到事件队列中。Agent将事件队列中事件对应的节点添加到等待节点中,并由Executor执行。定时器管理器可以直接将满足条件的定时器节点发送给执行器执行。然后,Executor深度递归遍历并运行节点的后代。Executor确保每个节点在一个正在运行的进程中只执行一次,以防止流程图的流程陷入无限循环。当尝试重复执行一个节点时,Executor会将其添加到Tick事件的等待队列中。4.6. 远程调试异步流提供了远程调试功能。流程图制作者可以连接到游戏以查看流程图的操作。图6示出了游戏Justice Online的地下城在运行时的调试。运行库包含一个调试服务器,它监视本地网络端口以向外部世界提供调试服务。当流程图制作器连接到该端口后,流程图制作器的调试模块可以发送多个调试命令并接收流程图运行的状态信息。流程图制作者收到运行数据后,直接显示流程图的节点状态、运行次数等信息,方便游戏设计者在流程图运行过程中定位问题5. 实验表1显示了不同可视化编程工具之间的使用比较。其中,Blueprints和Unity Behav- ior Designer只能在特定的游戏引擎上使用。Asyncflow和Behaviac都支持跨平台的游戏AI开发,但与仅支持 C++ 和 C# 的 Behaviac 相 比 , Asyncflow 支 持 更 多 的 语 言 。Blueprints、Behaviac和Asyncflow都有异步机制的异步节点。但是Blueprints需要单独编写异步逻辑,Behaviac会在每一帧中检查等待节点的状态,而Asyncflow只需要使用定时器节点和事件节点,Asyncflow运行时会自动管理所有为 了 验 证 Asyncflow 的 运 行 效 率 , 将 其 与 Behaviac 和 UnityBehavior Designer在不同节点大小的流程图中进行了比较。我们的实验环境是一台个人电脑与英特尔酷睿i7-10700 CPU和32 GB的内存。图7示出了顺序地执行节点所花费的时间与节点的规模线性相关 Asyncflow 的 性 能 略 高 于 Behaviac , 显 著 高 于 Unity BehaviorDesigner。一般游戏中帧间隔的耗时要求为16 ms,而Asyncflow运行10000节点规模流程图所需的时间仅为0.3 ms,完全可以满足游戏的性能要求。在这个实验中,Asyncflow使用Lua语言,在编码期 间 比 使 用 C++ 语 言 的 Behaviac 和 使 用 C# 的 Unity BehaviorDesigner在正常情况下,Lua的运行性能低于C++。但是,由于Behaviac中有选择器、序列和节点装饰器等功能节点,因此节点的执行将花费一些额外的时间。Asyncflow使用最简单的调度逻辑。这使我们能够弥合Lua和C++之间的性能差距,同时提高易用性。6. 结论和今后的工作本文介绍了一种用于游戏AI开发的可视化编程工具Asyncflow。Asyncflow使用由不同类型的节点组成的流程图来描述独特的游戏AI和游戏玩法。流程图中的操作可以基于事件驱动的运行时框架异步运行。此外,Asyncflow中的调试模块允许用户轻松检查游戏中流程图的运行状态。综上所述,Asyncflow有效地降低了游戏开发的难度。目前,Asyncflow已经迭代了两个主要版本,其中稳定版本已经在多个游戏开发过程中使用,例如Justice Online。 超过10,000个流程图在游戏服务器和客户端中运行。未来,我们将提供更多类型的节点,并将更多结构,如随机选择子分支和开关案例集成到可扩展的内置模板中。即将到来的版本将允许游戏设计者通过在相应的模板中填充参数来实现复杂的功能。我们还计划将Asyncflow应用于其他领域,如金融,自动化生产和ERP。Z. Hu,C.范角,澳-地Zheng等人视觉信息学5(2021)2025图六、 远程调试在游戏正义在线。见图7。 三种工具的性能比较。CRediT作者贡献声明胡志鹏:概念化,方法论,写作初稿. 范昌杰:监制、编审.Qiwei Zheng:调查,软件。吴伟:可视化,验证。白柳:资源,形式分析。竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作伦理批准本研究不涉及人类受试者。研究中使用的所有数据都来自过去发布的公共数据库引用Bolte,F.,Bruckner,S.,2020.可视化源代码演化的可视化探索。IEEE Trans.目视Comput. Graphics-遗漏广西快乐Boussejra , M.O. , 内 木 河 竹 岛 , Y. , Matsubayashi , K. , Takekawa , S. ,Uemura,M.,富士岛2019. aflak:可视化编程环境,支持端到端的起源管理,用于分析天文数据集。目视告知。3(1),1卡莱尔,MC,威尔逊,T.A.,汉弗莱斯,J.W.,Hadfield,S.M.,2004. Raptor:用流程图向非专业人士介绍编程。J.计算机Sci. Coll.19(4),52-60.Charntaweekhun,K.,Wangsiripitak,S.,2006.使用流程图进行可视化编程。2006年:通信与信息技术国际研讨会。IEEE,第1062-1065.德罗索斯岛Barik,T.,Guo,P.J.,DeLine,R.,Gulwani,S.,2020. Wrex:一个统一的示例编程交互,用于为数据科学家合成可读代码。2020 CHI Conferenceon Human Factors in Computing Systems会议论文集pp. 1-12号。Ellson,J.,Gansner,E.,Koutsofios湖,南卡罗来纳州北部,Woodhull,G.,2001. Graphviz-开源图形绘制工具。在:国际图形绘制研讨会。施普林格,pp.483-484.Girault,A.,李,B.,李,E.A.,1999.具有多个并发模型的层次有限状态机。IEEETrans. Comput.-辅助设计积分CircuitsSyst. 18(6),742-760.Gotz,D.,Stavropoulos,H.,2014.决策流:高维时间事件序列数据的可视化分析.IEEE Trans. Vis. Comput. Graphics20(12),1783-1792.Guo,S.,徐,K.,赵,R.,Gotz,D.,扎,H.,曹,N.,2017. Eventthread:事件序列数据的可视化摘要 和阶段分析。IEEE Trans. Vis. Comput. Graphics 24(1),56-65.Kahng,M.,安德鲁斯,P.Y.,Kalro,A.,Chau,D.H.,2017. Activis:行业规模深 度 神 经 网 络 模 型 的 可 视 化 探 索 。 IEEE Trans. Vis. Comput. Graphics 24(1),88-97.皮尔森,M.,Knight,B.,奈特,D.,Quintana,M.,2020.电力自动化介绍。在:Pro Microsoft Power Platform中。施普林格,pp.73比78Resnick,M.,Maloney,J.,Monroy-Hernández,A.,Rusk,N.,Eastmond,E.,布伦南,K.,Millner,A.,Rosenbaum,E.,Silver,J.,Silverman,B.,例如,2009. Scratch:Programming for All。Commun. ACM 52(11),60Sekhavat,Y.A.,2017.计算机游戏的行为树。Int. J. Artif.内特尔工具26(02),1730001。Shoulson,A.,加西亚,F.M.,琼斯,M.,米德河,Badler,N.I. 2011.参数化行为树。在:国际会议在游戏中的运动。施普林格,pp. 144-155。杉山,K. Tagawa,S.,户田,M.,1981.层次系统结构的视觉理解方法。IEEE Trans.Syst. Man Cybern. 11(2),109-125。瓦格纳,F.,2006年。 用有限状态机建模软件:一个实用的Approach.奥尔巴赫出版社。Wongsuphasawat,K.,Smilkov,D.,Wexler,J.,威尔逊 ,J.,Mane,D.,Fritz , D. , Krishnan , D. , Viégas , F. B. , Wattenberg , M. , 2018. 在tensorflow中可视化深度学习模型的图。IEEE Trans. Vis. Comput. Graphics 24(1),1-12.Wood,J.,Kachkaev,A.,戴克斯,J.,2018.设计展示与文学形象化。IEEE Trans.目视Comput. Graphics 25(1),759袁,Z.,潘,H.,张,L.,2008.一种新颖的笔式程序设计教学流程图识别系统。在:混合学习研讨会。施普林格,pp. 55比64
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功