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 代码,重新生成解决方案,确认成功后发布选手包