Esempio n. 1
0
        private Board MakeBoard1(BWType turn)
        {
            /*
             * 後手の持駒:飛 桂 香 歩三
             * 9 8 7 6 5 4 3 2 1
             +---------------------------+
             |v香 ・ 龍 ・ ・ ・ ・ ・ ・|一
             | ・ ・ ・ ・v玉 ・ ・ ・ ・|二
             | ・ 香v歩 ・v金 ・v桂 ・ ・|三
             | ・ 歩v銀v銀v金 ・ ・ 銀 ・|四
             | 歩 ・ ・ ・ ・ 歩 歩 ・ ・|五
             | 香 ・ 歩 ・ 馬 ・ ・ ・v歩|六
             |v歩 ・ 桂 金 ・ ・ ・ ・ ・|七
             | ・ 玉 銀 金 ・ ・ 馬 ・ ・|八
             | ・ ・ ・ ・ ・ ・ ・ ・ ・|九
             +---------------------------+
             | 先手の持駒:桂 歩七
             */

            var turnCh = (turn == BWType.Black ? 'b' : 'w');
            var sfen   =
                "l1+R6/4k4/1Lp1g1n2/1Pssg2S1/P4PP2/L1P1+B3p/p1NG5/1KSG2+B2/9" +
                " " + turnCh + " N7Prnl3p 1";
            var board = SfenBoard.Parse(sfen);

            Assert.NotNull(board);
            Assert.True(board.Validate());
            return(board);
        }
Esempio n. 2
0
        public void ParseBoardTest()
        {
            // 初期局面
            Assert.True(Board.BoardEquals(
                            new Board(),
                            SfenBoard.Parse(
                                "lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL" +
                                " b - 1")));

            // 最後の数字はなくてもよい
            Assert.True(Board.BoardEquals(
                            new Board(),
                            SfenBoard.Parse(
                                "lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL" +
                                " b -")));

            // 持ち駒はないとダメ
            Assert.Catch <SfenException>(() =>
                                         SfenBoard.Parse(
                                             "lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b"));

            // 筋が少ない
            Assert.Catch <SfenException>(() =>
                                         SfenBoard.Parse(
                                             "9/9/p/9/9/9/9/9/9 b -"));

            // 筋が多い
            Assert.Catch <SfenException>(() =>
                                         SfenBoard.Parse(
                                             "9/9/p9/9/9/9/9/9/9 b -"));

            // 段が多い
            Assert.Catch <SfenException>(() =>
                                         SfenBoard.Parse(
                                             "9/9/9/9/9/9/9/9/9/p b -"));

            // 段が少ないのは問題にしない
            Assert.True(Board.BoardEquals(
                            new Board(false),
                            SfenBoard.Parse("9/9/9/9/9/9/9/9 b -")));

            // 成れない駒を成る
            Assert.True(Board.BoardEquals(
                            new Board(false),
                            SfenBoard.Parse("9/9/9/9/9/9/9/+G8/9 b -")));
        }
Esempio n. 3
0
        private void BoardAndMoveTest(string boardSfen, string moveListSfen)
        {
            // 指し手から局面を作ります。
            var board1       = new Board();
            var sfenMoveList =
                moveListSfen.Split(
                    new char[] { ' ' },
                    StringSplitOptions.RemoveEmptyEntries)
                .ToList();

            // 指し手を読み込みます。
            var moveList = board1.SfenToMoveList(sfenMoveList)
                           .ToList();

            Assert.AreEqual(sfenMoveList.Count(), moveList.Count());

            moveList.ForEach(_ => Assert.True(board1.DoMove(_)));

            // 出力したSFEN形式の指し手が同じかどうかの確認もします。
            var result = string.Join(" ",
                                     moveList.Select(_ => _.ToSfen()).ToArray());

            Assert.AreEqual(moveListSfen, result);


            // 局面を直接読み込みます。
            var board2 = SfenBoard.Parse(boardSfen);

            // 出力したSFEN形式の局面が同じかどうかの確認もします。
            // (最後の数字には意味がないため、意図的に削っています)
            result = board2.ToSfen();
            Assert.AreEqual(
                boardSfen.Substring(0, boardSfen.Length - 1),
                result.Substring(0, result.Length - 1));


            // 2つの局面を比較します。
            Assert.True(Board.BoardEquals(board1, board2));
        }
Esempio n. 4
0
 /// <summary>
 /// sfen形式に局面を変換します。
 /// </summary>
 public string ToSfen()
 {
     return(SfenBoard.BoardToSfen(this));
 }
Esempio n. 5
0
 /// <summary>
 /// sfen形式の文字列から局面を作成します。
 /// </summary>
 public static Board ParseSfen(string sfen)
 {
     return(SfenBoard.Parse(sfen));
 }