int main(int argc, char **argv) { int temp,row,col; move_t *the_moves_list; scanf("%d",&n_black); for (int i=0; i<n_black; i++) { scanf("%d",&temp); row = (temp-1) / 4; col = 2*((temp-1) % 4)+((row+1)%2); board[row][col] = BLACK; D printf("Placing BLACK at %d (%d,%d)\n",temp,row,col); } scanf("%d",&n_white); for (int i=0; i<n_white; i++) { scanf("%d",&temp); row = (temp-1) / 4; col = 2*((temp-1) % 4)+((row+1)%2); board[row][col] = WHITE; D printf("Placing WHITE at %d (%d,%d)\n",temp,row,col); } temp = find_best_move(BLACK,WHITE,true,&the_moves_list); printf("Best move sequence is "); while (the_moves_list != NULL) { printf("%d", rowcoltolinear(the_moves_list->row,the_moves_list->col)); the_moves_list = the_moves_list ->next; if (the_moves_list) printf("-"); } printf("\n"); return 0; }
void bench() { /*char p[] = "2rr3k/pp3pp1/1nnqbN1p/3pN3/2pP4/2P3Q1/PPB4P/R4RK1 w - - 0 1";*/ char p[] = "r2q1rk1/1ppnbppp/p2p1nb1/3Pp3/2P1P1P1/2N2N1P/PPB1QP2/R1B2RK1 b - - "; /*char p[] = "8/pR1b1kpp/8/8/3p2n1/3P4/P4qPP/Q6K b - - 0 28"; char p[]="8/5kpp/2K5/p5q1/6P1/5P2/8/2q5 w - - 0 53"; 2rr3k/pp3pp1/1nnqbN1p/3pN3/2pP4/2P3Q1/PPB4P/R4RK1 w - - 0 1 */ double nps; unsigned int start_time, end_time, delta, c; nps = 0; delta = 0; /* Important area for testing */ for (c = 0;c < 5;c++) { set_position(p); init_data(); print_board(); tree.max_depth = 8; tree.delta_time = (10 * 60 * 1000); start_time = time_elapsed(); find_best_move(IO_CONSOLE,NEW_SEARCH); end_time = time_elapsed(); nps += Nodes; delta += (end_time - start_time); } nps /= (double)(delta); nps *= 1000.0; printf("Nodes per second: %d\n", (int)nps); }
int play(int me, int opponent, int row, int col, bool first_player, move_t **moves) { bool can_capture_right, can_capture_left; move_t *moves_right, *moves_left; int score_right = 0; int score_left = 0; if (me == BLACK) { D printf("BLACK: "); can_capture_left = can_capture(me,opponent,row,col,row+1,col+1,row+2,col+2); can_capture_right = can_capture(me,opponent,row,col,row+1,col-1,row+2,col-2); D printf(" From (%d,%d): Right? %s Left? %s\n",row,col,(can_capture_right ? "Yes" : "No"), (can_capture_left ? "Yes" : "No")); if (can_capture_left) score_left = 1 + test_capture(me,opponent,row,col,row+1,col+1,row+2,col+2,first_player,&moves_left); if (can_capture_right) score_right = 1 + test_capture(me,opponent,row,col,row+1,col-1,row+2,col-2,first_player,&moves_right); moves_left = move_gen(row+2,col+2,moves_left); moves_right = move_gen(row+2,col-2,moves_right); } else { D printf("WHITE: "); can_capture_left = can_capture(me,opponent,row,col,row-1,col-1,row-2,col-2); can_capture_right = can_capture(me,opponent,row,col,row-1,col+1,row-2,col+2); if (can_capture_left) score_left = 1 + test_capture(me,opponent,row,col,row-1,col-1,row-2,col-2,first_player,&moves_left); if (can_capture_right) score_right = 1 + test_capture(me,opponent,row,col,row-1,col+1,row-2,col+2,first_player,&moves_right); moves_left = move_gen(row-2,col-2,moves_left); moves_right = move_gen(row-2,col+2,moves_right); } if ((!can_capture_right) && (!can_capture_left) && first_player) { move_t *temp_moves; *moves = NULL; D printf(" returning 0 (no captures available)\n"); return - find_best_move(opponent,me,false,&temp_moves); } else { if ((can_capture_left && (!can_capture_right)) || (can_capture_left && can_capture_right && (score_left > score_right))) { *moves = moves_left; D printf(" returning %d (score_left)\n",score_left); return score_left; } else { *moves = moves_right; D printf(" returning %d (score_right)\n",score_right); return score_right; } } }
void go(void) { prune_tree(rootNode); // Generate move tree //printf("[DEBUG] Building move tree\n"); build_move_tree(rootNode, 0, board, isWhitesMove, 0); // display_move_tree(rootNode, 0); // Work out optimal moves from move tree //printf("[DEBUG] Parsing move tree\n"); find_best_move(); //printf("[DEBUG] Displaying best move\n"); uci_bestmove(); // Clean up // printf("[DEBUG] Cleanup\n"); // prune_tree(rootNode); }
void order() { char p1[] = "1k1r4/pp1b1R2/3q2pp/4p3/2B5/4Q3/PPP2B2/2K5 b - - "; char p2[] = "3r1k2/4npp1/1ppr3p/p6P/P2PPPP1/1NR5/5K2/2R5 w - - "; char p3[] = "2q1rr1k/3bbnnp/p2p1pp1/2pPp3/PpP1P1P1/1P2BNNP/2BQ1PRK/7R b - - "; char p4[] = "rnbqkb1r/p3pppp/1p6/2ppP3/3N4/2P5/PPP1QPPP/R1B1KB1R w KQkq - "; char p5[] = "r1b2rk1/2q1b1pp/p2ppn2/1p6/3QP3/1BN1B3/PPP3PP/R4RK1 w - - "; char p6[] = "2r3k1/pppR1pp1/4p3/4P1P1/5P2/1P4K1/P1P5/8 w - - "; char p7[] = "1nk1r1r1/pp2n1pp/4p3/q2pPp1N/b1pP1P2/B1P2R2/2P1B1PP/R2Q2K1 w - - "; char p8[] = "4b3/p3kp2/6p1/3pP2p/2pP1P2/4K1P1/P3N2P/8 w - - "; char p9[] = "2kr1bnr/pbpq4/2n1pp2/3p3p/3P1P1B/2N2N1Q/PPP3PP/2KR1B1R w - - "; char p10[] = "3rr1k1/pp3pp1/1qn2np1/8/3p4/PP1R1P2/2P1NQPP/R1B3K1 b - - "; char p11[] = "2r1nrk1/p2q1ppp/bp1p4/n1pPp3/P1P1P3/2PBB1N1/4QPPP/R4RK1 w - - "; char p12[] = "r3r1k1/ppqb1ppp/8/4p1NQ/8/2P5/PP3PPP/R3R1K1 b - - "; char p13[] = "r2q1rk1/4bppp/p2p4/2pP4/3pP3/3Q4/PP1B1PPP/R3R1K1 w - - "; char p14[] = "rnb2r1k/pp2p2p/2pp2p1/q2P1p2/8/1Pb2NP1/PB2PPBP/R2Q1RK1 w - - "; char p15[] = "2r3k1/1p2q1pp/2b1pr2/p1pp4/6Q1/1P1PP1R1/P1PN2PP/5RK1 w - - "; char p16[] = "r1bqkb1r/4npp1/p1p4p/1p1pP1B1/8/1B6/PPPN1PPP/R2Q1RK1 w kq - "; char p17[] = "r2q1rk1/1ppnbppp/p2p1nb1/3Pp3/2P1P1P1/2N2N1P/PPB1QP2/R1B2RK1 b - - "; char p18[] = "r1bq1rk1/pp2ppbp/2np2p1/2n5/P3PP2/N1P2N2/1PB3PP/R1B1QRK1 b - - "; char p19[] = "3rr3/2pq2pk/p2p1pnp/8/2QBPP2/1P6/P5PP/4RRK1 b - - "; char p20[] = "r4k2/pb2bp1r/1p1qp2p/3pNp2/3P1P2/2N3P1/PPP1Q2P/2KRR3 w - - "; char p21[] = "3rn2k/ppb2rpp/2ppqp2/5N2/2P1P3/1P5Q/PB3PPP/3RR1K1 w - - "; char p22[] = "2r2rk1/1bqnbpp1/1p1ppn1p/pP6/N1P1P3/P2B1N1P/1B2QPP1/R2R2K1 b - - "; char p23[] = "r1bqk2r/pp2bppp/2p5/3pP3/P2Q1P2/2N1B3/1PP3PP/R4RK1 b kq - "; char p24[] = "r2qnrnk/p2b2b1/1p1p2pp/2pPpp2/1PP1P3/PRNBB3/3QNPPP/5RK1 w - -"; unsigned __int64 n; n = 0; set_position(p1); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p2); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p3); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p4); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p5); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p6); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p7); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p8); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p9); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p10); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p11); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p12); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p13); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p14); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p15); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p16); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p17); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p18); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p19); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p20); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p21); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p22); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p23); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; set_position(p24); init_data(); print_board(); tree.max_depth = ORDER_DEPTH; tree.delta_time = (ORDER_TIME * 60 * 1000); find_best_move(IO_CONSOLE,NEW_SEARCH); n += Nodes; printf("Nodes : %llu\n", n); }