资讯动态

动手实战:用 TorchCraftAI 构建你的第一个星际争霸 AI 自定义模块

发布时间:2026/8/17 18:41:37 来源:尧图企业网站定制
动手实战用 TorchCraftAI 构建你的第一个星际争霸 AI 自定义模块【免费下载链接】TorchCraftAIA platform that lets you build agents to learn to play StarCraft: Brood War.项目地址: https://gitcode.com/gh_mirrors/to/TorchCraftAI想亲手打造一个能玩《星际争霸母巢之战》的 AI 机器人吗TorchCraftAI 正是为此而生的开源平台它曾孵化出 SSCAIT 2017-18 赛季冠军机器人 CherryPi。本文将以星际争霸 AI 自定义模块为主题带你从零理解模块化架构并用最简代码写出第一个属于你自己的 AI 模块。无论你是刚接触 AI 编程的新手还是想快速上手的游戏开发者这篇星际争霸 AI 开发实战指南都能让你少走弯路。TorchCraftAI 是什么星际争霸 AI 开发的一站式平台TorchCraftAI 是一个让你构建智能体来游玩并学习游玩星际争霸的开源平台它把两件最麻烦的事情打包好了与游戏通信基于 BWAPI 与 TorchCraft 的客户端-服务器架构程序可以像人类玩家一样看到地图和单位并下发指令模块化框架把建造、采集、侦查、战斗等行为拆成独立模块像搭积木一样组装出完整 bot。它自带一整套强化学习环境支持迷你游戏minigame、模型与训练循环还支持 Linux、Windows 与 macOS。下图展示的是两个 TorchCraftAI bot 同场竞技的典型系统架构从图中可以看到每个Player实例包装一个独立的 TorchCraft 客户端各自控制一方的游戏进程——这正是训练对战型星际争霸 AI 的基础设施。官方架构说明见 docs/architecture.md。理解核心架构模块如何驱动星际争霸 AI在动手写代码前先认识四个关键概念它们构成了整个星际争霸 AI 的运转骨架详见 docs/core-abstractions.mdPlayer玩家主循环的驱动者每一帧接收游戏状态、逐个调用模块的step()再把指令发回游戏服务器State状态当前游戏快照通过TilesInfo、AreaInfo、UnitsInfo提供地图与单位信息Blackboard黑板模块之间共享的留言板模块在这里发布和消费动作意图Module模块一段封装好的行为逻辑例如资源采集建筑放置战斗微操每个模块都实现一个step()函数由 Player 在每帧调用。所有现成模块的列表与职责说明可以在 docs/modules.md 找到例如Gatherer负责资源采集、SquadCombat负责战斗、Scouting负责侦查。模块协作的秘密UPC 通信机制模块之间如何配合答案是UPCTuple统一动作原语。它是一种对单位、位置、命令三个维度的概率分布描述被模块逐级细化直到变成一条可执行的游戏指令。举个宏观管理的例子Strategy模块发布建造某种单位的 UPCBuildingPlacer把其中的位置细化到具体坐标Builder真正执行建造最终由UPCToCommand模块翻译成 TorchCraft 游戏命令。下图直观展示了这条UPC 流水线理解了这套机制你会发现写自定义模块其实就是消费别人发布的 UPC或发布更细化的 UPC。实战第一步编写你的第一个自定义模块现在进入正题。一个自定义模块的本质很简单继承Module基类src/module.h重写step()方法。基类接口如下class Module { public: virtual void step(State* s) {} // 每帧调用 virtual void onGameStart(State* s) {} // 游戏开始回调 virtual void onGameEnd(State* s) {} // 游戏结束回调 };比如我们想写一个开局把首个探机派去侦查的模块可以参考 src/modules/top.cpp 中TopModule的写法遍历己方单位构造 UPC 并发布到黑板。自定义模块也遵循同样的模式——在step()中读取状态、构造 UPC、board-postUPC(...)发布。所有模块通过REGISTER_SUBCLASS_0(Module, MyModule)宏注册进框架之后就能按名字被动态创建参考 src/module.cpp 中的Module::make(name)。更轻量的选择LambdaModule 与 OnceModule如果不想写完整的类TorchCraftAI 提供了两个偷懒神器LambdaModulesrc/modules/lambda.h把step()直接写成 lambda 表达式几行代码就是一个模块OnceModulesrc/modules/once.h每局游戏只执行一次指定函数非常适合开场生成单位设置初始条件这类一次性逻辑它还内置了makeWithSpawns()帮你按坐标生成单位。auto myModule Module::makeOnceModule( [](State* state) { // 每局只执行一次打印游戏开始信息 LOG(INFO) Game started on map: state-mapFileName(); }, MyFirstModule);这段代码没有复杂的继承却已经是一个合格的星际争霸 AI 模块了。把自定义模块挂载进你的星际争霸 AI模块写好后如何让它跑起来框架提供了便捷的命令行入口 src/botcli-inl.hsetupPlayerFromCli()会读取--modules参数把逗号分隔的模块名逐个实例化并挂载到 Player 上。./my_bot --modules MyFirstModule,Strategy,GenericAutoBuild,BuildingPlacer,Builder模块按顺序执行kAutoTopModule即Top会自动放在最前面发布全局 UPC。你可以在 scripts/botplay/botplay.cpp 看到完整的可执行程序示例。站在巨人的肩膀上现成模块与官方教程不要重复造轮子仓库里已经备好了大量可复用的成熟模块行为模块src/modules/gatherer/采集、src/modules/squadcombat/小队战斗、builder.cpp建造、scouting.cpp侦查完整 bot 组装src/main.cpp 展示了 CherryPi 如何串联全部模块打完整对局训练示例tutorials/micro/ 提供了一套微操训练框架MicroModule在 tutorials/micro/micromodule.h 中展示了模块 强化学习的完整姿势配合下图这种迷你地图可以快速验证你的自定义模块效果克隆仓库地址https://gitcode.com/gh_mirrors/to/TorchCraftAI结语从理解 Player、Module、Blackboard、UPC 四大核心抽象到写出第一个自定义模块再到挂载进完整 bot你已经掌握了 TorchCraftAI 星际争霸 AI 开发的基本功。下一步试着用OnceModule生成一些单位、用LambdaModule发布一条攻击指令再配合官方训练教程跑一局强化学习——你会发现让 AI 学会打星际其实没那么难。【免费下载链接】TorchCraftAIA platform that lets you build agents to learn to play StarCraft: Brood War.项目地址: https://gitcode.com/gh_mirrors/to/TorchCraftAI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价