diff --git a/CAPI/cpp/API/include/utils.hpp b/CAPI/cpp/API/include/utils.hpp index 604968f..05f1443 100644 --- a/CAPI/cpp/API/include/utils.hpp +++ b/CAPI/cpp/API/include/utils.hpp @@ -20,16 +20,20 @@ namespace AssistFunction return grid / numOfGridPerCell; } - inline bool HaveView(int viewRange, int x, int y, int newX, int newY, THUAI6::PlaceType myPlace, THUAI6::PlaceType newPlace, std::vector>& map) + inline bool HaveView(int viewRange, int x, int y, int newX, int newY, std::vector>& map) { int deltaX = newX - x; int deltaY = newY - y; double distance = deltaX * deltaX + deltaY * deltaY; + THUAI6::PlaceType myPlace = map[GridToCell(x)][GridToCell(y)]; + THUAI6::PlaceType newPlace = map[GridToCell(newX)][GridToCell(newY)]; if (newPlace == THUAI6::PlaceType::Grass && myPlace != THUAI6::PlaceType::Grass) // 草丛外必不可能看到草丛内 return false; if (distance < viewRange * viewRange) { int divide = std::max(std::abs(deltaX), std::abs(deltaY)) / 100; + if (divide == 0) + return true; double dx = deltaX / divide; double dy = deltaY / divide; double myX = double(x); @@ -209,6 +213,7 @@ namespace Proto2THUAI6 tricker->playerID = trickerMsg.player_id(); tricker->viewRange = trickerMsg.view_range(); tricker->radius = trickerMsg.radius(); + tricker->playerType = THUAI6::PlayerType::TrickerPlayer; tricker->buff.clear(); for (int i = 0; i < trickerMsg.buff().size(); i++) tricker->buff.push_back(trickerBuffTypeDict[trickerMsg.buff(i)]); @@ -358,13 +363,13 @@ namespace THUAI62Proto {THUAI6::StudentType::StudentType4, protobuf::StudentType::STUDENTTYPE4}, }; - inline std::map studentBuffTypeDict{ - {THUAI6::StudentBuffType::NullStudentBuffType, protobuf::StudentBuffType::NULL_SBUFF_TYPE}, - {THUAI6::StudentBuffType::StudentBuffType1, protobuf::StudentBuffType::SBUFFTYPE1}, - {THUAI6::StudentBuffType::StudentBuffType2, protobuf::StudentBuffType::SBUFFTYPE2}, - {THUAI6::StudentBuffType::StudentBuffType3, protobuf::StudentBuffType::SBUFFTYPE3}, - {THUAI6::StudentBuffType::StudentBuffType4, protobuf::StudentBuffType::SBUFFTYPE4}, - }; + // inline std::map studentBuffTypeDict{ + // {THUAI6::StudentBuffType::NullStudentBuffType, protobuf::StudentBuffType::NULL_SBUFF_TYPE}, + // {THUAI6::StudentBuffType::StudentBuffType1, protobuf::StudentBuffType::SBUFFTYPE1}, + // {THUAI6::StudentBuffType::StudentBuffType2, protobuf::StudentBuffType::SBUFFTYPE2}, + // {THUAI6::StudentBuffType::StudentBuffType3, protobuf::StudentBuffType::SBUFFTYPE3}, + // {THUAI6::StudentBuffType::StudentBuffType4, protobuf::StudentBuffType::SBUFFTYPE4}, + // }; inline std::map trickerTypeDict{ {THUAI6::TrickerType::NullTrickerType, protobuf::TrickerType::NULL_TRICKER_TYPE}, @@ -374,13 +379,13 @@ namespace THUAI62Proto {THUAI6::TrickerType::TrickerType4, protobuf::TrickerType::TRICKERTYPE4}, }; - inline std::map trickerBuffTypeDict{ - {THUAI6::TrickerBuffType::NullTrickerBuffType, protobuf::TrickerBuffType::NULL_TBUFF_TYPE}, - {THUAI6::TrickerBuffType::TrickerBuffType1, protobuf::TrickerBuffType::TBUFFTYPE1}, - {THUAI6::TrickerBuffType::TrickerBuffType2, protobuf::TrickerBuffType::TBUFFTYPE2}, - {THUAI6::TrickerBuffType::TrickerBuffType3, protobuf::TrickerBuffType::TBUFFTYPE3}, - {THUAI6::TrickerBuffType::TrickerBuffType4, protobuf::TrickerBuffType::TBUFFTYPE4}, - }; + // inline std::map trickerBuffTypeDict{ + // {THUAI6::TrickerBuffType::NullTrickerBuffType, protobuf::TrickerBuffType::NULL_TBUFF_TYPE}, + // {THUAI6::TrickerBuffType::TrickerBuffType1, protobuf::TrickerBuffType::TBUFFTYPE1}, + // {THUAI6::TrickerBuffType::TrickerBuffType2, protobuf::TrickerBuffType::TBUFFTYPE2}, + // {THUAI6::TrickerBuffType::TrickerBuffType3, protobuf::TrickerBuffType::TBUFFTYPE3}, + // {THUAI6::TrickerBuffType::TrickerBuffType4, protobuf::TrickerBuffType::TBUFFTYPE4}, + // }; // 用于将THUAI6的类转换为Protobuf的消息 inline protobuf::PlayerMsg THUAI62ProtobufPlayer(int64_t playerID, THUAI6::PlayerType playerType, THUAI6::StudentType studentType, THUAI6::TrickerType trickerType) @@ -390,10 +395,12 @@ namespace THUAI62Proto playerMsg.set_player_type(playerTypeDict[playerType]); if (playerType == THUAI6::PlayerType::StudentPlayer) { + playerMsg.set_player_type(protobuf::PlayerType::STUDENT_PLAYER); playerMsg.set_student_type(studentTypeDict[studentType]); } else if (playerType == THUAI6::PlayerType::TrickerPlayer) { + playerMsg.set_player_type(protobuf::PlayerType::TRICKER_PLAYER); playerMsg.set_tricker_type(trickerTypeDict[trickerType]); } return playerMsg; diff --git a/CAPI/cpp/API/src/logic.cpp b/CAPI/cpp/API/src/logic.cpp index d65f9c4..b76af9d 100644 --- a/CAPI/cpp/API/src/logic.cpp +++ b/CAPI/cpp/API/src/logic.cpp @@ -325,6 +325,7 @@ void Logic::ProcessMessage() bufferState->gameMap = std::move(map); currentState->gameMap = bufferState->gameMap; logger->info("Map loaded!"); + break; } if (currentState->gameMap.empty()) { @@ -404,14 +405,14 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) switch (Proto2THUAI6::messageOfObjDict[item.message_of_obj_case()]) { case THUAI6::MessageOfObj::PropMessage: - if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.prop_message().x(), item.prop_message().y(), bufferState->studentSelf->place, Proto2THUAI6::placeTypeDict[item.prop_message().place()], currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.prop_message().x(), item.prop_message().y(), currentState->gameMap)) { bufferState->props.push_back(Proto2THUAI6::Protobuf2THUAI6Prop(item.prop_message())); logger->debug("Add Prop!"); } break; case THUAI6::MessageOfObj::BulletMessage: - if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.prop_message().x(), item.prop_message().y(), bufferState->studentSelf->place, Proto2THUAI6::placeTypeDict[item.prop_message().place()], currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.prop_message().x(), item.prop_message().y(), currentState->gameMap)) { bufferState->bullets.push_back(Proto2THUAI6::Protobuf2THUAI6Bullet(item.bullet_message())); logger->debug("Add Bullet!"); @@ -419,9 +420,9 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) break; case THUAI6::MessageOfObj::ClassroomMessage: { - if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.classroom_message().x(), item.classroom_message().y(), bufferState->studentSelf->place, THUAI6::PlaceType::Land, currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.classroom_message().x(), item.classroom_message().y(), currentState->gameMap)) { - auto pos = std::make_pair(item.classroom_message().x(), item.classroom_message().y()); + auto pos = std::make_pair(AssistFunction::GridToCell(item.classroom_message().x()), AssistFunction::GridToCell(item.classroom_message().y())); if (bufferState->mapInfo->classRoomState.count(pos) == 0) { bufferState->mapInfo->classRoomState.emplace(pos, item.classroom_message().progress()); @@ -437,9 +438,9 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) } case THUAI6::MessageOfObj::ChestMessage: { - if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.chest_message().x(), item.chest_message().y(), bufferState->studentSelf->place, THUAI6::PlaceType::Land, currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.chest_message().x(), item.chest_message().y(), currentState->gameMap)) { - auto pos = std::make_pair(item.chest_message().x(), item.chest_message().y()); + auto pos = std::make_pair(AssistFunction::GridToCell(item.chest_message().x()), AssistFunction::GridToCell(item.chest_message().y())); if (bufferState->mapInfo->chestState.count(pos) == 0) { bufferState->mapInfo->chestState.emplace(pos, item.chest_message().progress()); @@ -455,9 +456,9 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) } case THUAI6::MessageOfObj::DoorMessage: { - if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.door_message().x(), item.door_message().y(), bufferState->studentSelf->place, THUAI6::PlaceType::Land, currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.door_message().x(), item.door_message().y(), currentState->gameMap)) { - auto pos = std::make_pair(item.door_message().x(), item.door_message().y()); + auto pos = std::make_pair(AssistFunction::GridToCell(item.door_message().x()), AssistFunction::GridToCell(item.door_message().y())); if (bufferState->mapInfo->doorState.count(pos) == 0) { bufferState->mapInfo->doorState.emplace(pos, item.door_message().is_open()); @@ -475,9 +476,9 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) } case THUAI6::MessageOfObj::HiddenGateMessage: { - if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.hidden_gate_message().x(), item.hidden_gate_message().y(), bufferState->studentSelf->place, THUAI6::PlaceType::Land, currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.hidden_gate_message().x(), item.hidden_gate_message().y(), currentState->gameMap)) { - auto pos = std::make_pair(item.hidden_gate_message().x(), item.hidden_gate_message().y()); + auto pos = std::make_pair(AssistFunction::GridToCell(item.hidden_gate_message().x()), AssistFunction::GridToCell(item.hidden_gate_message().y())); if (bufferState->mapInfo->hiddenGateState.count(pos) == 0) { bufferState->mapInfo->hiddenGateState.emplace(pos, Proto2THUAI6::Bool2HiddenGateState(item.hidden_gate_message().opened())); @@ -493,9 +494,9 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) } case THUAI6::MessageOfObj::GateMessage: { - if (!AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.gate_message().x(), item.gate_message().y(), bufferState->studentSelf->place, THUAI6::PlaceType::Land, currentState->gameMap)) + if (!AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.gate_message().x(), item.gate_message().y(), currentState->gameMap)) { - auto pos = std::make_pair(item.gate_message().x(), item.gate_message().y()); + auto pos = std::make_pair(AssistFunction::GridToCell(item.gate_message().x()), AssistFunction::GridToCell(item.gate_message().y())); if (bufferState->mapInfo->gateState.count(pos) == 0) { bufferState->mapInfo->gateState.emplace(pos, item.gate_message().progress()); @@ -511,7 +512,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) } case THUAI6::MessageOfObj::TrickerMessage: { - if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.tricker_message().x(), item.tricker_message().y(), bufferState->studentSelf->place, Proto2THUAI6::placeTypeDict[item.tricker_message().place()], bufferState->gameMap)) + if (AssistFunction::HaveView(bufferState->studentSelf->viewRange, bufferState->studentSelf->x, bufferState->studentSelf->y, item.tricker_message().x(), item.tricker_message().y(), bufferState->gameMap)) { bufferState->trickers.push_back(Proto2THUAI6::Protobuf2THUAI6Tricker(item.tricker_message())); logger->debug("Add Tricker!"); @@ -540,14 +541,14 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) switch (Proto2THUAI6::messageOfObjDict[item.message_of_obj_case()]) { case THUAI6::MessageOfObj::PropMessage: - if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.prop_message().x(), item.prop_message().y(), bufferState->trickerSelf->place, Proto2THUAI6::placeTypeDict[item.prop_message().place()], currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.prop_message().x(), item.prop_message().y(), currentState->gameMap)) { bufferState->props.push_back(Proto2THUAI6::Protobuf2THUAI6Prop(item.prop_message())); logger->debug("Add Prop!"); } break; case THUAI6::MessageOfObj::BulletMessage: - if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.prop_message().x(), item.prop_message().y(), bufferState->trickerSelf->place, Proto2THUAI6::placeTypeDict[item.prop_message().place()], currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.prop_message().x(), item.prop_message().y(), currentState->gameMap)) { bufferState->bullets.push_back(Proto2THUAI6::Protobuf2THUAI6Bullet(item.bullet_message())); logger->debug("Add Bullet!"); @@ -555,9 +556,9 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) break; case THUAI6::MessageOfObj::ClassroomMessage: { - if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.classroom_message().x(), item.classroom_message().y(), bufferState->trickerSelf->place, THUAI6::PlaceType::Land, currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.classroom_message().x(), item.classroom_message().y(), currentState->gameMap)) { - auto pos = std::make_pair(item.classroom_message().x(), item.classroom_message().y()); + auto pos = std::make_pair(AssistFunction::GridToCell(item.classroom_message().x()), AssistFunction::GridToCell(item.classroom_message().y())); if (bufferState->mapInfo->classRoomState.count(pos) == 0) { bufferState->mapInfo->classRoomState.emplace(pos, item.classroom_message().progress()); @@ -573,9 +574,9 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) } case THUAI6::MessageOfObj::ChestMessage: { - if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.chest_message().x(), item.chest_message().y(), bufferState->trickerSelf->place, THUAI6::PlaceType::Land, currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.chest_message().x(), item.chest_message().y(), currentState->gameMap)) { - auto pos = std::make_pair(item.chest_message().x(), item.chest_message().y()); + auto pos = std::make_pair(AssistFunction::GridToCell(item.chest_message().x()), AssistFunction::GridToCell(item.chest_message().y())); if (bufferState->mapInfo->chestState.count(pos) == 0) { bufferState->mapInfo->chestState.emplace(pos, item.chest_message().progress()); @@ -591,9 +592,9 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) } case THUAI6::MessageOfObj::DoorMessage: { - if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.door_message().x(), item.door_message().y(), bufferState->trickerSelf->place, THUAI6::PlaceType::Land, currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.door_message().x(), item.door_message().y(), currentState->gameMap)) { - auto pos = std::make_pair(item.door_message().x(), item.door_message().y()); + auto pos = std::make_pair(AssistFunction::GridToCell(item.door_message().x()), AssistFunction::GridToCell(item.door_message().y())); if (bufferState->mapInfo->doorState.count(pos) == 0) { bufferState->mapInfo->doorState.emplace(pos, item.door_message().is_open()); @@ -611,9 +612,9 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) } case THUAI6::MessageOfObj::HiddenGateMessage: { - if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.hidden_gate_message().x(), item.hidden_gate_message().y(), bufferState->trickerSelf->place, THUAI6::PlaceType::Land, currentState->gameMap)) + if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.hidden_gate_message().x(), item.hidden_gate_message().y(), currentState->gameMap)) { - auto pos = std::make_pair(item.hidden_gate_message().x(), item.hidden_gate_message().y()); + auto pos = std::make_pair(AssistFunction::GridToCell(item.hidden_gate_message().x()), AssistFunction::GridToCell(item.hidden_gate_message().y())); if (bufferState->mapInfo->hiddenGateState.count(pos) == 0) { bufferState->mapInfo->hiddenGateState.emplace(pos, Proto2THUAI6::Bool2HiddenGateState(item.hidden_gate_message().opened())); @@ -629,9 +630,9 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) } case THUAI6::MessageOfObj::GateMessage: { - if (!AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.gate_message().x(), item.gate_message().y(), bufferState->trickerSelf->place, THUAI6::PlaceType::Land, currentState->gameMap)) + if (!AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.gate_message().x(), item.gate_message().y(), currentState->gameMap)) { - auto pos = std::make_pair(item.gate_message().x(), item.gate_message().y()); + auto pos = std::make_pair(AssistFunction::GridToCell(item.gate_message().x()), AssistFunction::GridToCell(item.gate_message().y())); if (bufferState->mapInfo->gateState.count(pos) == 0) { bufferState->mapInfo->gateState.emplace(pos, item.gate_message().progress()); @@ -647,7 +648,7 @@ void Logic::LoadBuffer(protobuf::MessageToClient& message) } case THUAI6::MessageOfObj::StudentMessage: { - if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.student_message().x(), item.student_message().y(), bufferState->trickerSelf->place, Proto2THUAI6::placeTypeDict[item.student_message().place()], bufferState->gameMap)) + if (AssistFunction::HaveView(bufferState->trickerSelf->viewRange, bufferState->trickerSelf->x, bufferState->trickerSelf->y, item.student_message().x(), item.student_message().y(), bufferState->gameMap)) { bufferState->students.push_back(Proto2THUAI6::Protobuf2THUAI6Student(item.student_message())); logger->debug("Add Student!"); diff --git a/CAPI/cpp/API/src/main.cpp b/CAPI/cpp/API/src/main.cpp index 9db675e..9965bd7 100644 --- a/CAPI/cpp/API/src/main.cpp +++ b/CAPI/cpp/API/src/main.cpp @@ -10,7 +10,7 @@ int THUAI6Main(int argc, char** argv, CreateAIFunc AIBuilder) { int pID = 0; - std::string sIP = "183.172.169.99"; + std::string sIP = "172.22.32.1"; std::string sPort = "8888"; bool file = false; bool print = false; @@ -18,13 +18,13 @@ int THUAI6Main(int argc, char** argv, CreateAIFunc AIBuilder) extern const THUAI6::PlayerType playerType; extern const THUAI6::TrickerType trickerType; extern const THUAI6::StudentType studentType; - // { - // file = true; - // print = true; - // Logic logic(playerType, pID, trickerType, studentType); - // logic.Main(AIBuilder, sIP, sPort, file, print, warnOnly); - // return 0; - // } + { + file = true; + print = true; + Logic logic(playerType, pID, trickerType, studentType); + logic.Main(AIBuilder, sIP, sPort, file, print, warnOnly); + return 0; + } // 使用cmdline的正式版本 try diff --git a/dependency/proto/Message2Clients.proto b/dependency/proto/Message2Clients.proto index 7ccc4f6..18041ef 100755 --- a/dependency/proto/Message2Clients.proto +++ b/dependency/proto/Message2Clients.proto @@ -175,9 +175,6 @@ message MessageOfAll int32 student_quited = 4; // 已经退学的学生数 int32 student_score = 5; int32 tricker_score = 6; - bool gate_opened = 7; - bool hidden_gate_refreshed = 8; - bool hidden_gate_opened = 9; } message MessageToClient