예제 #1
0
        /// <summary>
        /// 指し手の出力
        /// </summary>
        /// <param name="bookstate"></param>
        /// <param name="position"></param>
        /// <param name="aperyBook"></param>
        private static void WriteMoves(SBookState bookstate, SPosition position, StreamWriter wr, int depth)
        {
            if (bookstate == null)
            {
                return;
            }

            if (bookstate.Count != 0)
            {
                return; // 既に出力した
            }

            int count = 0;

            foreach (SBookMove move in bookstate.Moves)
            {
                if (move.Weight != 0)
                {
                    count++;
                }
            }

            bookstate.Count++;

            if (count != 0)
            {
                // 局面の出力
                wr.WriteLine("sfen " + position.PositionToString(depth));

                foreach (SBookMove move in bookstate.Moves)
                {
                    if (move.Weight != 0)
                    {
                        // 指し手の出力
                        MoveData moveData = move.GetMoveData();
                        string   next_str = "none";

                        SBookMove next_move = GetNextMove(move.NextState);
                        if (next_move != null)
                        {
                            MoveData nextMoveData = next_move.GetMoveData();
                            next_str = Sfen.MoveToString(nextMoveData);
                        }

                        wr.WriteLine("{0} {1} {3} {4} {2}", Sfen.MoveToString(moveData), next_str, move.Weight, move.Value, move.Depth);
                    }
                }
            }

            foreach (SBookMove move in bookstate.Moves)
            {
                // 指し手の出力
                MoveData moveData = move.GetMoveData();

                if (position.Move(moveData))
                {
                    // 再帰呼び出し
                    WriteMoves(move.NextState, position, wr, depth + 1);

                    position.UnMove(moveData, null);
                }
            }
        }