| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | ** EPITECH PROJECT, 2024 | ||
| 3 | ** zappy/ai | ||
| 4 | ** File description: | ||
| 5 | ** SimpleBot.cpp | ||
| 6 | */ | ||
| 7 | |||
| 8 | #include "SimpleBot.hpp" | ||
| 9 | |||
| 10 | ✗ | void SimpleBot::initChild() | |
| 11 | { | ||
| 12 | ✗ | std::cout << "🧒✅ SimpleBot initialized" << std::endl; | |
| 13 | ✗ | } | |
| 14 | |||
| 15 | ✗ | void SimpleBot::updateStrategy() | |
| 16 | { | ||
| 17 | ✗ | std::cout << "🧒🔄 SimpleBot updateStrategy" << std::endl; | |
| 18 | ✗ | if (_state.level == 1) | |
| 19 | { | ||
| 20 | ✗ | handleLvl1(); | |
| 21 | ✗ | return; | |
| 22 | } | ||
| 23 | ✗ | if (handleState()) | |
| 24 | return; | ||
| 25 | ✗ | if (handleSurvive()) | |
| 26 | return; | ||
| 27 | ✗ | else if (_state.level == 2) | |
| 28 | ✗ | handleLvl2(); | |
| 29 | else if (_state.level == 3) | ||
| 30 | ✗ | handleLvl3(); | |
| 31 | else if (_state.level == 4) | ||
| 32 | ✗ | handleLvl4(); | |
| 33 | else if (_state.level == 5) | ||
| 34 | ✗ | handleLvl5(); | |
| 35 | else if (_state.level == 6) | ||
| 36 | ✗ | handleLvl6(); | |
| 37 | else if (_state.level == 7) | ||
| 38 | ✗ | handleLvl7(); | |
| 39 | else | ||
| 40 | ✗ | PRINT_ALERT("🧒❌ SimpleBot: level not handled\n"); | |
| 41 | } | ||
| 42 | |||
| 43 | ✗ | bool SimpleBot::handleSurvive() | |
| 44 | { | ||
| 45 | static int searchFood = 0; | ||
| 46 | const int limitFood = 50; | ||
| 47 | |||
| 48 | ✗ | if (_iteration % 40 == 0) | |
| 49 | { | ||
| 50 | ✗ | _state.state = STANDARD; | |
| 51 | ✗ | queue.push_back({[&]() | |
| 52 | ✗ | { doAction(INVENTORY, ""); }, "INVENTORY"}); | |
| 53 | ✗ | return true; | |
| 54 | } | ||
| 55 | |||
| 56 | ✗ | if (_state.ressources.food < limitFood) | |
| 57 | { | ||
| 58 | ✗ | searchFood = 250; | |
| 59 | } | ||
| 60 | ✗ | if (searchFood > 0) | |
| 61 | { | ||
| 62 | ✗ | if (searchFood == 1) | |
| 63 | ✗ | queue.push_back({[&]() | |
| 64 | ✗ | { doAction(INVENTORY, ""); }, "INVENTORY"}); | |
| 65 | else | ||
| 66 | ✗ | survive(); | |
| 67 | ✗ | _state.state = STANDARD; | |
| 68 | ✗ | _state.pattern = "survive"; | |
| 69 | ✗ | searchFood--; | |
| 70 | ✗ | return true; | |
| 71 | } | ||
| 72 | return false; | ||
| 73 | } | ||
| 74 | |||
| 75 | ✗ | bool SimpleBot::handleState() | |
| 76 | { | ||
| 77 | ✗ | if (_state.metadata["should_incant"] == "true") | |
| 78 | { | ||
| 79 | ✗ | std::string msgToSent = "meeting_" + _state.metadata["id_group"] + "_done"; | |
| 80 | ✗ | addBroadcastAction(msgToSent); | |
| 81 | // TODO: Broadcast two times to ensure if someone try to copy and modifie this message | ||
| 82 | // addBroadcastAction(msgToSent); | ||
| 83 | } | ||
| 84 | ✗ | if (_state.metadata["should_group"] == "true") | |
| 85 | { | ||
| 86 | ✗ | joinGroup(); | |
| 87 | ✗ | _state.pattern = "joinGroup"; | |
| 88 | ✗ | return true; | |
| 89 | } | ||
| 90 | ✗ | if (_state.metadata["ask_for_group"] == "true") | |
| 91 | { | ||
| 92 | ✗ | group(); | |
| 93 | ✗ | _state.pattern = "group"; | |
| 94 | ✗ | return true; | |
| 95 | } | ||
| 96 | ✗ | if (_state.metadata["should_incant"] == "true" && _state.level == 2) | |
| 97 | { | ||
| 98 | ✗ | incantationLvl2(); | |
| 99 | ✗ | _state.pattern = "incantationLvl2"; | |
| 100 | ✗ | return true; | |
| 101 | } | ||
| 102 | ✗ | if (_state.metadata["should_incant"] == "true" && _state.level == 3) | |
| 103 | { | ||
| 104 | ✗ | incantationLvl3(); | |
| 105 | ✗ | _state.pattern = "incantationLvl3"; | |
| 106 | ✗ | return true; | |
| 107 | } | ||
| 108 | ✗ | if (_state.metadata["should_incant"] == "true" && _state.level == 4) | |
| 109 | { | ||
| 110 | ✗ | incantationLvl4(); | |
| 111 | ✗ | _state.pattern = "incantationLvl4"; | |
| 112 | ✗ | return true; | |
| 113 | } | ||
| 114 | ✗ | if (_state.metadata["should_incant"] == "true" && _state.level == 5) | |
| 115 | { | ||
| 116 | ✗ | incantationLvl5(); | |
| 117 | ✗ | _state.pattern = "incantationLvl5"; | |
| 118 | ✗ | return true; | |
| 119 | } | ||
| 120 | ✗ | if (_state.metadata["should_incant"] == "true" && _state.level == 5) | |
| 121 | { | ||
| 122 | ✗ | incantationLvl5(); | |
| 123 | ✗ | _state.pattern = "incantationLvl5"; | |
| 124 | ✗ | return true; | |
| 125 | } | ||
| 126 | ✗ | if (_state.metadata["should_incant"] == "true" && _state.level == 6) | |
| 127 | { | ||
| 128 | ✗ | incantationLvl6(); | |
| 129 | ✗ | _state.pattern = "incantationLvl6"; | |
| 130 | ✗ | return true; | |
| 131 | } | ||
| 132 | ✗ | if (_state.metadata["should_incant"] == "true" && _state.level == 7) | |
| 133 | { | ||
| 134 | ✗ | incantationLvl7(); | |
| 135 | ✗ | _state.pattern = "incantationLvl7"; | |
| 136 | ✗ | return true; | |
| 137 | } | ||
| 138 | return false; | ||
| 139 | } | ||
| 140 | |||
| 141 | ✗ | void SimpleBot::handleLvl1() | |
| 142 | { | ||
| 143 | ✗ | runToLinemate(); | |
| 144 | ✗ | _state.pattern = "runToLinemate"; | |
| 145 | ✗ | } | |
| 146 | |||
| 147 | // TODO: refactor handle levels | ||
| 148 | ✗ | void SimpleBot::handleLvl2() | |
| 149 | { | ||
| 150 | ✗ | if (_state.ressources.linemate < 1) | |
| 151 | { | ||
| 152 | ✗ | searchAndTakeRessource("linemate"); | |
| 153 | ✗ | _state.pattern = "searchAndTakeRessource: linemate"; | |
| 154 | } | ||
| 155 | ✗ | else if (_state.ressources.deraumere < 1) | |
| 156 | { | ||
| 157 | ✗ | searchAndTakeRessource("deraumere"); | |
| 158 | ✗ | _state.pattern = "searchAndTakeRessource: deraumere"; | |
| 159 | } | ||
| 160 | ✗ | else if (_state.ressources.sibur < 1) | |
| 161 | { | ||
| 162 | ✗ | searchAndTakeRessource("sibur"); | |
| 163 | ✗ | _state.pattern = "searchAndTakeRessource: sibur"; | |
| 164 | } | ||
| 165 | else | ||
| 166 | { | ||
| 167 | ✗ | group(); | |
| 168 | ✗ | _state.pattern = "group"; | |
| 169 | } | ||
| 170 | ✗ | } | |
| 171 | |||
| 172 | ✗ | void SimpleBot::handleLvl3() | |
| 173 | { | ||
| 174 | ✗ | if (_state.ressources.linemate < 2) | |
| 175 | { | ||
| 176 | ✗ | searchAndTakeRessource("linemate"); | |
| 177 | ✗ | _state.pattern = "searchAndTakeRessource: linemate"; | |
| 178 | } | ||
| 179 | ✗ | else if (_state.ressources.sibur < 1) | |
| 180 | { | ||
| 181 | ✗ | searchAndTakeRessource("sibur"); | |
| 182 | ✗ | _state.pattern = "searchAndTakeRessource: sibur"; | |
| 183 | } | ||
| 184 | ✗ | else if (_state.ressources.phiras < 2) | |
| 185 | { | ||
| 186 | ✗ | searchAndTakeRessource("phiras"); | |
| 187 | ✗ | _state.pattern = "searchAndTakeRessource: phiras"; | |
| 188 | } | ||
| 189 | else | ||
| 190 | { | ||
| 191 | ✗ | group(); | |
| 192 | ✗ | _state.pattern = "group"; | |
| 193 | } | ||
| 194 | ✗ | } | |
| 195 | |||
| 196 | ✗ | void SimpleBot::handleLvl4() | |
| 197 | { | ||
| 198 | ✗ | if (_state.ressources.linemate < 1) | |
| 199 | { | ||
| 200 | ✗ | searchAndTakeRessource("linemate"); | |
| 201 | ✗ | _state.pattern = "searchAndTakeRessource: linemate"; | |
| 202 | } | ||
| 203 | ✗ | else if (_state.ressources.deraumere < 1) | |
| 204 | { | ||
| 205 | ✗ | searchAndTakeRessource("deraumere"); | |
| 206 | ✗ | _state.pattern = "searchAndTakeRessource: deraumere"; | |
| 207 | } | ||
| 208 | ✗ | else if (_state.ressources.sibur < 2) | |
| 209 | { | ||
| 210 | ✗ | searchAndTakeRessource("sibur"); | |
| 211 | ✗ | _state.pattern = "searchAndTakeRessource: sibur"; | |
| 212 | } | ||
| 213 | ✗ | else if (_state.ressources.phiras < 1) | |
| 214 | { | ||
| 215 | ✗ | searchAndTakeRessource("phiras"); | |
| 216 | ✗ | _state.pattern = "searchAndTakeRessource: phiras"; | |
| 217 | } | ||
| 218 | else | ||
| 219 | { | ||
| 220 | ✗ | group(); | |
| 221 | ✗ | _state.pattern = "group"; | |
| 222 | } | ||
| 223 | ✗ | } | |
| 224 | |||
| 225 | ✗ | void SimpleBot::handleLvl5() | |
| 226 | { | ||
| 227 | ✗ | PRINT_ALERT("handleLvl5\n"); | |
| 228 | ✗ | if (_state.ressources.linemate < 1) | |
| 229 | { | ||
| 230 | ✗ | searchAndTakeRessource("linemate"); | |
| 231 | ✗ | _state.pattern = "searchAndTakeRessource: linemate"; | |
| 232 | } | ||
| 233 | ✗ | else if (_state.ressources.deraumere < 2) | |
| 234 | { | ||
| 235 | ✗ | searchAndTakeRessource("deraumere"); | |
| 236 | ✗ | _state.pattern = "searchAndTakeRessource: deraumere"; | |
| 237 | } | ||
| 238 | ✗ | else if (_state.ressources.sibur < 1) | |
| 239 | { | ||
| 240 | ✗ | searchAndTakeRessource("sibur"); | |
| 241 | ✗ | _state.pattern = "searchAndTakeRessource: sibur"; | |
| 242 | } | ||
| 243 | ✗ | else if (_state.ressources.mendiane < 3) | |
| 244 | { | ||
| 245 | ✗ | searchAndTakeRessource("mendiane"); | |
| 246 | ✗ | _state.pattern = "searchAndTakeRessource: mendiane"; | |
| 247 | } | ||
| 248 | else | ||
| 249 | { | ||
| 250 | ✗ | group(); | |
| 251 | ✗ | _state.pattern = "group"; | |
| 252 | } | ||
| 253 | ✗ | } | |
| 254 | |||
| 255 | ✗ | void SimpleBot::handleLvl6() | |
| 256 | { | ||
| 257 | ✗ | PRINT_ALERT("handleLvl6\n"); | |
| 258 | ✗ | if (_state.ressources.linemate < 1) | |
| 259 | { | ||
| 260 | ✗ | searchAndTakeRessource("linemate"); | |
| 261 | ✗ | _state.pattern = "searchAndTakeRessource: linemate"; | |
| 262 | } | ||
| 263 | ✗ | else if (_state.ressources.deraumere < 2) | |
| 264 | { | ||
| 265 | ✗ | searchAndTakeRessource("deraumere"); | |
| 266 | ✗ | _state.pattern = "searchAndTakeRessource: deraumere"; | |
| 267 | } | ||
| 268 | ✗ | else if (_state.ressources.sibur < 3) | |
| 269 | { | ||
| 270 | ✗ | searchAndTakeRessource("sibur"); | |
| 271 | ✗ | _state.pattern = "searchAndTakeRessource: sibur"; | |
| 272 | } | ||
| 273 | ✗ | else if (_state.ressources.phiras < 1) | |
| 274 | { | ||
| 275 | ✗ | searchAndTakeRessource("phiras"); | |
| 276 | ✗ | _state.pattern = "searchAndTakeRessource: phiras"; | |
| 277 | } | ||
| 278 | else | ||
| 279 | { | ||
| 280 | ✗ | group(); | |
| 281 | ✗ | _state.pattern = "group"; | |
| 282 | } | ||
| 283 | ✗ | } | |
| 284 | |||
| 285 | ✗ | void SimpleBot::handleLvl7() | |
| 286 | { | ||
| 287 | ✗ | PRINT_ALERT("handleLvl7\n"); | |
| 288 | ✗ | if (_state.ressources.linemate < 2) | |
| 289 | { | ||
| 290 | ✗ | searchAndTakeRessource("linemate"); | |
| 291 | ✗ | _state.pattern = "searchAndTakeRessource: linemate"; | |
| 292 | } | ||
| 293 | ✗ | else if (_state.ressources.deraumere < 2) | |
| 294 | { | ||
| 295 | ✗ | searchAndTakeRessource("deraumere"); | |
| 296 | ✗ | _state.pattern = "searchAndTakeRessource: deraumere"; | |
| 297 | } | ||
| 298 | ✗ | else if (_state.ressources.sibur < 2) | |
| 299 | { | ||
| 300 | ✗ | searchAndTakeRessource("sibur"); | |
| 301 | ✗ | _state.pattern = "searchAndTakeRessource: sibur"; | |
| 302 | } | ||
| 303 | ✗ | else if (_state.ressources.mendiane < 2) | |
| 304 | { | ||
| 305 | ✗ | searchAndTakeRessource("mendiane"); | |
| 306 | ✗ | _state.pattern = "searchAndTakeRessource: mendiane"; | |
| 307 | } | ||
| 308 | ✗ | else if (_state.ressources.phiras < 2) | |
| 309 | { | ||
| 310 | ✗ | searchAndTakeRessource("phiras"); | |
| 311 | ✗ | _state.pattern = "searchAndTakeRessource: phiras"; | |
| 312 | } | ||
| 313 | ✗ | else if (_state.ressources.thystame < 1) | |
| 314 | { | ||
| 315 | ✗ | searchAndTakeRessource("thystame"); | |
| 316 | ✗ | _state.pattern = "searchAndTakeRessource: thystame"; | |
| 317 | } | ||
| 318 | else | ||
| 319 | { | ||
| 320 | ✗ | group(); | |
| 321 | ✗ | _state.pattern = "group"; | |
| 322 | } | ||
| 323 | ✗ | } | |
| 324 |