diff --git a/CAPI/README.md b/CAPI/README.md
index 54eabc3..b09c82d 100644
--- a/CAPI/README.md
+++ b/CAPI/README.md
@@ -2,4 +2,4 @@
## 简介
-通信组件与选手接口
+通信组件与选手接口。开发文档和规范参见 `cpp` 和 `python` 内的 `README.md`
diff --git a/CAPI/cpp/API/API.vcxproj b/CAPI/cpp/API/API.vcxproj
index 8416fe8..6b9f8a9 100644
--- a/CAPI/cpp/API/API.vcxproj
+++ b/CAPI/cpp/API/API.vcxproj
@@ -93,6 +93,7 @@
..\spdlog\include;..\tclap\include;..\grpc\include;..\proto;include;%(AdditionalIncludeDirectories)
/source-charset:utf-8 %(AdditionalOptions)
MultiThreadedDebug
+ true
Console
@@ -114,6 +115,7 @@
..\spdlog\include;..\tclap\include;..\grpc\include;..\proto;include;%(AdditionalIncludeDirectories)
/source-charset:utf-8 %(AdditionalOptions)
MultiThreaded
+ true
Console
@@ -135,6 +137,7 @@
..\spdlog\include;..\tclap\include;..\grpc\include;..\proto;include;%(AdditionalIncludeDirectories)
/source-charset:utf-8 %(AdditionalOptions)
MultiThreadedDebug
+ true
Console
@@ -156,6 +159,7 @@
..\spdlog\include;..\tclap\include;..\grpc\include;..\proto;include;%(AdditionalIncludeDirectories)
/source-charset:utf-8 %(AdditionalOptions)
MultiThreaded
+ true
Console
diff --git a/CAPI/cpp/API/include/constants.h b/CAPI/cpp/API/include/constants.h
index f2689bf..ed1f030 100644
--- a/CAPI/cpp/API/include/constants.h
+++ b/CAPI/cpp/API/include/constants.h
@@ -166,9 +166,9 @@ namespace Constants
struct Robot
{
SCCI int moveSpeed = basicStudentSpeed * 9 / 10;
- SCCI int maxHp = basicHp * 0.3;
+ SCCI int maxHp = basicHp * 3 / 10;
SCCI int maxAddiction = basicMaxGamingAddiction * 0;
- SCCI int fixSpeed = (int)(basicFixSpeed * 0.7);
+ SCCI int fixSpeed = basicFixSpeed * 7 / 10;
SCCI int encourageSpeed = 0;
SCCI double concealment = 0.8;
SCCI int alertnessRadius = 0;
diff --git a/CAPI/cpp/API/include/utils.hpp b/CAPI/cpp/API/include/utils.hpp
index eefa957..5887965 100644
--- a/CAPI/cpp/API/include/utils.hpp
+++ b/CAPI/cpp/API/include/utils.hpp
@@ -472,9 +472,9 @@ namespace THUAI62Proto
{
protobuf::SendMsg sendMsg;
if (binary)
- sendMsg.set_binary_message(msg);
+ sendMsg.set_binary_message(std::move(msg));
else
- sendMsg.set_text_message(msg);
+ sendMsg.set_text_message(std::move(msg));
sendMsg.set_to_player_id(toID);
sendMsg.set_player_id(id);
return sendMsg;
diff --git a/CAPI/cpp/API/src/API.cpp b/CAPI/cpp/API/src/API.cpp
index 85590a6..3b07a13 100644
--- a/CAPI/cpp/API/src/API.cpp
+++ b/CAPI/cpp/API/src/API.cpp
@@ -192,26 +192,26 @@ std::future TrickerAPI::EndAllAction()
std::future StudentAPI::SendTextMessage(int64_t toID, std::string message)
{
- return std::async(std::launch::async, [=]()
- { return logic.SendMessage(toID, message, false); });
+ return std::async(std::launch::async, [=, message = std::move(message)]()
+ { return logic.SendMessage(toID, std::move(message), false); });
}
std::future TrickerAPI::SendTextMessage(int64_t toID, std::string message)
{
- return std::async(std::launch::async, [=]()
- { return logic.SendMessage(toID, message, false); });
+ return std::async(std::launch::async, [=, message = std::move(message)]()
+ { return logic.SendMessage(toID, std::move(message), false); });
}
std::future StudentAPI::SendBinaryMessage(int64_t toID, std::string message)
{
- return std::async(std::launch::async, [=]()
- { return logic.SendMessage(toID, message, false); });
+ return std::async(std::launch::async, [=, message = std::move(message)]()
+ { return logic.SendMessage(toID, std::move(message), false); });
}
std::future TrickerAPI::SendBinaryMessage(int64_t toID, std::string message)
{
- return std::async(std::launch::async, [=]()
- { return logic.SendMessage(toID, message, false); });
+ return std::async(std::launch::async, [=, message = std::move(message)]()
+ { return logic.SendMessage(toID, std::move(message), false); });
}
bool StudentAPI::HaveMessage()
diff --git a/CAPI/cpp/API/src/Communication.cpp b/CAPI/cpp/API/src/Communication.cpp
index 85577ab..0618687 100644
--- a/CAPI/cpp/API/src/Communication.cpp
+++ b/CAPI/cpp/API/src/Communication.cpp
@@ -119,7 +119,7 @@ bool Communication::SendMessage(int64_t toID, std::string message, bool binary,
}
protobuf::BoolRes sendMessageResult;
ClientContext context;
- auto request = THUAI62Proto::THUAI62ProtobufSend(message, toID, binary, playerID);
+ auto request = THUAI62Proto::THUAI62ProtobufSend(std::move(message), toID, binary, playerID);
auto status = THUAI6Stub->SendMessage(&context, request, &sendMessageResult);
if (status.ok())
return sendMessageResult.act_success();
diff --git a/CAPI/cpp/API/src/DebugAPI.cpp b/CAPI/cpp/API/src/DebugAPI.cpp
index 7be6e5a..63a398d 100644
--- a/CAPI/cpp/API/src/DebugAPI.cpp
+++ b/CAPI/cpp/API/src/DebugAPI.cpp
@@ -355,8 +355,8 @@ std::future TrickerDebugAPI::EndAllAction()
std::future StudentDebugAPI::SendTextMessage(int64_t toID, std::string message)
{
logger->info("SendTextMessage: toID = {}, message = {}, called at {}ms", toID, message, Time::TimeSinceStart(startPoint));
- return std::async(std::launch::async, [=]()
- { auto result = logic.SendMessage(toID, message, false);
+ return std::async(std::launch::async, [=, message = std::move(message)]()
+ { auto result = logic.SendMessage(toID, std::move(message), false);
if (!result)
logger->warn("SendTextMessage: failed at {}ms", Time::TimeSinceStart(startPoint));
return result; });
@@ -365,8 +365,8 @@ std::future StudentDebugAPI::SendTextMessage(int64_t toID, std::string mes
std::future TrickerDebugAPI::SendTextMessage(int64_t toID, std::string message)
{
logger->info("SendTextMessage: toID = {}, message = {}, called at {}ms", toID, message, Time::TimeSinceStart(startPoint));
- return std::async(std::launch::async, [=]()
- { auto result = logic.SendMessage(toID, message, false);
+ return std::async(std::launch::async, [=, message = std::move(message)]()
+ { auto result = logic.SendMessage(toID, std::move(message), false);
if (!result)
logger->warn("SendTextMessage: failed at {}ms", Time::TimeSinceStart(startPoint));
return result; });
@@ -375,8 +375,8 @@ std::future TrickerDebugAPI::SendTextMessage(int64_t toID, std::string mes
std::future StudentDebugAPI::SendBinaryMessage(int64_t toID, std::string message)
{
logger->info("SendBinaryMessage: toID = {}, message = {}, called at {}ms", toID, message, Time::TimeSinceStart(startPoint));
- return std::async(std::launch::async, [=]()
- { auto result = logic.SendMessage(toID, message, true);
+ return std::async(std::launch::async, [=, message = std::move(message)]()
+ { auto result = logic.SendMessage(toID, std::move(message), true);
if (!result)
logger->warn("SendBinaryMessage: failed at {}ms", Time::TimeSinceStart(startPoint));
return result; });
@@ -385,8 +385,8 @@ std::future StudentDebugAPI::SendBinaryMessage(int64_t toID, std::string m
std::future TrickerDebugAPI::SendBinaryMessage(int64_t toID, std::string message)
{
logger->info("SendBinaryMessage: toID = {}, message = {}, called at {}ms", toID, message, Time::TimeSinceStart(startPoint));
- return std::async(std::launch::async, [=]()
- { auto result = logic.SendMessage(toID, message, true);
+ return std::async(std::launch::async, [=, message = std::move(message)]()
+ { auto result = logic.SendMessage(toID, std::move(message), true);
if (!result)
logger->warn("SendBinaryMessage: failed at {}ms", Time::TimeSinceStart(startPoint));
return result; });
diff --git a/CAPI/cpp/API/src/logic.cpp b/CAPI/cpp/API/src/logic.cpp
index 831f6d0..b949fe1 100644
--- a/CAPI/cpp/API/src/logic.cpp
+++ b/CAPI/cpp/API/src/logic.cpp
@@ -217,7 +217,7 @@ bool Logic::UseSkill(int32_t skill, int32_t skillParam)
bool Logic::SendMessage(int64_t toID, std::string message, bool binary)
{
logger->debug("Called SendMessage");
- return pComm->SendMessage(toID, message, binary, playerID);
+ return pComm->SendMessage(toID, std::move(message), binary, playerID);
}
bool Logic::HaveMessage()
diff --git a/CAPI/cpp/README.md b/CAPI/cpp/README.md
index 21daeeb..a5069b0 100644
--- a/CAPI/cpp/README.md
+++ b/CAPI/cpp/README.md
@@ -74,7 +74,7 @@ C++ 通信组件与选手接口
- 将之前提取的 Debug 和 Release 的 `.lib` 分别放在项目中的单独的文件夹里(THUAI6 使用的是 `CAPI\cpp\lib\debug` 和 `CAPI\cpp\lib\release`),并[使用 `.gitignore` 忽略掉](https://github.com/eesast/THUAI6/blob/c8e1fbe299c67a6e101fa02e85bcc971acd0f48b/CAPI/cpp/.gitignore#L502)
- 在项目属性的“链接器”的首页的“附加库目录”中分别配置 Debug 和 Release 的 [`.lib` 文件的相应路径](https://github.com/eesast/THUAI6/blob/c8e1fbe299c67a6e101fa02e85bcc971acd0f48b/CAPI/cpp/API/API.vcxproj#L166)
- 在项目属性中的“链接器”的“输入”的“附加依赖库”中分别配置 Debug 和 Release [所需要链接的库的文件名](https://github.com/eesast/THUAI6/blob/c8e1fbe299c67a6e101fa02e85bcc971acd0f48b/CAPI/cpp/API/API.vcxproj#L165)。注意 Debug 和 Release 链接的库可能并不完全相同,建议在 cmd 中使用 `dir /b` 将其自动列举并复制。还需要注意需要手动指定链接一些 Windows 自带的 `lib`,例如 `Ws2_32.lib`、`Crypt32.lib`、`Iphlpapi.lib` 等。如果生成过程中不通过,表示找不到一些函数,则在 Google 中搜索该函数,如果发现是 Windows 系统的 API 函数则会搜到[微软官方文档](https://learn.microsoft.com) 的对应链接的页面,则在页面最下方会表明它所在的 `.lib`(例如 [`CreateProcessA` 的页面](https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa#requirements)),加进去即可
- - 然后进行生成解决方案。如果感觉编译的速度过慢,可以在项目属性的 `C/C++` 的“所有选项”中搜索并行编译,并开启之(`/Qpar`)。不过由于 THUAI6 的疏忽,忘记开启了并行编译
+ - 然后进行生成解决方案。如果感觉编译的速度过慢,可以在项目属性的 `C/C++` 的“所有选项”中搜索多处理器编译,并[开启(`/MP`)](https://github.com/eesast/THUAI6/blob/ad4db599f97449786e6c910940bf4f69224d5408/CAPI/cpp/API/API.vcxproj#L162)
- 然后开始运行。如果提示缺少一些 DLL,可以把之前保存的 `.dll` 文件(如果有的话)放在与 `.exe` 相同的目录下。该目录为**与 `.sln` 相同目录的**(不是与 `.vcxproj` 相同目录的)`x64\Debug` 和 `x64\Release`
- 如果 x64 的 Debug 和 x64 的 Release 均生成成功,那么找一台没配过的电脑再试一次
- 随便写点 AI 代码,重新生成解决方案,确认成功后发布选手包