001 联机坦克大战
作者:王世豪 | 最后修改:2026-06-10
重要提醒:
1、当你安装配置好智能体、规则和技能后,最终一定要参考验证智能体、规则和技能是否安装成功来验证安装配置是否正确;
2、Trae 中内置的免费大模型,会经常排队,并且性能不可控,容易出问题,所以推荐参考:001 发送会话请求时,提示排队,如何解决?的方法,订阅收费的大模型(目前每月 40 元);这样可以大大提高 AI 性能;如果不想使用收费模型,在非正常工作时间段内,使用内置的免费模型也能勉强凑合;
3、选择收费大模型时,经过我们的实际测试,根据工作任务的不同,可以按照如下建议选择(仅供参考,具体情况还需要根据你自己的实际使用情况来定):
- 代码开发任务,优先选择 GLM(可能是使用的人数太多,有时候处理较慢);如果 GLM 处理太慢,再考虑切换到 MiniMax;
- 其他任务,可以首先选择 ark-code-latest,其次选择 MiniMax,最后选择 GLM(可能是使用的人数太多,有时候处理较慢);
一、准备硬件环境
- WIN10 以及 WIN10 以上的 Windows 操作系统电脑一台
- 合宙引擎主机 8000W 一块 或者 合宙引擎主机 1602 一块 + type-c 接口 usb 数据线一根;这一步的环境不是必须的,如果没有这个环境,可以直接在模拟器上开发调试 app;
二、准备软件环境
2.1 代码仓库
合宙引擎主机的项目代码在 LuatOS 仓库的 master 分支;
点击这里可以通过网络浏览器打开 LuatOS 代码仓库的 master 分支;
在这个代码分支中,以下三项内容和本项目直接相关:
- 合宙引擎主机 8000W/1602 的默认出厂软件源码
- 支持开机欢迎界面、待机界面、主菜单界面
- 支持 WiFi 设置,系统设置,应用市场,网络测速功能
- 如果把 合宙引擎主机比作一个手机,这里的 factory 就相当于是手机出厂自带的默认软件功能
2、 app_engine/app_store/vertical_app
- 所有可以在 竖屏分辨率的合宙引擎主机项目上运行的 app,例如 airplane_battle(飞机大战)、game_2048(2048 游戏)、luatos_competition(LuatOS 知识竞赛),等等等等;
- 这里的每个 app,不是默认出厂软件支持的功能;而是通过默认出厂软件中的应用市场,下载安装后,才可以在模拟器 或者 合宙引擎主机上运行;
- 如果把 合宙引擎主机比作一个手机,这里的每个 app 就相当于手机通过应用商店下载安装的每一个应用;
- 本文所描述的内容,最重要的一个目标就是:根据自己的 app 需求,开发调试 app 代码,调试通过后,把代码提交到 web 端应用市场以及 LuatOS 仓库的这个 vertical_app 目录下
3、 LuatOS/script/libs:LuatOS 扩展库,和 引擎主机的默认出出厂软件源码 一起在模拟器上运行或者烧录到 合宙引擎主机上运行;
具体到本项目,软件代码架构如下图所示,黄色背景的你将要开发的某个 app,就是参照本文所描述的内容,你要开发完成的某一个 app

2.2 模拟器
在本小节,使用 LuatOS 模拟器 + LuatOS 代码,可以正常运行起来一个 UI 项目就算达标;
2.3 AI 工具
AI 工具有很多种,有 Trae,Copilot 等等,每一种 AI 工具都可以配置不同的大模型,我们并不限制你使用哪一种 AI 工具;
各种 AI 工具使用的基本思路都是相同的,在本文,我们仅仅基于 Trae 这种 AI 工具来介绍,如果你使用其他 AI 工具,遇到不懂的问题,可以自行解决;
参考 Trae 的安装和智能体概念理解 和 安装 luatos-docs-code 智能体、规则和技能 安装好 Trae,配置 luatos-docs-code 智能体,配置项目规则和技能;其中:在 Trae 的安装和智能体概念理解第三章节中,不用再新建项目,直接打开自己电脑上的 LuatOS-develop 目录即可;
Trae 的配置使用有以下三点特别重要:
1、当你安装配置好智能体、规则和技能后,最终一定要参考验证智能体、规则和技能是否安装成功来验证安装配置是否正确;
2、Trae 中内置的免费大模型,会经常排队,并且性能不可控,容易出问题,所以推荐参考:001 发送会话请求时,提示排队,如何解决?的方法,订阅收费的大模型(目前每月 40 元);这样可以大大提高 AI 性能;如果不想使用收费模型,在非正常工作时间段内,使用内置的免费模型也能勉强凑合;
3、选择收费大模型时,经过我们的实际测试,根据工作任务的不同,可以按照如下建议选择(仅供参考,具体情况还需要根据你自己的实际使用情况来定):
- 代码开发任务,优先选择 GLM(可能是使用的人数太多,有时候处理较慢);如果 GLM 处理太慢,再考虑切换到 MiniMax;
- 其他任务,可以首先选择 ark-code-latest,其次选择 MiniMax,最后选择 GLM(可能是使用的人数太多,有时候处理较慢);
三、根据 app 需求,借助 AI 工具,生成 html 文件和图片等资源文件
3.1 第一轮交互(原始需求)
3.1.1 输入
设计一个双人联网坦克大战游戏,分辨率为800*480,输出可以交互的html页面
3.1.2 输出
等完全生成后,参考下图体验效果

3.2 第二轮交互(加上主菜单页面 )
3.2.1 输入
需要一个主菜单,不能直接进入游戏,主菜单背景图是坦克大战,然后有几个按钮,分别是单机对战,联网对战,积分排行榜,帮助,退出
3.2.2 输出

补充了背景图后的效果如下图所示:

3.3 第三轮交互(导出图片资源文件)
3.3.1 输入
在 html 效果图中加一个导出图片的按钮,点击后可以导出压缩包文件。
3.3.2 输出

3.4 总结
这个阶段,主要就是根据需求,不断的和 AI 交互,生成 html;
你自己的实际 app,根据自己的规划以及实际运行的效果,可能需要调整多次才行;
按照同样的交互思路,进行多轮交互即可,直到生成的 html 界面和交互逻辑可以满足你的需求;
最后再导出来用到的所有图片资源;
具体到本项目,最终输出了 tank_battle.html 和 坦克大战图形元素.zip 两个文件;
我们在接下来的编码环节会用到这两个文件;
四、根据 html 文件 + 图片等资源文件 + 代码仓库,让 AI 工具生成 app 代码
4.1 文件创建
首先我们在 LuatOS\app_engine\app_store\vertical_app 下创建一个 tank_battle 目录;
然后在 tank_battle 目录下创建 res,user,libs 目录;
把上面生成的 html 和图片文件复制过来,完成这几步后,如下图所示:

4.2 第一次自动生成 app 代码
在 Trae 的会话窗口输入以下内容(LuatOS 路径需要根据你自己电脑上的实际路径来修改),并且发送:
1、参考:E:\LuatOS\app_engine\app_store\vertical_app\tank_battle\tank_battle.html 中的 UI 界面和交互逻辑,在 tank_battle 中生成 LuatOS 代码 2、代码文件格式以及内容参考 E:\LuatOS\app_engine\app_store\vertical_app\下的其他目录,包含 main.lua,meta.json,tank_battle\user 目录下存储具体 UI 和业务功能的 lua 代码文件 3、代码中需要的图片资源在 tank_battle\res 目录下,代码中用到的图片资源,使用\luadb\xxx.png 的路径方式 4、参考联机火柴人格斗代码:E:\LuatOS\app_engine\app_store\vertical_app\StickFighter_Online,联网数传部分参考联网火柴人格斗的 network.lua
然后 luatos-docs-code-10 3 智能体就开始工作了,几分钟之后,生成了第一份代码,思考输出的过程如下图所示:


依次选择文件,点击保留按钮。
4.3 生成应用图标
网上找个坦克图标,设置为 32*32 像素,改名为 icon.png,放置 E:\LuatOS\app_engine\app_store\vertical_app\tank_battle\ 下,作为应用图标。
五、在模拟上运行 app,根据运行结果,让 Trae 不断的调试代码,直到运行通过
5.1 将 app_store 目录复制到 LuatOS 模拟器所在的目录
过程不再赘述,参考本文档 7.1 章节
5.2 使用 cmd 命令行 +LuatOS 模拟器运行:LuatOS 扩展库代码 + 合宙引擎主机默认出厂软件代码
过程不再赘述,参考本文档 7.2 章节
5.3 修复问题:打开应用黑屏
5.3.1 第一轮修复
输入:
打开应用黑屏
输出:

修复后效果图:

可以发现页面正常显示了,但是点击单机对战,以及联网对战,没有显示对战画面。
5.4 修复问题:对战画面未显示
5.4.1 第一轮修复
输入:
点击单机对战和联网对战按钮,坦克大战的对战画面未正常显示
输出:

效果:

可以发现页面正常显示了,但是上,下,左,右有问题,测试发现一个规律,把规律告诉 AI,让 AI 修复
5.5 修复问题:游戏对战存在问题
注意: 由于 Trae 的免费额度和收费额度均已耗尽,故后续借助 AI 的修复过程将使用 codebuddy 进行。 大家在切换工具的时候,注意把 rules 和 skills 复制到新的工具。
5.5.1 第一轮修复
输入:
上,下,左,右移动有问题; 假设有个田字格, 点击左,会位移到左上的田字格; 点击右,会位移到右下的田字格; 点击上,会位移到右上的田字格; 点击下,会位移到左下的田字格. 我的需求是: 短按上,下,左,右,如果朝向变化,则原地更换朝向即可;如果朝向没变化,短按就是走半格; 短按上,下,左,右,则是持续行走。
经过多轮测试,使用 airui.image 旋转图像,始终无法做到原地旋转的完美效果,于是放弃图片样式的坦克,让 AI 绘制坦克图像。 此外不使用图片文件还可以节省资源空间。
5.5.2 第二轮修复
输入:
坦克不再使用图片文件,直接绘制坦克图像
输出:

结果:

此时发现整体页面正常显示了,接下来优化下布局和画面细节。
5.6 修复问题:优化画面细节
5.6.1 第一轮修复
输入:
做以下优化: 1、砖块之间加上砂浆线分隔,模拟真实的砖墙。 2、状态栏显示部分,把"游戏中","本局积分" 删除 3、状态栏显示部分,需要四个玩家状态显示,分别是 P1,P2,P3,P4; 其中 P3 用黄色,P4 用红色;对应战斗区域也需要增加两个坦克,坦克颜色也需要改色。 4、游戏区域上边界,和黑色状态栏有部分重叠,需要调整游戏区域大小,调整过程切记注意游戏区域的比例,不可单纯的缩小高度,需要保持游戏区域方块是正方形。
输出:

结果:

此时整个画面已经达到了我的预期,接下来开始测试对战细节,发现对战规则存在一些问题,继续和 AI 交互优化。
5.7 修复问题:优化对战规则
5.7.1 第一轮修复
输入:
优化对战规则: 1、坦克重生后,有 3s 的无敌时间,此时周围用透明的白色圆形保护罩包裹 2、人机模式下,另外 3 个坦克,不要一直追着 P1 玩家打,要相互攻击
输出:

测试发现保护罩是纯色,无法改成透明色。
5.7.2 第二轮修复
输入:
保护罩是纯色,挡住了坦克
输出:

这次测试保护罩样式没问题了,但是偶然发现一个 bug,重生点被其他坦克占据,此时两个坦克会凑巧重合在一块,因为坦克设置了不可穿越的属性,所以两个坦克此时卡住了。
5.8 修复问题:坦克重合 BUG
5.8.1 第一轮修复
输入:
重生点被其他坦克占据,此时两个坦克会凑巧重合在一块,因为坦克设置了不可穿越的属性,所以两个坦克此时卡住了
输出:

进行到这里,坦克大战的游戏界面,单机对战功能已经全部完成了,接下来加上联网对战功能。
5.9 修复问题:增加联网对战功能
5.9.1 第一轮修复
输入:
参考联机火柴人格斗代码,联网数传部分参考联网火柴人格斗的 network.lua,实现联网对战以及积分的功能 注意:坦克大战和联机火柴人对战机制不同,坦克大战是房间制,匹配对战,最多可供 4 人对战,每个人会有一个已准备按钮,点击后画面会显示已准备,都准备好后,即可由房主开始游戏。(大于等于 2 人即可开始游戏)
输出:

结果:

实际测试各项功能,发现页面有一些问题,先修复页面显示,再继续测试功能。
5.9.2 第二轮修复
输入:
1、创建房间后,把准备,开始游戏,离开房间三个按钮并排放置,要不然超出屏幕了 2、加入房间,在确认加入后面,添加一个取消按钮,另外加入房间的弹窗高度不够,导致出现了滑动效果,不需要滑动,增加窗口高度。
输出:

结果:


页面测试没问题了,接下来测试联网对战功能,发现无法搜索到对手,继续修复
5.9.3 第三轮修复
输入:
快速匹配无法搜索到对手
输出:

测试没问题,不过匹配过程没有倒计时提醒,匹配成功后也不显示对手昵称,继续优化。
5.9.4 第四轮修复
输入:
快速匹配超时多久,弹窗提示倒计时吧 另外快速匹配到对手后,要显示对手的 IOT 昵称,然后再开始游戏,比如匹配到后 提示您的对手是:
输出:

结果:

接下来测试联网对战功能,快速匹配,创建房间开始对局 功能都正常,但是 P1 移动,P2 屏幕上的 P1 并未同步,需要继续借助 AI 修复。
5.9.5 第五轮修复
输入:
两人对战,P1 动,P2 的屏幕上的 P1 坦克也需要变化
输出:

测试出现死机问题,继续修复
5.9.6 第六轮修复
输入:
E/airui.event callback error: /app_store/Tank_Battle_Hor/user/tank_battle_win.lua:2554: attempt to call a nil value (global 'sendInputMessage')
输出:

再次运行没问题了,但是排行榜显示有问题,让 AI 参考联机火柴人的代码继续修复。
5.9.7 第七轮修复
输入:
1、排行榜弹窗要占满全屏,居中显示 2、排行榜标题需要显示积分排行榜,标题前面加上这个奖杯图标 ranking_list.png 3、和火柴人一样,需要 3 个按钮,刷新,删除我的积分,返回
输出:

到这里测试没问题后,坦克大战的应用已经完成,接下来就可以进行实机测试了,模拟器测试没问题,实机测试一般也不会有太大的问题,可能会存在一些小问题,借助 AI 修复即可。
六、基本功能测试说明
- app 内部有
退出按钮,可以点击返回到主菜单窗口;app 退出后,在主菜单窗口,再次点击,可以再次正常进入 app; - app 内部的基本业务逻辑和 UI 界面都正常
- 退出 app 后,app 内部的业务逻辑也要停止,不要在后台运行;如果自己的 app 内部有运行日志,可以通过日志判断是否在后台运行;
七、UI 分辨率自适应说明
1、“坦克对战”app 的 UI 界面,目前基于横屏 480*800 分辨率设计;
2、合宙有多款不同 lcd 分辨率的竖屏引擎主机,例如 Air8000W 引擎主机的 lcd 分辨率为 320480,Air1602 引擎主机的 lcd 分辨率为 7201280,后续可能还有其他型号的引擎主机,所以取个靠近中间的分辨率 480*800 作为"app 基准分辨率";
3、合宙引擎主机的默认出厂软件,可以根据“app 基准分辨率”,自适应为引擎主机硬件的 lcd 分辨率,这个自适应过程是自动完成的,不需要你的 app 做特殊处理;
4、也就是说,虽然 app 只是基于了某一种分辨率来设计,但是从理论上说,app 可以自动地在不同分辨率的引擎主机和模拟器上自适应运行;
5、虽然引擎主机的出厂软件支持自适应分辨率功能,不需要 app 内部再设计自适应;但是也不禁止你在 app 内部设计自适应分辨率功能,如果你在 app 内部设计了自适应分辨率功能,在 app 内的 meta.json 文件中,将 display_zoom 字段填写为 adaptive 即可;如果没有设计自适应分辨率功能,要在 app 内的 meta.json 文件中,将 display_zoom 字段填写为 fixed_resolution,否则就会出现 6.4 章节中我遇到的没有全屏显示的问题;
八、打包 app,在应用市场上架
此处不再赘述,参考 001 智能售货机 第九章节 即可
九、在模拟器上,通过应用市场,下载安装 app,运行验证 app
此处不再赘述,参考 001 智能售货机 第十章节 即可
十、在 合宙引擎主机上,通过应用市场,下载安装 app,运行验证 app
此处不再赘述,参考 001 智能售货机 第十一章节 即可