/// <summary> /// 指し手の出力 /// </summary> /// <param name="bookstate"></param> /// <param name="position"></param> /// <param name="aperyBook"></param> private static void WriteMoves(SBookState bookstate, SPosition position, StreamWriter wr, int depth) { if (bookstate == null) { return; } if (bookstate.Count != 0) { return; // 既に出力した } int count = 0; foreach (SBookMove move in bookstate.Moves) { if (move.Weight != 0) { count++; } } bookstate.Count++; if (count != 0) { // 局面の出力 wr.WriteLine("sfen " + position.PositionToString(depth)); foreach (SBookMove move in bookstate.Moves) { if (move.Weight != 0) { // 指し手の出力 MoveData moveData = move.GetMoveData(); string next_str = "none"; SBookMove next_move = GetNextMove(move.NextState); if (next_move != null) { MoveData nextMoveData = next_move.GetMoveData(); next_str = Sfen.MoveToString(nextMoveData); } wr.WriteLine("{0} {1} {3} {4} {2}", Sfen.MoveToString(moveData), next_str, move.Weight, move.Value, move.Depth); } } } foreach (SBookMove move in bookstate.Moves) { // 指し手の出力 MoveData moveData = move.GetMoveData(); if (position.Move(moveData)) { // 再帰呼び出し WriteMoves(move.NextState, position, wr, depth + 1); position.UnMove(moveData, null); } } }