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

news2024/12/26 8:42:15

        前面写了一篇关于使用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.coloradmin.cn/o/2265754.html

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

相关文章

系统思考VS过度管理

业绩没起来,领导者最容易做的就是抓管理。这样的“抓管理”真的有效吗?当业务还没起飞的时候,过度管理其实是一种伤害。就像一条呼啸而过的鞭子,看起来让团队更“整齐”,但实际上可能打散了协作的节奏。管理的本质是支…

IT运维的365天--021 服务器上的dns设置后不起作用

之前在内网搭建了一个和外网同域名的网站,开发同事今天告诉我,程序调试发现可能服务器不能正常访问自己内网的网站内容。于是,今天的故事开始了。 前面的文章在下面列出,当然不看也问题不大,今天的主题是:…

机器人C++开源库The Robotics Library (RL)使用手册(二)

由于RL库采用跨平台CMake源码,可以轻松在win、ubantu等平台部署、编译,win通常用VS编译器,为了便于使用、阅读,需要将CMake编译成VS工程。 1、准备三个工具:CMake、VS、QT 为了在Windows上编译RL和依赖项,您需要安装一个编译器(例如。,Visual Studio 2017)和跨平台构…

ShaderJoy ——一种可交互的翻页效果【GLSL】

效果视频 Shader 特效——可与鼠标交互的翻页效果 效果图 完整代码 #define pi 3.14159265359 #define radius .1#iChannel0 "file://./images/Woolly_3.png" #iChannel1 "file://./images/Woolly_4.png"void mainImage( out vec4 fragColor, in vec2 fra…

oracle怎样使用logmnr恢复误删除的数据

如果有同事误删除数据了,可以用logmnr挖掘归档日志,生成回滚sql,快速恢复数据,比用整个库的备份恢复要快得多。 一 操作步骤 1.1 创建目录 su - oracle mkdir logmnr create directory logmnr_dir as /home/oracle/logmnr; …

LeetCode:3218. 切蛋糕的最小总开销 I(贪心 Java)

目录 3218. 切蛋糕的最小总开销 I 题目描述: 实现代码与解析: 贪心 原理思路: 3218. 切蛋糕的最小总开销 I 题目描述: 有一个 m x n 大小的矩形蛋糕,需要切成 1 x 1 的小块。 给你整数 m ,n 和两个数…

系统架构师考试 常错题记录 01

1.按照《中华人民共和国著作权法》的权利保护期( )受到永久保护。 A.发表权 B.修改权 C.复制权 D.发行权 正确答案:B 解析:本题考查知识产权法中的《中华人民共和著作权法》保护期限知识点。 《中华人民共和著作权法》中约定署名权…

实战分享:生产Java服务容器占用内存高问题排查与解决

总框架 一、问题描述 生产上有一个Java应用,在发版后一周内,容器内存指标缓慢上升,最终超过60%触发内存使用告警 二、思路&解决方案 1、日志占用容器内存 (1)排查JVM占用了多少内存 一般我们惯性思维默认是J…

OpenAI叩响AGI之门: 12天直播精华大放送

01.OpenAI新篇章: 12天直播精华放送 当地时间12月5日-20日,人工智能巨头OpenAI完成了连续12个工作日的12场直播,虽然周末短暂休息了两天,但圣诞节的技术盛宴依然引发了广泛关注。内容密集、干货充足,许多小伙伴们可能感到信息有点…

神经网络-AlexNet

AlexNet是在2012年的ImageNet竞赛后,整理发表的文章,也是对CNN网络的衍生。 网络结构 AlexNet网络结构如下图所示,网络分为了上下两部分,对应两个不同的GPU训练,可以更好的利用GPU算力。只有在特殊的网络层后&#x…

【Beats01】企业级日志分析系统ELK之Metricbeat与Heartbeat 监控

Beats 收集数据 Beats 是一个免费且开放的平台,集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器 和系统向 Logstash 或 Elasticsearch 发送数据。 虽然利用 logstash 就可以收集日志,功能强大,但由于 Logtash 是基于Java实现…

目标检测——基于yolov8和pyqt的螺栓松动检测系统

目录 1.项目克隆和环境配置1.1 我这里使用的是v8.0.6版本1.2 项目代码结构介绍 2.数据集介绍2.1 数据集采集2.2采集结果介绍 3.模型训练4.pyqt界面设计4.1 界面内容介绍4.2 界面实现 5.操作中的逻辑实现5.1 图片检测5.2 文件夹检测5.3 视频检测和摄像头检测 6. 效果展示 1.项目…

云边端架构的优势是什么?面临哪些挑战?

一、云边端架构的优势 降低网络延迟:在传统集中式架构中,数据需传输到云计算中心处理,导致网络延迟较高。而云边端架构将计算和存储推向边缘设备,可在离用户更近的地方处理数据,大大降低了网络延迟,提升了用…

微机接口课设——基于Proteus和8086的打地鼠设计(8255、8253、8259)

原理图设计 汇编代码 ; I/O 端口地址定义 IOY0 EQU 0600H IOY1 EQU 0640H IOY2 EQU 0680HMY8255_A EQU IOY000H*2 ; 8255 A 口端口地址 MY8255_B EQU IOY001H*2 ; 8255 B 口端口地址 MY8255_C EQU IOY002H*2 ; 8255 C 口端口地址 MY8255_MODE EQU IOY003H*2 ; …

Origin教程008:Origin绘制热图

文章目录 练习数据热图练习数据 https://download.csdn.net/download/WwLK123/90185283热图 使用拖拽的方式导入数据: 然后【单击】全选数据: 然后选择【绘图】->【等高线图】->【带标签热图】: 然后勾选【Y数据跨列】: 点击【确定

LabVIEW数字式气压计自动检定系统

开发了一个基于LabVIEW开发的数字式气压计自动检定系统。在自动化检定PTB220和PTB210系列数字气压计,通过优化硬件组成和软件设计,实现高效率和高准确度的检定工作,有效降低人力成本并提升操作准确性。 项目背景 随着自动气象站的广泛部署&a…

阿里云镜像服务使用指南

阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)是面向容器镜像、Helm Chart等符合OCI标准云原生制品安全托管及高效分发平台。ACR企业版支持全球同步加速、大规模和大镜像分发加速、多代码源构建加速等全链路加速能力,与容器服务A…

【Ambari】使用 Knox 进行 LDAP 身份认证

目录 一、knox介绍 二、Ambari配置LDAP认证 三、验证Knox网关 3.1YARNUI 3.2 HDFSUI 3.3 HDFS RestFULL 3.4 SparkHistoryserver 3.5 HBASEUI 一、knox介绍 Apache Knox网关是一个用于与Apache Hadoop部署的REST api和ui交互的应用程序网关。Knox网关为所有与Apache Ha…

Fiddler v5.0.2最新专业网络抓包工具简体中文版

前言 Fiddler抓包工具一个非常专业且已经翻译成中文的网络调试帮手。它就像一个超级监视器,能帮你看到电脑和互联网之间所有通过HTTP协议传输的信息。比如,当你在网上冲浪时,它可以记录下你和网站之间交换的所有“小纸条”,比如网…

我的 2024 年终总结

2024 年,我离开了待了两年的互联网公司,来到了一家聚焦教育机器人和激光切割机的公司,没错,是一家硬件公司,从未接触过的领域,但这还不是我今年最重要的里程碑事件 5 月份的时候,正式提出了离职…