Example #1
0
    // position() is called when engine receives the "position" UCI command.
    // The function sets up the position described in the given FEN string ("fen")
    // or the starting position ("startpos") and then makes the moves given in the
    // following move list ("moves").

    public static void position(Position pos, istringstream @is)
    {
        Move   m;
        string token;
        string fen;

        @is >> token;

        if (token == "startpos")
        {
            fen = ((char)StartFEN).ToString();
            @is >> token;             // Consume "moves" token if any
        }
        else if (token == "fen")
        {
            while (@is >> token && token != "moves")
            {
                fen += token + " ";
            }
        }
        else
        {
            return;
        }

        pos.set(fen, GlobalMembersUcioption.Options["UCI_Chess960"], GlobalMembersThread.Threads.main());
        #if StateStackPtr_ConditionalDefinition1
        SetupStates = std.auto_ptr <Stack <StateInfo> >(new Stack <StateInfo>());
        #elif StateStackPtr_ConditionalDefinition2
        SetupStates = std.auto_ptr <Stack <StateInfo> >(new Stack <StateInfo>());
        #else
        SetupStates = Search.StateStackPtr(new Stack <StateInfo>());
        #endif

        // Parse move list (if any)
        while (@is >> token && (m = GlobalMembersUci.to_move(pos, token)) != Move.MOVE_NONE)
        {
            SetupStates.push(new StateInfo());
            pos.do_move(m, SetupStates.top());
        }
    }
Example #2
0
    // go() is called when engine receives the "go" UCI command. The function sets
    // the thinking time and other parameters from the input string, then starts
    // the search.

    public static void go(Position pos, istringstream @is)
    {
        Search.LimitsType limits = new Search.LimitsType();
        string            token;

        while (@is >> token)
        {
            if (token == "searchmoves")
            {
                while (@is >> token)
                {
                    limits.searchmoves.Add(GlobalMembersUci.to_move(pos, token));
                }
            }

            else if (token == "wtime")
            {
                @is >> limits.time[(int)Color.WHITE];
            }
            else if (token == "btime")
            {
                @is >> limits.time[(int)Color.BLACK];
            }
            else if (token == "winc")
            {
                @is >> limits.inc[(int)Color.WHITE];
            }
            else if (token == "binc")
            {
                @is >> limits.inc[(int)Color.BLACK];
            }
            else if (token == "movestogo")
            {
                @is >> limits.movestogo;
            }
            else if (token == "depth")
            {
                @is >> limits.depth;
            }
            else if (token == "nodes")
            {
                @is >> limits.nodes;
            }
            else if (token == "movetime")
            {
                @is >> limits.movetime;
            }
            else if (token == "mate")
            {
                @is >> limits.mate;
            }
            else if (token == "infinite")
            {
                limits.infinite = true;
            }
            else if (token == "ponder")
            {
                limits.ponder = true;
            }
        }

        GlobalMembersThread.Threads.start_thinking(pos, limits, SetupStates);
    }