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); }
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 -"))); }
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)); }
/// <summary> /// sfen形式の文字列から局面を作成します。 /// </summary> public static Board ParseSfen(string sfen) { return(SfenBoard.Parse(sfen)); }