/** * Main routine */ int main(int argc, char** argv) { problem_t problem; read_options(argc, argv, &problem); clock_t start = clock(), diff; //Clocking if (problem.verbose) { for (int i = 0; i < problem.g; ++i) { printf("\nGeneration %d\n", i); print_board(&problem); advance_board(&problem, 1); } } else { #ifdef WITH_TIMING double t0 = omp_get_wtime(); advance_board(&problem, problem.g); double t1 = omp_get_wtime(); printf("Cells / sec: %e\n", problem.g * problem.nboard * problem.nboard / (t1-t0)); #else advance_board(&problem, problem.g); <<<<<<< HEAD diff = clock() - start; //get the time and print the result int msec = diff*1000/CLOCKS_PER_SEC; printf("Time taken %d seconds %d milliseconds", msec/1000, msec%1000); ======= #endif } >>>>>>> upstream/master
void Board::do_best_move() { int best_score = INT_MIN; Board* best_board = 0; for (int x = 0; x < SQUARE_DIMENSION; ++x) { for (int y = 0; y < SQUARE_DIMENSION; ++y) { if ((*board)[x][y]->get_occupant() == current_player) { std::vector<Board::Direction> available_directions = find_available_directions(*(*board)[x][y]); for (int i = 0; i < available_directions.size(); ++i) { Board* new_board = travel(*(*board)[x][y], available_directions[i]); int new_board_min_score = new_board->min_max_possible_score(current_player, true, MIN_MAX_TREE_DEPTH, best_score); if (best_score < new_board_min_score) { best_score = new_board_min_score; delete best_board; best_board = new_board; } else { delete new_board; } } } } } if (best_board) { advance_board(best_board->board); delete best_board; } else { // No moves possible printf("Player %s has won\n", current_player == Square::BLACK ? "WHITE" : "BLACK"); game_over = true; } }
void Board::do_random_move() { Board* new_board = 0; for (int x = 0; x < SQUARE_DIMENSION; ++x) { for (int y = 0; y < SQUARE_DIMENSION; ++y) { if ((*board)[x][y]->get_occupant() == current_player) { std::vector<Board::Direction> available_directions = find_available_directions(*(*board)[x][y]); int count_directions = available_directions.size(); if (count_directions == 0) { continue; } int direction_idx = rand() % count_directions; new_board = travel(*(*board)[x][y], available_directions[direction_idx]); break; } } if (new_board) { break; } } if (new_board) { advance_board(new_board->board); delete new_board; } else { // No moves possible printf("Player %s has won\n", current_player == Square::BLACK ? "WHITE" : "BLACK"); game_over = true; } }