result_t* play(uint8_t board_size, neuralnet_t* black, neuralnet_t* white, uint8_t komi, FILE* record) { board_t* board = board_create(board_size); bool game_over = false; int8_t passed = 0; result_t* final = result_init(black, white); //Game loop while(game_over == false) { move_t* move = genmove(board, final); //No move left if(move->x == -1) { game_over = true; break; } //Pass else if(move->x >= board_size) { board_pass(board); ++passed; if(passed > 1) { game_over = true; break; } } //Placement else { write_move(record, board->turn, (uint8_t)move->x, (uint8_t)move->y); board_place(board, (uint8_t)move->x, (uint8_t)move->y); passed = 0; } } //Scoring int score_val = board_score(board); final->score_black = score_val;
int main(void) { srand(time(NULL)); board_t *board = comp_new_rand_board(); char c; dir_t dir; printf("%d\n", NORTH); printf("%d\n", EAST); printf("%d\n", WEST); printf("%d\n", SOUTH); print_board(board); int64_t last_score = 0; for (int i = 0; ;i++) { clock_t start = clock(), diff; dir_t next_move = alpha_beta_next_move(board, 10); diff = clock() - start; int msec = diff * 1000 / CLOCKS_PER_SEC; board_t old_board = *board; player_make_move(board, next_move); if (old_board.b == board->b) { printf("--------- old board -------\n"); print_board(&old_board); printf("--------- last board ------\n"); print_board(board); printf("DONE\n"); return 0; } comp_simulate_turn(board); int64_t new_score = board_score(board); if (new_score <= last_score) { print_board(&old_board); printf("-----------------\n"); print_board(board); printf("-----------------\n"); printf("%d\n", next_move); exit(1); } last_score = new_score; // switch (next_move) { // case NORTH: printf("---------- NORTH - %d ----------\n", msec); break; // case SOUTH: printf("---------- SOUTH - %d ----------\n", msec); break; // case EAST: printf("---------- EAST - %d ----------\n", msec); break; // case WEST: printf("---------- WEST - %d ----------\n", msec); break; // } if (i % 10 == 0) { printf("---------\n"); print_board(board); } } // while not escape sequence for (;;) { if ((c = getchar()) != 27) continue; getchar(); // skip [ switch(getchar()) { case 'A': // up dir = NORTH; break; case 'B': // down dir = SOUTH; break; case 'C': // right dir = EAST; break; case 'D': // left dir = WEST; break; default: continue; } uint64_t old_board = board->b; player_make_move(board, dir); if (old_board != board->b) { comp_simulate_turn(board); print_board(board); printf("--------\n"); } } }