예제 #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);
            }
        }
예제 #3
0
        public static string Join <T>(ICollection <T> list, string separator, Stringizer <T> stringize)
        {
            var needsep = false;
            var s       = new StringBuilder(list.Count * 64);

            foreach (var value in list)
            {
                if (needsep)
                {
                    s.Append(separator);
                }
                else
                {
                    needsep = true;
                }

                s.Append(stringize(value));
            }

            return(s.ToString());
        }
예제 #4
0
 public DropDownList(ICollection <T> items, Stringizer stringizer)
 {
     this.items      = new List <T>(items);
     this.stringizer = stringizer;
     this.maxOpenedListVisibleItemsCount = 6;
 }