Пример #1
0
        /// <summary>
        /// 各段の駒文字を返します。
        /// </summary>
        private static IEnumerable <string> RankToSfen(Board board, int rank)
        {
            var spaceCount = 0;

            for (var file = Board.BoardSize; file >= 1; --file)
            {
                var piece = board[file, rank];

                if (piece == null)
                {
                    // 駒がない場合
                    spaceCount += 1;
                }
                else
                {
                    // 駒がある場合
                    if (spaceCount > 0)
                    {
                        yield return(spaceCount.ToString());

                        spaceCount = 0;
                    }

                    yield return(SfenUtil.PieceToSfen(piece));
                }
            }

            // 空白の数は数字で示します。
            if (spaceCount > 0)
            {
                yield return(spaceCount.ToString());
            }
        }
Пример #2
0
        /// <summary>
        /// 持ち駒をSFEN形式に変換します。
        /// </summary>
        private static string HandToSfen(Board board)
        {
            var handList =
                from turn in new BWType[] { BWType.Black, BWType.White }
            from pieceType in EnumEx.GetValues <PieceType>()
            let obj = new
            {
                Piece = new BoardPiece(pieceType, false, turn),
                Count = board.GetHand(pieceType, turn),
            }
            where obj.Count > 0
            select string.Format("{0}{1}",
                                 (obj.Count > 1 ? obj.Count.ToString() : ""),
                                 SfenUtil.PieceToSfen(obj.Piece));

            // ToArray()しないと、MONOでstring.Joinのコンパイルに失敗します。
            var array = handList.ToArray();

            return(array.Any() ? string.Join("", array) : "-");
        }