Пример #1
0
static void
decide_move(void)
{
    mtx_lock(&game_mutex);

    if (game_started && !is_end() && !is_force_mode) {
        if (game_started && has_single_response()) {
            move m = get_single_response();

            print_computer_move(m);
            add_move(m);
            engine_move_count_inc();
        }
        else {
            move m = book_get_move(book, current_position());
            if (m != none_move) {
                print_computer_move(m);
                add_move(m);
                engine_move_count_inc();
            }
            else {
                set_thinking_done_cb(computer_move,
                                     ++callback_key);
                start_thinking();
            }
        }
    }
    else {
        game_started = false;
    }

    mtx_unlock(&game_mutex);
}
Пример #2
0
bool UCIController::proc_go(const string& cmdstr) {

	StringTokenizer tokens(cmdstr," ");
	int i;
	
	m_meclock.enable(); m_opclock.enable();
	for (i = 1; i < tokens.size(); i++) {
		if (tokens[i] == "wtime") {
			if (m_board.turn() == BB_WHITE)
				m_meclock.setTimeLeft(atoi(tokens[i+1].c_str())/10);
			else if (m_board.turn() == BB_BLACK)
				m_opclock.setTimeLeft(atoi(tokens[i+1].c_str())/10);
		}
		else if (tokens[i] == "btime") {
			if (m_board.turn() == BB_BLACK)
				m_meclock.setTimeLeft(atoi(tokens[i+1].c_str())/10);
			else if (m_board.turn() == BB_WHITE)
				m_opclock.setTimeLeft(atoi(tokens[i+1].c_str())/10);
		}
		else if (tokens[i] == "winc") {
			if (m_board.turn() == BB_WHITE)
				m_meclock.setIncrement(atoi(tokens[i+1].c_str())/10);
			else if (m_board.turn() == BB_BLACK)
				m_opclock.setIncrement(atoi(tokens[i+1].c_str())/10);
		}
		else if (tokens[i] == "binc") {
			if (m_board.turn() == BB_BLACK)
				m_meclock.setIncrement(atoi(tokens[i+1].c_str())/10);
			else if (m_board.turn() == BB_WHITE)
				m_opclock.setIncrement(atoi(tokens[i+1].c_str())/10);
		}
		else if (tokens[i] == "movestogo") {
			m_meclock.setMovesLeft(atoi(tokens[i+1].c_str()));
			m_opclock.setMovesLeft(atoi(tokens[i+1].c_str()));
		}
		else if (tokens[i] == "infinite" || tokens[i] == "ponder") {
			m_meclock.disable();
			m_opclock.disable();
		}
		else if (tokens[i] == "mate" || tokens[i] == "movetime" || tokens[i] == "nodes" ||
				 tokens[i] == "searchmoves")
			WRITEPIPE("UCICONTROLLER: Operation Not Supported\n");
	}

	start_thinking();
	
	return true;
}