C++ SDK 文档
欢迎使用 THUAI7 C++ SDK!本文档详细介绍了可供选手调用的接口和功能,包括参数、返回值类型以及用法示例,帮助您更好地理解如何使用该 SDK 来控制您的无人作战系统参与比赛。
仓库链接:agent-template-cpp
准备工作
使用 Windows 操作系统的选手可参考如下视频教程,了解如何配置 C++ SDK 开发环境。
环境要求
-
要求 XMake >= 2.8.8,安装方法请参考 XMake 官方文档。若您没有开启代理,可以使用如下Windows 下载地址:XMake 直链下载
-
具备 C++20 支持的 C++ 编译器工具链。推荐使用 MSVC。可使用如下 VS Build Tools 下载地址:Visual Studio Build Tools
注意若您使用的是其他编译器,请确保其支持 C++20 标准。
-
合适的代码编辑器。推荐使用 Visual Studio Code。可使用如下 Windows 下载地址:Visual Studio Code
构建项目
若您没有开启代理,则需要更改 xmake 的 proxy,在命令行中输入:
xmake g --proxy_pac=github_mirror.pac
运行以下命令以配置项目:
xmake f -m debug
或者在发布模式下:
xmake f -m release
然后构建项目:
xmake
编写代码
您可以在 logic.cc
文件中编写您的代码。对于有经验的开发者,您也可以修改项目中的其他任何文件。在 logic.cc
中,我们已经为您提供了一个示例寻路代码,您可以根据自己的需求进行修改。
运行
如果您修改了 main.cc
中的代码,则此部分可能无效。
运行以下命令启动 Agent:
./agent --server <server> --token <token>
<server>
:游戏服务器地址。(默认值:ws://localhost:14514
)<token>
:Agent 的令牌。(默认值:1919810
)
例如:
./agent --server ws://localhost:14514 --token 1919810
运行前,请确保您的服务器地址和令牌是正确的,以确保 Agent 能够成功连接到游戏服务器。
接口介绍
获取游戏状态信息
-
获取所有玩家信息
auto players_info = agent.all_player_info();
- 返回类型:
std::optional<std::reference_wrapper<std::vector<PlayerInfo> const>>
all_player_info
方法将返回一个包含所有玩家信息的列表。每个玩家信息包括玩家的 ID、生命值、护甲、速度、当前武器、位置和背包物品等。 - 返回类型:
-
获取地图信息
auto game_map = agent.map();
- 返回类型:
std::optional<std::reference_wrapper<Map const>>
map
方法将返回地图信息,包括地图的长度和障碍物位置。 - 返回类型:
-
获取资源信息
auto supplies = agent.supplies();
- 返回类型:
std::optional<std::reference_wrapper<std::vector<Supply> const>>
supplies
方法将返回一个包含所有资源信息的列表。每个资源信息包括资源的种类、位置和数量。 - 返回类型:
-
获取安全区信息
auto safe_zone = agent.safe_zone();
- 返回类型:
std::optional<std::reference_wrapper<SafeZone const>>
safe_zone
方法将返回安全区信息,包括安全区的中心位置和半径。 - 返回类型:
-
获取自身 ID
auto self_id = agent.self_id();
- 返回类型:
std::optional<int>
self_id
方法将返回自身玩家的 ID。 - 返回类型:
操作无人作战系统
-
选择出生地
agent.ChooseOrigin(Position<float> position);
- 参数:
position
:出生地位置。
- 返回类型:无
使用
ChooseOrigin
方法选择无人作战系统的出生地。 - 参数:
-
移动
agent.Move(Position<float> position);
- 参数:
position
:目标位置。
- 返回类型:无
使用
Move
方法使无人作战系统移动到指定位置。 - 参数:
-
停止移动
agent.Stop();
- 返回类型:无
使用
Stop
方法停止无人作战系统的移动。 -
拾取资源
agent.PickUp(SupplyKind target_supply, int count);
- 参数:
target_supply
:目标资源种类。count
:数量。
- 返回类型:无
使用
PickUp
方法使无人作战系统拾取当前脚下 1×1 方格上的资源。 - 参数:
-
放弃资源
agent.Abandon(SupplyKind target_supply, int count);
- 参数:
target_supply
:目标资源种类。count
:数量。
- 返回类型:无
使用
Abandon
方法使无人作战系统放弃背包中的指定数量的资源。 - 参数:
-
切换武器
agent.SwitchFirearm(FirearmKind target_firearm);
- 参数:
target_firearm
:目标武器的种类。
- 返回类型:无
使用
SwitchFirearm
方法切换无人作战系统的当前武器。 - 参数:
-
使用药品
agent.UseMedicine(MedicineKind target_medicine);
- 参数:
target_medicine
:药品种类。
- 返回类型:无
使用
UseMedicine
方法使用药品恢复无人作战系统的生命值。 - 参数:
-
使用手榴弹
agent.UseGrenade(Position<float> position);
- 参数:
position
:目标位置。
- 返回类型:无
使用
UseGrenade
方法投掷手榴弹攻击敌人或破坏墙体。 - 参数:
-
攻击
agent.Attack(Position<float> position);
- 参数:
position
:目标位置。
- 返回类型:无
使用
Attack
方法使无人作战系统攻击指定位置的敌人。 - 参数:
状态查询
-
判断是否连接到服务器
bool connected = agent.IsConnected();
- 返回类型:
bool
IsConnected
方法指示 Agent 是否已连接到服务器。 - 返回类型:
-
判断游戏是否准备就绪
bool ready = agent.IsGameReady();
- 返回类型:
bool
IsGameReady
方法指示游戏是否已准备就绪,即是否已获取到所有必要的游戏状态信息。 - 返回类型: