bool Board::isGameOver(GameResult *result) { if (lastMove == pass && secondLastMove == pass) { float komi = 7.5; float score = getTaylorScore(komi); if (score > 0) *result = BlackWon; else if (score < 0) *result = WhiteWon; else *result = Draw; return true; } return false; }
int main() { printf("Go MonteCarloAI\n"); int numSimulations = 0; float millaSecondsToThink = 15000; auto b = new Board(); b->init(); UCTNode *currentNode; root = new UCTNode(-1, -1, nullptr); UCTNode::rootState = b; currentNode = root; b->show(); Patterns patterns; // patterns.init(patternsFile3x3, patternsFile5x5); GameResult result = None; while (!b->isGameOver(&result)) { if (b->turn == White) { computerMove(¤tNode, b, numSimulations, millaSecondsToThink, nullptr); // &patterns); } else { // computerMove(¤tNode, b, numSimulations, millaSecondsToThink, nullptr); // &patterns); playerMove(¤tNode, b); // randomMove(¤tNode, b); } b->show(); } if (result == Draw) { printf("Draw\n"); } else if (static_cast<Player>(result) == Black) { printf("Black Won\n"); } else { printf("White Won\n"); } float score = 0; score = b->getTaylorScore(0.5); printf("\nScore: %f\n", score); delete currentNode; delete b; return 0; }