基于AI IDE 打造快速化的游戏LUA脚本的生成系统

        前面写了一篇关于使用AI IDE进行C++安全开发的博客《使用AI IDE 助力 C++ 高性能安全开发!》, 得到许多同学们的喜欢,今天我们来继续在游戏开发中扩展一下AI的能力,看看能不能给游戏研发团队一些启发。

        在游戏研发中,Lua曾经扮演着一个极其重要的角色,不管是在基于C++的服务端扩展其灵活性,还是在游戏引擎和框架中作为底层语言封装后的主要业务开发语言,Lua都具备高效灵活和简单易上手的优点。比如著名的游戏服务器框架Skynet和游戏引擎框架cocos2d-x-lua,都受到了许多研发团队的追捧。

        曾经、LUA也作为游戏行业策划人员的必备技能,通过LUA脚本来编写任务、技能也经常是相关策划的主要工作、而在这个过程中,大量繁琐的测试和修改,也经常令策划人员感到崩溃。

        本节我们将以InsCode AI IDE为例,打造一个策划人员的实用脚本生成流程,帮助策划人员从这种繁琐中解放出来。

一、安装与环境配置 

        首先,我们先去官网下载 二进制lua,这里我下载了5.2.4版本的LUA二进制库和头文件。

       下载后,解压出来,文件夹名称更换为lua-5.4.2。

       然后 下载安装 InsCode AI IDE | InsCode AI IDE ,进入欢迎页后单击右边侧栏的“扩展”,在弹出的插件商店里输入关键字"C",就可以看到许多的插件支持,其中华为云有提供“Cpp Project Wizard”,下载安装一下,方便我们快速的创建C++工程。

       安装好后,点击创建C/C++工程,在弹出的“新建工程”配置对话框中填写相关信息,创建一个C++工程。

       创建好之后,我们配置一下编译命令,点击右上角的配置栏里的“编辑”,在弹出的运行/配置对话框中,点击“+”号增加一个JAVASCRIPT调试终端,这里的JAVASCRIPT调试终端只是因为要选一个执行命令的选项罢了,跟JAVASCRIPT没什么关系哈。

       然后在Command里输入:

g++ ./main.cpp -o ./main.exe -L D:/lua-5.4.2 -llua54 -I D:/lua-5.4.2/include | ./main.exe 

       确定后,这样就可以在点击右上角的绿色三角按钮时对main.cpp进行编译并运行结果了,不过现在还没有用到LUA,我们在main.cpp里CTRL+A全选一下代码,然后再点CTRL+J,在弹出的对话框里输入:“增加一个通过LUA调用函数的实例”,然后点击“生成”。

       通过这种方式,我们可以只对当前main.cpp进行轻量化的修改,AI生成完成后,点击“全部接受”,这时就可以看到LUA相关的代码了。

        不过编译运行后,并没有什么反应,这是因为当前文件夹缺少lua54.dll,我们将其从Lua的文件夹拷贝过来,再次编译运行,就可以看到运行后打印“Hello from Lua!”。

       这样我们第一步的工作就算完成了。

二、需求转脚本的实现 

       一般来说、在一个系统中使用LUA,主要的方法就是由高级程序员将一些功能处理封装成LUA可以调用的函数,然后整理这个函数列表和说明给到业务开发或策划人员,由他们在LUA中的特定函数中进行调用并编写逻辑,下面我们举例说明。

       我们假设现在已经有一堆函数和说明,比如在一个txt文档中、我随手写了一些LUA函数:

#创建函数
#创建玩家,参数为玩家id,x位置,y位置,返回值为成功或失败
Lua_CreatePlayer(id,x,y)
#创建怪物,参数为怪物id,x位置,y位置,返回值为成功或失败
Lua_CreateMonster(id,x,y)
#创建NPC,参数为怪物id,x位置,y位置,返回值为成功或失败
Lua_NPC(id,x,y)#掉落物品函数,x位置,y位置,物品id
Lua_DropObject(x,y,objectid)#加血,参数为type类型(0代表player,1代表monster,2代表npc),对应id,增加的值
Lua_AddHP(type,id,hp)#对话,参数为弹出对话的文字内容
Lua_Talk(text)#对话一个问题,并等待玩家返回结果,参数为弹出对话的文字内容,返回True或False代表玩家选择了“是”或“否”
Lua_Wait_Ask(text)#取得位置,参数为type类型(0代表player,1代表monster,2代表npc),对应id,返回x位置,y位置
Lua_GetPos(type,id)
#移动函数,参数为type类型(0代表player,1代表monster,2代表npc),对应id,目标x位置,y位置
Lua_MoveTo(type,id,x,y)
#在位置点附近随机移动函数,参数为type类型(0代表player,1代表monster,2代表npc),对应id,中心点x位置,y位置,radius移动半径
Lua_Rand_Walk(type,id,x,y,radius)#跟随函数,参数为type类型(0代表player,1代表monster,2代表npc),对应id,目标type类型,目标对应id
Lua_Follow(type,id,type2,id2)
#普通攻击函数,参数为type类型(0代表player,1代表monster,2代表npc),对应id,目标type类型,目标对应id
Lua_Attack(type1,id1,type2,id2)
#技能攻击函数,参数为type类型(0代表player,1代表monster,2代表npc),对应id,目标type类型,目标对应id,技能id
Lua_SkillAttack(type1,id1,type2,id2,skillid)

       有了这个函数列表,下面我们尝试为某id值为1012的NPC编写一个LUA脚本控制其逻辑,逻辑需求为下:“当玩家点击NPC时,会弹出对话问玩家:"你是否准备好去迎战恶龙?",玩家点击”是“后,NPC会掉落一个护身符,并给玩家加100滴血,然后会开始跟随玩家。”,我们可以将其放置到npc_1012.txt中作为npc的逻辑需求描述策划案。

      一般来说,NPC会有一个专门的脚本文件,并有一些特定的主动和被动函数供系统调用,策划的工作就是在这些函数中使用上述给定的Lua函数进行编写。

      比如上述需求,可能是在某id值为1012的lua文件 npc_1012.lua中编写,这个lua文件中已经有玩家点击NPC时响应的处理函数player_click_npc,我们的工具是在这个函数填写具体的逻辑。

       然后我在右点侧栏点击“AI”,使用“改写”模式,在对话框中加入:“修改npc_1012.lua,从文件Function.txt中读取函数注释及函数声明,按照对应npc_1012.txt的策划案在player_click_npc函数中实现相应的功能。”

       没错,AI很好的理解了策划案,并编写出了正确的LUA脚本。

function player_click_npc(player_id, npc_id)-- 弹出对话框询问玩家是否准备好迎战恶龙Lua_Talk("你是否准备好去迎战恶龙?")-- 等待玩家选择local result = Lua_Wait_Ask("你是否准备好去迎战恶龙?")if result == true then-- 玩家选择“是”,NPC掉落一个护身符local x, y = Lua_GetPos(2, npc_id)  -- 获取NPC当前位置Lua_DropObject(x, y, 1001)  -- 假设护身符的物品id为1001-- 给玩家加100滴血Lua_AddHP(0, player_id, 100)-- NPC开始跟随玩家Lua_Follow(2, npc_id, 0, player_id)end
end

       看着完成的函数,我只能用震惊来表达此时此刻的心情。

       因为,它意味着,我们稍做一些自动化的处理,就可以让AI为我们的策划案生成无数的技能、NPC逻辑、任务了。即便要修改,也只需要修改一下策划案,而不必再花费大量的脚本去看那些脚本代码了。

三、变革、就在今天

       本节我基于AI IDE,成功的实现了让AI从策划案到脚本,按照系统程序员给定的函数列表说明完成脚本的过程、虽然这只是小小的一步,但懂的自然懂。

       基于InsCode AI IDE的知识库服务、你可以从内部的WEB端文档,结合策划案,快速的打造出无限量的LUA脚本,从而再也不必花费大量的人力和精力让策划人员挠头掉发减寿。

        变革、就在今天!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows nacos安装配置

GitHub下载压缩包 解压目录(注意不要用中文路径) 在mysql先创建数据库nacos,再执行sql脚本 配置数据库 #*************** Config Module Related Configurations ***************# ### If use MySQL as datasource: ### Deprecated conf…

Redis 基本全局命令

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Redis 基本全局命令 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 KEYS EXISTS DEL…

qt QZipReader详解

1、概述 QZipReader 是 Qt 中用于从 .zip 文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录,并允许你解压缩单个或多个文件。通过 QZipReader,你可以以编程方式读取 .zip 文件中的内容,并提取它们到目标目录中。…

开发微信小程序的过程与心得

起因 作为家长,我近期参与了学校的护学岗工作。在这个过程中,我发现需要使用水印相机来记录护学活动,但市面上大多数水印相机应用都要求开通会员才能使用完整功能。作为一名程序员,我决定利用自己的技术背景,开发一个…

基于vue-popperjs的二次封装弹窗

前言&#xff1a; 基于vue-popperjs的二次封装代码 <template><!-- 1. :appendToBody"true"是否把位置加到body外层标签上饿了么UI和antD是true&#xff0c;iview和vuetifyjs是false2. trigger属性触发方式&#xff0c;常用hover悬浮触发、clickToOpen鼠标…

OpenAI 普及 ChatGPT,开通热线电话,近屿智能深耕AI培训

12月19日&#xff0c;在OpenAI直播活动的第10天&#xff0c;宣布允许用户通过电话或WhatsApp与ChatGPT进行交互。并在美国推出 ChatGPT 热线电话&#xff0c;用户拨打后可与 ChatGPT 进行语音对话。 这项服务的一个亮点在于它兼容各种类型的通信设备——不论是现代智能手机如iP…

黑马Java面试教程_P9_MySQL

系列博客目录 文章目录 系列博客目录前言1. 优化1.1 MySQL中&#xff0c;如何定位慢查询&#xff1f;面试文稿 1.2 面试官接着问&#xff1a;那这个SQL语句执行很慢,如何分析 ( 如何优化&#xff09;呢?面试文稿 1.3 了解过索引吗?(什么是索引)1.4 继续问 索引的底层数据结构…

Vue3+@antv/g2plot 生成词云图

antv/g2plot 是一个基于 AntV 的图表库属于antv库的一部分 用于快速创建各种类型的图表 支持折线图、柱状图、饼图、散点图等多种图表类型 antv/g2plot 属于antv库的一部分 g2plot是在g2基础上封装的 npm install antv/g2plot --save效果 所有值共享一个颜色并且每次刷新颜色随…

K线单边突破指标(附带源码)

编写需求&#xff1a; 今天我们来根据粉丝要求进行源码复现&#xff1a; 【请根据最近两根K线判断当下的行情做多&#xff0c;做空方向。用三个价格判断当前K线状态&#xff0c;最高价、最低价、收盘价都大于昨日对应价格&#xff0c;为上涨K线。用三个价格判断当前K线状态&a…

LabVIEW电机控制中的主动消抖

在LabVIEW电机控制系统中&#xff0c;抖动现象&#xff08;如控制信号波动或机械振动&#xff09;会影响系统的稳定性和精度。通过使用主动消抖算法&#xff0c;可以有效降低抖动&#xff0c;提高控制性能。本文将介绍几种主流的主动消抖算法&#xff0c;并结合具体应用案例进行…

【安全测试相关知识】

安全测试介绍 背景 在当前信息技术快速发展的背景下&#xff0c;网络安全问题日益严峻&#xff0c;数据泄露、黑客攻击、病毒传播等安全事件层出不穷&#xff0c;给个人、企业乃至国家带来严重威胁。所以安全测试已成为企业和国家关注的重心 作用 安全测试是确保软件系统安…

重温设计模式--工厂模式(简单、工厂、抽象)

文章目录 工厂模式定义工厂模式通常可以细分为以下几种类型1、简单工厂模式&#xff08;Simple Factory Pattern&#xff09;2、工厂方法模式&#xff08;Factory Method Pattern&#xff09;3、抽象工厂模式&#xff08;Abstract Factory Pattern) UML 图1、简单工厂模式UML2、…

SAP PP 后继物料触发条件

问题&#xff1a; 物料主数据 MRP4维护了后继物料&#xff0c;该物料库存为0&#xff0c;但是做生成订单时候&#xff0c;查看BOM没有显示未后续无力啊 原因 需要在生成订单中点击可用性检查&#xff0c;才能出发对库存校验&#xff0c;才能匹配到后继物料

联通光猫怎么自己改桥接模式?

环境&#xff1a; 联通光猫 ZXHN F677V9 硬件版本号 V9.0 软件版本号 V9.0.0P1T3 问题描述&#xff1a; 联通光猫怎么自己改桥接模式 家里用的是ZXHN F677V9 光猫&#xff0c;最近又搞了个软路由&#xff0c;想改桥接模式 解决方案&#xff1a; 1.拿到最新超级密码&…

商场消防电气控制系统设计(论文+源码)

1系统的功能及方案设计 如图2.1所示为本次设计的整体框图&#xff0c;其中单片机部分采用ST89C52来负责协调各个模块&#xff1b;液晶选择LCD1602液晶屏来显示信息;温度传感器选择PT1000进行温度的检测&#xff1b;烟雾传检测选择MQ2烟雾传感器&#xff1b;CO2检测选择CCS811模…

Springboot3声明式客户端

简介 Spring Framework 6 和 Spring Boot 3 引入了一些新的特性和改进&#xff0c;以简化 HTTP API 的消费。它允许开发者通过声明式接口来定义对外部 HTTP API 的调用。其中开发者只需要定义接口和方法签名&#xff0c;而具体的实现细节由框架自动生成。 这个特性通常被称为…

信贷域——互联网金融体系

摘要 本文介绍了互联网金融的概念、特征、发展阶段和生态。互联网金融是互联网与金融结合的新兴模式&#xff0c;以大数据、云计算为基础&#xff0c;实现资金融通和支付。发展经历了技术支持、业务领域深入到金融业务领域三个阶段。互联网金融生态包括互联网支付、P2P网络借贷…

精通Redis

目录 1.NoSQL 非关系型数据库 2.Redis 3.Redis的java客户端 4.Jedis 4.1Jedis快速入门 4.2Jedis连接池及使用 5.SpringDataRedis和RedisTemplate 6.SpringDataRedis快速入门 7.RedisSerializer 1.NoSQL 非关系型数据库 基础篇-02.初始Redis-认识NoSQL_哔哩哔哩_bilib…

LabVIEW水泵性能测试系统

在现代工业应用中&#xff0c;水泵作为一种广泛使用的流体输送设备&#xff0c;其性能的可靠性对整个生产系统的稳定运行至关重要。通过LabVIEW软件配合专业硬件设备&#xff0c;设计了一套水泵性能测试系统&#xff0c;实现对各类水泵的综合性能测试与分析&#xff0c;提升水泵…