void runPlayerStrategyTests() { log_log("RUNNING PLAYER_STRATEGY TESTS\n"); log_log("Testing getRandomMove...\n"); UnscoredState state; stringToUnscoredState(&state, "111101111111111111111111111111111111111111111111111111111111111111111111"); Edge edge = getRandomMove(&state); log_log("getRandomMove returned %d\n", edge); assert(edge == 4); stringToUnscoredState(&state, "100111111111111111111111111111111111111111111111111111111111111111111111"); edge = getRandomMove(&state); assert(edge == 1 || edge == 2); log_log("Testing getFirstBoxCompletingMove...\n"); stringToUnscoredState(&state, "010100000101000000101000000000000000000000000000000000000000000000000000"); edge = getFirstBoxCompletingMove(&state); log_log("getFirstBoxCompletingMove returned %d\n", edge); assert(edge == 10); stringToUnscoredState(&state, "000000000000000000000000000000000000000000000000000000000000000000000000"); edge = getFirstBoxCompletingMove(&state); log_log("getFirstBoxCompletingMove returned %d\n", edge); assert(edge == NO_EDGE); log_log("PLAYER_STRATEGY TESTS COMPLETED\n\n"); }
Edge chooseMove(UnscoredState state, Strategy strategy, int turnTimeMillis) { assert(turnTimeMillis > 0); Edge moveChoice = NO_EDGE; unsigned long long startTime = getTimeMillis(); switch(strategy) { case RANDOM_MOVE: moveChoice = getRandomMove(&state); break; case FIRST_BOX_COMPLETING_MOVE: { Edge move = getFirstBoxCompletingMove(&state); if (move != NO_EDGE) moveChoice = move; else moveChoice = getRandomMove(&state); } break; case MONTE_CARLO: moveChoice = getMCTSMove(&state, turnTimeMillis, false); break; case GMCTS: moveChoice = getGMCTSMove(&state, turnTimeMillis); break; case ALPHA_BETA: moveChoice = getABMove(&state, 7, false); break; case GRAPHS: moveChoice = getGraphsMove(&state); break; case DEEPBOX: moveChoice = getDeepBoxMove(&state, turnTimeMillis); break; } unsigned long long endTime = getTimeMillis(); unsigned long long timeTaken = endTime - startTime; log_log("chooseMove: Chose %d. Time taken to choose: %llu.\n", moveChoice, timeTaken); return moveChoice; // Avoid compiler warnings. }
void Board::makeRandomMove(std::default_random_engine& engine) { makeMove(getRandomMove(engine)); }
void Snake::move(Map &m) { Map::e_caseType c; SnakeIA::e_Direction d; Cdn<int> head(m_snake.back()); bool moved(false); d = getMove(m, head); while (moved == false) { if (d == UP) { if ((c = m.getCase(head.getX(), head.getY() - 1)) == Map::EMPTY || c == Map::FOOD) { if (c == Map::FOOD) m.deleteFood(head.getX(), head.getY() - 1); m_snake.push_back(Cdn<int>(head.getX(), head.getY() - 1)); moved = true; } } if (d == DOWN) { if ((c = m.getCase(head.getX(), head.getY() + 1)) == Map::EMPTY || c == Map::FOOD) { if (c == Map::FOOD) m.deleteFood(head.getX(), head.getY() + 1); m_snake.push_back(Cdn<int>(head.getX(), head.getY() + 1)); moved = true; } } if (d == LEFT) { if ((c = m.getCase(head.getX() - 1, head.getY())) == Map::EMPTY || c == Map::FOOD) { if (c == Map::FOOD) m.deleteFood(head.getX() - 1, head.getY()); m_snake.push_back(Cdn<int>(head.getX() - 1, head.getY())); moved = true; } } if (d == RIGHT) { if ((c = m.getCase(head.getX() + 1, head.getY())) == Map::EMPTY || c == Map::FOOD) { if (c == Map::FOOD) { m.deleteFood(head.getX() + 1, head.getY()); m_eated++; } m_snake.push_back(Cdn<int>(head.getX() + 1, head.getY())); moved = true; } } d = getRandomMove(); } if (c == Map::FOOD) m_toGrow++; if (m_toGrow == 0) m_snake.erase(m_snake.begin()); else { std::cout << "I'm Growing, my size is " << m_snake.size() << std::endl; m_toGrow--; } }