示例#1
0
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");
}
示例#2
0
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.
}
示例#3
0
void Board::makeRandomMove(std::default_random_engine& engine) {
  makeMove(getRandomMove(engine));
}
示例#4
0
文件: Snake.cpp 项目: babatz/Snake
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--;
    }
}