Пример #1
0
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;
}
Пример #2
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);
	}
Пример #3
0
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;
    }
  }
}
Пример #4
0
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);
}
Пример #5
0
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);

	}