/* * /// <summary> * /// 取った駒を差替えます。 * /// * /// 棋譜読取時用です。マウス操作時は、流れが異なるので使えません。 * /// </summary> * public static void AppendChildB_Swap( * Komasyurui14 tottaSyurui, * SkyConst src_Sky, * KifuTree kifu282, * out Node<ShootingStarlightable, KyokumenWrapper> out_swapedNode, * string hint, * IErrorController logTag * ) * { * out_swapedNode = null; * * if (kifu282.CurNode.IsRoot()) * { * // ルート・ノードなら * goto gt_EndMethod; * // 子要素をスワップするためには親要素が必要だが、ルートには親ノードがないので、このあとの操作はできません。 * } * * if (null == src_Sky) * { * throw new Exception("ノードを追加しようとしましたが、指定されたnewSkyがヌルです。"); * } * * // 現手番 * Playerside genTebanside = ((KifuNode)kifu282.CurNode).Tebanside; * // 現ノード削除。元のキーは退避。 * ShootingStarlightable motoKey = (ShootingStarlightable)kifu282.PopCurrentNode().Key; * * // 元のキーの、取った駒の種類だけを差替えます。 * RO_ShootingStarlight swapedMove = Util_Sky258A.BuildMove(motoKey.LongTimeAgo, motoKey.Now, tottaSyurui); * * // キーを差替えたノード * out_swapedNode = new KifuNodeImpl(swapedMove, new KyokumenWrapper(src_Sky), genTebanside); * * System.Diagnostics.Debug.Assert(!kifu282.CurNode.ContainsKey_ChildNodes(Util_Sky278.TranslateMove_StarlightToText(out_swapedNode.Key))); * * * // さきほど カレントノードを削除したので、 * // 今、カレントノードは、1つ前のノードになっています。 * // ここに、差替えたノードを追加します。 * kifu282.CurNode.Add_ChildNode(Util_Sky278.TranslateMove_StarlightToText(out_swapedNode.Key), out_swapedNode); * out_swapedNode.ParentNode = kifu282.CurNode; * * Logger.Trace($"リンクトリストの、最終ノードは差し替えられた hint=[{hint}] item=[{Util_Sky278.TranslateMove_StarlightToText(swapedMove)}]"); * // memberName=[{memberName}"] sourceFilePath=[{sourceFilePath}] sourceLineNumber=[{sourceLineNumber}] * * gt_EndMethod: * ; * } */ /// <summary> /// [ここから採譜]機能 /// </summary> public static void SetStartpos_KokokaraSaifu(KifuTree kifu, Playerside pside) { //------------------------------------------------------------ // 棋譜を空に //------------------------------------------------------------ kifu.Clear(); kifu.SetProperty(Word_KifuTree.PropName_Startpos, Conv_KifuNode.ToSfenstring((KifuNode)kifu.CurNode, pside)); }
/// <summary> /// 盤1個分のログ。 /// </summary> private static void AAA_Write_Node( IEngineConf engineConf, ref int logFileCounter, string nodePath, KifuNode node, KifuTree kifu, string relFolder, KyokumenPngEnvironment reportEnvironment ) { string fileName = ""; // 出力先 fileName = Conv_Filepath.ToEscape($"_log_{((int)node.Score)}点_{logFileCounter}_{nodePath}.png"); relFolder = Conv_Filepath.ToEscape(relFolder); // // 画像ログ // if (true) { int srcMasu_orMinusOne = -1; int dstMasu_orMinusOne = -1; if (null != node.Key) { srcMasu_orMinusOne = Conv_SyElement.ToMasuNumber(((RO_Star)node.Key.LongTimeAgo).Masu); dstMasu_orMinusOne = Conv_SyElement.ToMasuNumber(((RO_Star)node.Key.Now).Masu); } KyokumenPngArgs_FoodOrDropKoma foodKoma; if (null != node.Key.FoodKomaSyurui) { switch (Util_Komasyurui14.NarazuCaseHandle((PieceType)node.Key.FoodKomaSyurui)) { case PieceType.None: foodKoma = KyokumenPngArgs_FoodOrDropKoma.NONE; break; case PieceType.P: foodKoma = KyokumenPngArgs_FoodOrDropKoma.FU__; break; case PieceType.L: foodKoma = KyokumenPngArgs_FoodOrDropKoma.KYO_; break; case PieceType.N: foodKoma = KyokumenPngArgs_FoodOrDropKoma.KEI_; break; case PieceType.S: foodKoma = KyokumenPngArgs_FoodOrDropKoma.GIN_; break; case PieceType.G: foodKoma = KyokumenPngArgs_FoodOrDropKoma.KIN_; break; case PieceType.R: foodKoma = KyokumenPngArgs_FoodOrDropKoma.HI__; break; case PieceType.B: foodKoma = KyokumenPngArgs_FoodOrDropKoma.KAKU; break; default: foodKoma = KyokumenPngArgs_FoodOrDropKoma.UNKNOWN; break; } } else { foodKoma = KyokumenPngArgs_FoodOrDropKoma.NONE; } // 評価明細に添付 Util_KyokumenPng_Writer.Write1( Conv_KifuNode.ToRO_Kyokumen1(node), srcMasu_orMinusOne, dstMasu_orMinusOne, foodKoma, ConvMoveStrSfen.ToMoveStrSfen(node.Key), relFolder, fileName, reportEnvironment ); logFileCounter++; } // // 評価明細 // { Util_KifuTreeLogWriter.AAAA_Write_HyokaMeisai(engineConf, fileName, node, relFolder, reportEnvironment); } }