Skip to content

THUAI7 C++ SDK 接口文档

欢迎使用 THUAI7 C++ SDK!本文档详细介绍了可供选手调用的接口和功能,包括参数、返回值类型以及用法示例,帮助您更好地理解如何使用该 SDK 来控制您的无人作战系统参与比赛。

仓库链接:agent-template-cpp

1. 准备工作

使用 Windows 操作系统的选手可参考如下视频教程 https://cloud.tsinghua.edu.cn/f/9f18a58882614cbea368/ ,了解如何使用 C++ SDK 开发自己的 Agent。

1.1. 环境要求

要求 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

1.2. 构建项目

若您没有开启代理,则需要更改 xmake 的 proxy,在命令行中输入:

xmake g --proxy_pac=github_mirror.pac

运行以下命令以配置项目:

xmake f -m debug

或者在发布模式下:

xmake f -m release

然后构建项目:

xmake

1.3. 编写代码

您可以在 logic.cc 文件中编写您的代码。对于有经验的开发者,您也可以修改项目中的其他任何文件。在 logic.cc 中,我们已经为您提供了一个示例寻路代码,您可以根据自己的需求进行修改。

1.4. 运行

如果您修改了 main.cc 中的代码,则此部分可能无效。

运行以下命令启动 Agent:

./agent --server <server> --token <token>

\<server>:游戏服务器地址。(默认值:ws://localhost:14514)

\<token>:Agent 的令牌。(默认值:1919810)

例如:

./agent --server ws://localhost:14514 --token 1919810

注意: 运行前,请确保您的服务器地址和令牌是正确的,以确保 Agent 能够成功连接到游戏服务器。

2. 接口介绍

2.1. 初始化

#include "agent.h"

Agent agent("<TOKEN>", event_loop, loop_interval);

通过实例化 Agent 类并传入您的身份令牌、事件循环对象和主循环的时间间隔来初始化一个代理对象。

2.2. 连接服务器

agent.Connect("比赛服务器地址");

使用 Connect 方法连接到比赛服务器。您需要提供比赛服务器的地址。若本地测试,可使用默认地址 ws://localhost:14514

2.3. 断开连接

agent.Disconnect();

使用 Disconnect 方法断开与比赛服务器的连接。

2.4. 获取游戏状态信息

2.4.1. 获取所有玩家信息

auto players_info = agent.all_player_info();
  • 返回类型: std::optional<std::reference_wrapper<std::vector<PlayerInfo> const>>

all_player_info 方法将返回一个包含所有玩家信息的列表。每个玩家信息包括玩家的 ID、生命值、护甲、速度、当前武器、位置和背包物品等。

2.4.2. 获取地图信息

auto game_map = agent.map();
  • 返回类型: std::optional<std::reference_wrapper<Map const>>

map 方法将返回地图信息,包括地图的长度和障碍物位置。

2.4.3. 获取资源信息

auto supplies = agent.supplies();
  • 返回类型: std::optional<std::reference_wrapper<std::vector<Supply> const>>

supplies 方法将返回一个包含所有资源信息的列表。每个资源信息包括资源的种类、位置和数量。

2.4.4. 获取安全区信息

auto safe_zone = agent.safe_zone();
  • 返回类型: std::optional<std::reference_wrapper<SafeZone const>>

safe_zone 方法将返回安全区信息,包括安全区的中心位置和半径。

2.4.5. 获取自身 ID

auto self_id = agent.self_id();
  • 返回类型: std::optional<int>

self_id 方法将返回自身玩家的 ID。

2.5. 操作无人作战系统

2.5.1. 选择出生地

agent.ChooseOrigin(Position<float> position);
  • 参数:
  • position:出生地位置。
  • 返回类型:

使用 ChooseOrigin 方法选择无人作战系统的出生地。

2.5.2. 移动

agent.Move(Position<float> position);
  • 参数:
  • position:目标位置。
  • 返回类型:

使用 Move 方法使无人作战系统移动到指定位置。

2.5.3. 停止移动

agent.Stop();
  • 返回类型:

使用 Stop 方法停止无人作战系统的移动。

2.5.4. 拾取资源

agent.PickUp(SupplyKind target_supply, int count);
  • 参数:
  • target_supply:目标资源种类。
  • count:数量。
  • 返回类型:

使用 PickUp 方法使无人作战系统拾取当前脚下 1×1 方格上的资源。

2.5.5. 放弃资源

agent.Abandon(SupplyKind target_supply, int count);
  • 参数:
  • target_supply:目标资源种类。
  • count:数量。
  • 返回类型:

使用 Abandon 方法使无人作战系统放弃背包中的指定数量的资源。

2.5.6. 切换武器

agent.SwitchFirearm(FirearmKind target_firearm);
  • 参数:
  • target_firearm:目标武器的种类。
  • 返回类型:

使用 SwitchFirearm 方法切换无人作战系统的当前武器。

2.5.7. 使用药品

agent.UseMedicine(MedicineKind target_medicine);
  • 参数:
  • target_medicine:药品种类。
  • 返回类型:

使用 UseMedicine 方法使用药品恢复无人作战系统的生命值。

2.5.8. 使用手榴弹

agent.UseGrenade(Position<float> position);
  • 参数:
  • position:目标位置。
  • 返回类型:

使用 UseGrenade 方法投掷手榴弹攻击敌人或破坏墙体。

2.5.9. 攻击

agent.Attack(Position<float> position);
  • 参数:
  • position:目标位置。
  • 返回类型:

使用 Attack 方法使无人作战系统攻击指定位置的敌人。

2.6. 其他

2.6.1. 判断游戏是否准备就绪

bool ready = agent.IsGameReady();
  • 返回类型: bool

IsGameReady 方法将返回一个布尔值,指示游戏是否已准备就绪,即是否已获取到所有必要的游戏状态信息。