Пример #1
0
        /// <summary>
        /// 指し手行を出力します。
        /// </summary>
        private void WriteMakeKif(TextWriter writer, MoveNode node,
                                  Board board, bool hasVariation)
        {
            var lmove = board.ConvertLiteralFromMove(node.Move, true);

            if (lmove == null || !lmove.Validate())
            {
                Log.Error("指し手'{0}'を出力できませんでした。", node.Move);
                return;
            }

            if (lmove.SpecialMoveType == SpecialMoveType.None)
            {
                // 半角文字相当の文字数で空白の数を計算します。
                var moveText = Stringizer.ToString(lmove, MoveTextStyle.KifFile);
                var hanLen   = moveText.HankakuLength();

                writer.WriteLine(
                    @"{0,4} {1}{2} ({3:mm\:ss} / {4:hh\:mm\:ss}){5}",
                    node.MoveCount,
                    moveText,
                    new string(' ', Math.Max(0, 14 - hanLen)),
                    node.Duration,
                    node.TotalDuration,
                    (hasVariation ? "+" : ""));
            }
            else
            {
                // とりあえず空にしておく
            }
        }
Пример #2
0
        /// <summary>
        /// ki2形式の指し手を出力します。
        /// </summary>
        private void WriteMoveNodeKi2(TextWriter writer, MoveNode node, Board board)
        {
            // 先頭ノードは指し手がありませんが
            // コメントは存在することがあります。
            WriteComment(writer, node);

            var moveList = KifuObject.Convert2List(node);
            var lineList = board.ConvertLiteralListFromMove(moveList, false)
                           .Where(_ => _ != null && _.Validate())
                           .Where(_ => _.SpecialMoveType == SpecialMoveType.None)
                           .Select(_ => Stringizer.ToString(_, MoveTextStyle.Normal))
                           .TakeBy(6)
                           .Select(_ => string.Join(" ", _.ToArray()));

            // 各指し手行を出力します。
            foreach (var line in lineList)
            {
                writer.WriteLine(line);
            }
        }