Ejemplo n.º 1
0
        /*
         * /// <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));
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }